On Monday 06 June 2005 11:16 am, Yuri Vasilevski wrote:
> Hi,
>
> On Mon, 6 Jun 2005 10:03:26 -0500
>
> Heath H Holcomb <[EMAIL PROTECTED]> wrote:
> > Version 0.06
> > Please add, delete, modify. Thanks!
>
> Just some things that came to my mind with respect to this
> version.
>
> > This procedure produces a working embedded rootfs, that boots form a hard
> > drive on a Geode based SBC (single board computer); at least on my
> > development system.
> >
> > 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.
> > #
> > # version 0.06
> > # 2005.6.6
> > #
> > # Heath Holcomb (heath at bulah.com)
> > # Ned Ludd (embedded Gentoo project lead, original commands posted)
> > # Lloyd Sargent (contributor)
> > # Yuri Vasilevshi (contributor)
>
> It's Vasilevski :-)

Fixed

> > # Mike George (contributor)
> > # Kammi Cazze (contributor)
> > # Marius Schaefer (contributor)
> > #
> > # Definitions and Terms
> > # system_rootfs = your regular rootfs
> > # 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 -
> >
> > # 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 \
> > http://gentoo.osuosl.org/experimental/x86/embedded/stages/stage1-x86-ucli
> >bc-2005.0.tar.bz2
> >
> > # Untar the stage to the development_rootfs.
> > tar -xvjf stage1-x86-uclibc-2005.0.tar.bz2 -C
> > /opt/i586-gentoo-uclibc-linux/
>
> it should be tar -xvjpf ...
> where -p stands for --preserve-permissions

Fixed.

> > # 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 uclibc mmx"
>
> The uclibc USE flag was obsoleted, see:
> http://www.mail-archive.com/[email protected]/msg00140.html

Removed uclibc.

> > 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.
> > rm /etc/make.profile
>
> This are equivalent but I would use:
> unlink /etc/make.profile
> for clarity's sake.

Change made.

> > ln -s /usr/portage/profiles/uclibc/x86 /etc/make.profile
> >
> > # Start the bootstrap script.
> > cd /usr/portage/scripts
> > ./bootstrap.sh -p -v
> > ./bootstrap.sh
> >
> > # Workaround 1
> > # 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 2
> > # 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
> >
> >
> > #----- 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 3
> > # 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.
>
> I have not used it, but form the ebuild it looks like
> if you emerge busybox with make-symlinks in USE flags
> it'll just make them for you. I think the proper way
> may be (gain, this is just by looking at the ebuild):
> VERY_BRAVE_OR_VERY_DUMB=yes USE=make-symlinks emerge -B busybox
> (this will just make the package without installing it
> to the system and consequently without braking it with
> the symlinks)
> ROOT=/embedded_rootfs emerge -K busybox
> (at this point the busybox binary package should have
> the symlinks in it)

The method I currently use was suggest by another embedded developer, I think 
it was Ned Ludd.  This seems to work fine, so I'll keep the current method.

> > 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 grug or lilo).
> > # Once you copy/deploy your embedded_rootfs program to you target SBC you
> > will # have to run the grub on the command line to write to the master
> > boot record # (MBR).
> > # Ncurses is needed by grub, if you are not using gurb then you don't
> > need # ncurses. For some reason not all of /boot/grub is copied over to
> > the # embedded_rootfs, so a extra manual copy step is needed.
> > ROOT=/embedded_rootfs emerge -K ncurses
> > emerge grub
> > ROOT=/embedded_rootfs emerge -K grub
> > cp -R /boot/grub /embedded_rootfs/boot/
>
> Why not installing grub with static USE flag?
> I think ncurses is to expensive (big) to have if it is used
> just by grub.
> Another option will be to install install grub with:
> ROOT=/embedded_rootfs emerge -K --nodeps grub
> rm -f /embedded_rootfs/sbin/grub
> As we can still use grub-install that doesn't need ncurses.

Cool.  Change made.

> > # 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
> > ROOT=/embedded_rootfs 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
> > */
> >
> > #---- 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 foobar*
> > ROOT=/embedded_rootfs emerge -K foobar*
> >
> >
> > #---- 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
> > 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 us 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/transfer
> > cp -adpR /mnt/transfer/* /mnt/embedded_rootfs
> >
> >
> > # Modify your target system's gurb.conf (or lilo.conf) for allow you to
> > boot # to the embedded_rootfs partition.
> > #
> > # Reboot, and if all goes well you'll be greeted with a login prompt.
> > #
> > # Fin.
>
> Yuri.

Thanks,

-- 
heath holcomb
liquidcable at bulah.com
www.bulah.com
-- 
[email protected] mailing list

Reply via email to