Hi, I just tried out the How-To, some things came to my mind while doing so...
On Thursday 18 August 2005 02:19, Heath Holcomb wrote: > Version 0.08 > Please add, delete, modify. Thanks! > > Small fixes, but one very important. All work arounds are back. > > I've update my website with this version also. > http://www.bulah.com/embeddedgentoo.html > > > > #-------------------------------------------------------------------------- >------ # 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. > # > # versio 0.08 > # 2005.8.13 > # > # Heath Holcomb (heath at bulah.com) > # 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 > # http://www.gentoo.org/doc/en/handbook/index.xml > # http://www.epiawiki.org > # http://epia.kalf.org > # Gentoo embedded mailing list ([email protected]) > # > # > # 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 - > cd /opt > > # Create the development_rootfs directory. > # 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 \ > http://mirror.usu.edu/mirrors/gentoo/experimental/x86/embedded/stages/\ > stage1-x86-uclibc-2005.0.tar.bz2 > > # Untar the stage to the development_rootfs. > tar -xvjpf stage1-x86-uclibc-2005.0.tar.bz2 -C > /opt/i586-gentoo-uclibc-linux/ > > # Mount the proc and portage directories to your development_rootfs. > # Makes your system_rootfs's proc and portage directory available from > inside # 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. > env-update > 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" > CHOST="i586-gentoo-linux-uclibc" > CFLAGS="-march=i586 -Os -pipe -fomit-frame-pointer -mmmx" > CXXFLAGS="${CFLAGS}" > FEATURES="buildpkg" > > VIDEO_CARDS="chips" > UCLIBC_CPU="586MMX" > */ > > # 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 > ./bootstrap.sh -p -v > ./bootstrap.sh > > # Workaround - bootstraping > # Failure compiling uclibc (gcc-config error: Could not run/locate "gcc")? > # If you get a failure while bootstrap is compileing uclibc here are the > steps # to work around the problem. > gcc-config 1 > source /etc/profile > ./bootstrap.sh > > # Emerge the system ebuild for the development_rootfs. > emerge -e system > > # Workaround - emerge system > # During emerge -e system, python-fchksum failes complaing about > # gcc-config error: Could not run/locate "i386-gentoo-linux-uclibc-gcc" > # The following commands work around this problem. > emerge python > emerge -e system I didn't have to do any of these two workarounds. > > #----- 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 - baselayout-lite > # 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 http://leaf.sourceforge.net/doc/guide/buci-tz.html for details. > # For central standard time in the US, use "CST6CDT". > nano -w /embedded_rootfs/etc/TZ > /* > CST6CDT > */ > > # Install a boot loader (usually grub 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 > only # one partition on the target SBC system. > nano -w /embedded_rootfs/boot/grub/grub.conf > /* > default 0 > timeout 10 > splashimage=(hd0,0)/boot/grub/splash.xpm.gz > > 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 > chroot /embedded_rootfs This gave me 'cannot run command `/bin/bash': No such file or directory'. So I had to use 'chroot /embedded_rootfs /bin/sh'. > passwd > rm /embedded_rootfs/etc/passwd- > exit Correct order should be: chroot /embedded_rootfs passwd exit rm /embedded_rootfs/etc/passwd- Or use 'rm /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 Here I got 'scripts/kconfig/lkc.h:11:21: libintl.h: No such file or directory'. Even after emerging libiconv and gettext it didn' work, any hints? An alternative would be compiling the kernel on the host system. > # 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. > make > ROOT=/embedded_rootfs make modules_install > cp /usr/src/linux/arch/i386/boot/bzImage > /embedded_rootfs/boot/vmlinuz-2.6.x > > # 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 > specs) > # > # 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 > 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\ > 192.168.0.10:/opt/i586-gentoo-uclibc-linux/embedded_rootfs\ > /mnt/nfs_embedded_rootfs > cp -adpR /mnt/nfs_embedded_rootfs/* /mnt/embedded_rootfs > > > # Modify your target system's gurb.conf (or lilo.conf) for allow you to Typo, should read grub.conf. > boot # to the embedded_rootfs partition. > # > # Reboot, and if all goes well you'll be greeted with a login prompt. > # > # Fin. > > > -- > heath holcomb > liquidcable at bulah.com > www.bulah.com Yeah, thanks for the nice How-To! I'm looking forward to embed X into the system (after playing around some more time with it). Regards, Marius -- [email protected] mailing list
