Gentoo Archives: gentoo-embedded

From: Marcel Romijn <MRomijn@×××××××××××××××.com>
To: gentoo-embedded@l.g.o
Subject: RE: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07
Date: Fri, 12 Aug 2005 06:39:38
Hello Heath,

Nice writedown! I haven't made it to the end yet (lack of time), but I'm
getting there...

I noticed some issues along the way (not counting grub begin spelled as
"grug" or "gurb" ;-) )

In step 3 you write:

# Set root password for the embedded_rootfs
chromm /embedded_rootfs
rm /embedded_rootfs/etc/passwd-

I presume 'chromm' should have been 'chroot' ?
If it is indeed 'chroot' then you should either do "rm /etc/passwd-"
before the "exit" or the "exit" before the "rm

A few lines down, you write:

rm -R /embedded_rootfs/var/db/pkg/ *

As a reletive newbie, doing a quick copy/paste of this command late in
the evening as root in '/', this wiped out all files, except the ones
that were firmly locked.
Fortunately, I'm going through you HowTo in VMWare, so I could restore a
previous snapshot ;-)

I presume the space before the '*' should have been omitted?

rm -R /embedded_rootfs/var/db/pkg/*

My aim is to create an embedded Gentoo for a Via Epia ME6000, which
reads the kernel and a ramdisk image from CF and then runs completely
from RAM.
If I'm not mistaken, you were heading for a Via Epia as well?


Marcel Romijn

-----Original Message-----
From: Heath Holcomb [mailto:liquidcable@×××××.com] 
Sent: Monday, 08 August, 2005 4:17
To: gentoo-embedded@l.g.o
Subject: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07

Version 0.07
Please add, delete, modify. Thanks!

Several fixes.  Root password now works.  Several work arounds are no
need, as the embedded Gentoo team has fixed them (I'm guess because I no

longer get those errors).  There is still one problem when "emerge -e
for groff.  Bug 98187 (
out the bug report for the temp fix/work around (USE="-sandbox" emerge

I've update my website with this version also.

# Embedded Gentoo How-To for x86
# A how-to guide to setup a Gentoo embedded environment, you must be
# These commands are to be run on your development system, 
# any x86 Gentoo Linux computer will do.  The system should be fast,
# to speed development.  The target can be any x86 based SBC.  I'm
# using a Geode based SBC.  Latter I'll use a Via based SBC.
# version 0.07
# 2005.8.7
# Heath Holcomb (heath at
# Ned Ludd (original commands posted)
# Lloyd Sargent (contributor)
# Yuri Vasilevski (contributor)
# Mike George (contributor)
# Kammi Cazze (contributor)
# Marius Schaefer (contributor)
# Definitions and Terms
# system_rootfs = your regular rootfs, development computer
# development_rootfs = what you use to build the embedded_rootfs
# embedded_rootfs = rootfs you deploy to the target system
# SBC = single board computer (here it's an x86 based)
# References
# Gentoo embedded mailing list (gentoo-embedded@l.g.o)
# Overview of process (steps)
# 1 - Prepare the development_rootfs from your system_rootfs
# 2 - Build the development_rootfs
# 3 - Build the embedded_rootfs
# 4 - Build and install non-system programs to the embedded_rootfs
# 5 - Build and install a kernel to the embedded_rootfs
# 6 - Deploy embedded_rootfs to target

#----- Step 1 - Prepare the development_rootfs from your system_rootfs

# You must be root.
su -

# Create the development_rootfs.
# I use i586 because of target is a Geode processor.
mkdir -p /opt/i586-gentoo-uclibc-linux/usr/portage

# Download the latest stage 1 tarball.
wget \

# Untar the stage to the development_rootfs.
tar -xvjpf stage1-x86-uclibc-2005.0.tar.bz2 -C

# Mount the proc and portage directories to your development_rootfs.
# Makes your system_rootfs's proc and portage directory available from
# of your development_rootfs (after chrooting).
mount --bind /proc /opt/i586-gentoo-uclibc-linux/proc/
mount --bind /usr/portage /opt/i586-gentoo-uclibc-linux/usr/portage

# Copy over DNS information to the development_rootfs.
cp /etc/resolv.conf /opt/i586-gentoo-uclibc-linux/etc/resolv.conf

# Chroot into the development_rootfs.
chroot /opt/i586-gentoo-uclibc-linux /bin/bash --login

#----- Step 2 - Build the development_rootfs

# Create new environment and load variables into memory.
source /etc/profile

# Modify make.conf file to your liking/needs.
nano -w /etc/make.conf
# This is for my target, Geode x86 processor.
USE="bitmap-fonts minimal truetype-fonts mmx"
CFLAGS="-march=i586 -Os -pipe -fomit-frame-pointer -mmmx"


# Set profile to use 2.6 kernel.
# The current stage uses 2.4 by default, and for most cases you are
# to want a 2.6.x kernel.
cd /etc/
unlink make.profile
ln -s ../usr/portage/profiles/uclibc/x86 make.profile

# Start the bootstrap script.
cd /usr/portage/scripts
./ -p -v

# Emerge the system ebuild for the development_rootfs.
emerge -e system

#----- Step 3 - Build the embedded_rootfs

# Create the embedded_rootfs directory.
mkdir /embedded_rootfs

# Emerge baselayout-lite into embedded_rootfs.
# This gives your system a basic file structure.
# 1.0_pre1 is the only one that is stable, right?
cd /usr/portage/sys-apps/baselayout-lite/
ROOT=/embedded_rootfs emerge baselayout-lite-1.0_pre1.ebuild

# Workaround 1
# Baselayout-lite is still beta, so a few fixes are needed.
# There needs to be a directory "log" in /var.
# Inittab calls for /usr/bin/tail, but it needs to /usr/bin.
mkdir /embedded_rootfs/var/log
nano -w /embedded_rootfs/etc/inittab
#tty3::respawn:/usr/bin/tail -f /var/log/messages
tty3::respawn:/bin/tail -f /var/log/messages

# Emerge uclibc into the embedded_rootfs.
# Use the -K option because we don't get the extra files created by the
# build/emerge process into our embedded rootfs which needs to be as 
# small as possible.
ROOT=/embedded_rootfs emerge -K uclibc

# Emerge busybox into the embedded_rootfs.
# First you must emerge it into your development_rootfs.
# This does not create the symlinks in our development embedded rootfs.
emerge busybox
ROOT=/embedded_rootfs emerge -K busybox

# Create the symlinks for busybox in the embedded_rootfs.
mkdir /embedded_rootfs/proc
mount -o bind /proc/ /embedded_rootfs/proc/
chroot /embedded_rootfs /bin/busybox --install -s
umount /embedded_rootfs/proc

# Set time zone in your embedded_rootfs.
# See for details.
# For central standard time in the US, use "CST6CDT".
nano -w /embedded_rootfs/etc/TZ

# Install a boot loader (usually grug or lilo).
# Once you copy/deploy your embedded_rootfs to your target SBC you will 
# have to run grub on the command line to write to the master boot
# (MBR).
# For some reason not all of /boot/grub is copied over to the 
# embedded_rootfs, so a extra manual copy step is needed.
# The --nodeps gets rip of the run time need of ncurses.
emerge --nodeps grub
ROOT=/embedded_rootfs emerge -K --nodeps grub
cp -R /boot/grub /embedded_rootfs/boot/

# Modify your boot configure file.
# The example below is for a gurb, for a boot partition on /dev/hda1 and
# one partition on the target SBC system.
nano -w /embedded_rootfs/boot/grub/grub.conf
default 0
timeout 10

title=Linux 2.6.x
root (hd0,0)
kernel /vmlinuz-2.6.x root=/dev/hda1 vga=792

# Set root password for the embedded_rootfs
chromm /embedded_rootfs
rm /embedded_rootfs/etc/passwd-

# Modify fstab.
# Below is mine, yours may vary.
nano -w /embedded_rootfs/etc/fstab
/dev/hda1		/		reiserfs	defaults
0 0
none			/proc		proc		defaults
0 0
none			/sys		sysfs		defaults
0 0
none			/dev/shm	tmpfs	defaults	0 0

# Clean up the embedded_rootfs.
# Don't know why these files are there in the first place, so if anyone
# can tell me why.....
rm -R /embedded_rootfs/var/db/pkg/ *
rm -R /embedded_rootfs/var/lib/portage/

#---- Step 4 - Build and install non-system programs to the
embedded_rootfs --

# Emerge other software you need for you embedded target.
# This is very wildly depending on your needs.
# Also your proprietary application will be done here.
emerge foo*
ROOT=/embedded_rootfs emerge -K foo*

#---- Step 5 - Build and install a kernel to the embedded_rootfs

# Install a kernel into embedded_rootfs.
# First we will emerge it into our development_rootfs, then configure
# build it.
emerge vanilla-sources
cd /usr/src/
cd linux
make menuconfig
# Configure your kernel for your TARGET SBC here.  I HIGHLY suggest you
# configure the kernel to compile everything into the kernel, and
# as a module.
ROOT=/embedded_rootfs make modules_install
cp /usr/src/linux/arch/i386/boot/bzImage

# A few notes on compiling your kernel.
# If deploying to Compact Flash/DiskOnChip/SD use ext2, as the
# filing systems "write" to much for a flash device.
# If deploying to a hard drive use a journaling filing system, such as
# ext3 or reiserfs.

#---- Step 6 - Deploy embedded_rootfs to target

# Prepare a Gentoo (or any Linux distro) system on the target SBC using
# harddrive.  This is known as the target development rootfs.
# We will create a partition (/embedded_rootfs) that will server as our 
# "test" partition to deploy our embedded_rootfs that we generate on our
# development_system.
# I use the following partitions to speed development (yours may vary):
# /dev/hda1 - /embedded_rootfs - 1 GB
# /dev/hda2 - /boot - 100 MB
# /dev/hda3 - swap - (size varies, 512 MB is a good number)
# /dev/hda4 - / - (what is left, at least 1.5 GB per 2005.0 install
# Copy over your embedded_rootfs from you development system to your
# system and the directory /embedded_rootfs.  This needs to be done via
NFS as
# need to preserve the permissions.
#The following commands are done from the
# target development rootfs.
mount -t reiserfs /dev/hda1 /mnt/embedded_rootfs
mount -t nfs\\ 
cp -adpR /mnt/nfs_embedded_rootfs/* /mnt/embedded_rootfs

# Modify your target system's gurb.conf (or lilo.conf) for allow you to
# to the embedded_rootfs partition.
# Reboot, and if all goes well you'll be greeted with a login prompt.
# Fin.

heath holcomb
liquidcable at
gentoo-embedded@g.o mailing list

gentoo-embedded@g.o mailing list


Subject Author
RE: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07 Pierre Cassimans <kammicazze@×××××××.com>
Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07 Heath Holcomb <liquidcable@×××××.com>
Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07 Heath Holcomb <liquidcable@×××××.com>