Gentoo Logo
Gentoo Spaceship

Note: Due to technical difficulties, the Archives are currently not up to date. GMANE provides an alternative service for most mailing lists.
c.f. bug 424647
List Archive: gentoo-embedded
Lists: gentoo-embedded: < Prev By Thread Next > < Prev By Date Next >
To: gentoo-embedded@g.o
From: "Pierre Cassimans" <kammicazze@...>
Subject: RE: x86 SBC Gentoo Embedded HotTo version 0.07
Date: Fri, 19 Aug 2005 09:05:08 +0000

>From: Heath Holcomb <liquidcable@...>
>Reply-To: gentoo-embedded@g.o
>To: gentoo-embedded@g.o
>Subject: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07
>Date: Sun, 7 Aug 2005 21:16:59 -0500
>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 -e
>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 root.
># 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@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 going
># 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 record
># (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 and
># 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 nothing
># as a module.
>ROOT=/embedded_rootfs make modules_install

This command installs the modules in the development_rootfs /lib/modules 

A correct command could be:

make install INSTALL_MOD_PATH=/embedded_rootfs/

>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 journaling
># 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 a
># 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 guide
># Copy over your embedded_rootfs from you development system to your target
># system and the directory /embedded_rootfs.  This needs to be done via NFS 
># 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

Pierre Cassimans

gentoo-embedded@g.o mailing list

x86 SBC Gentoo Embedded HotTo version 0.07
-- Heath Holcomb
Lists: gentoo-embedded: < Prev By Thread Next > < Prev By Date Next >
Previous by thread:
Re: x86 SBC Gentoo Embedded HotTo version 0.07
Next by thread:
GNAP 1.8 Release (Gentoo Network APpliance)
Previous by date:
Re: GNAP Media Formatting Error?
Next by date:
Re: GNAP Media Formatting Error?

Updated Jun 17, 2009

Summary: Archive of the gentoo-embedded mailing list.

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.