Gentoo Archives: gentoo-embedded

From: Pierre Cassimans <kammicazze@×××××××.com>
To: gentoo-embedded@l.g.o
Subject: Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07
Date: Wed, 17 Aug 2005 13:03:29
Message-Id: BAY23-F4127DB583D673CBF325F91CBB30@phx.gbl
In Reply to: Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07 by Heath Holcomb
>From: Heath Holcomb <liquidcable@×××××.com> >Reply-To: gentoo-embedded@l.g.o >To: gentoo-embedded@l.g.o >Subject: Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07 >Date: Sat, 13 Aug 2005 17:52:40 -0500 > >On Friday 12 August 2005 01:39 am, Marcel Romijn wrote: > > 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: > > > > <snip> > > # Set root password for the embedded_rootfs > > chromm /embedded_rootfs > > passwd > > rm /embedded_rootfs/etc/passwd- > > Exit > > </snip> > > > > 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 > > /embedded_rootfs/etc/passwd-". > >Yes, "chromm" should be "chroot". The order is correct, as far as I can >tell. >chroot /embedded_rootfs >passwd >rm /embedded_rootfs/etc/passwd- >exit >
I think Marcel got it right, first exit the chroot before you can remove something in /embedded_rootfs OR rm /etc/passwd- while you are in the chroot and exit after that.
> > > A few lines down, you write: > > > > <snip> > > rm -R /embedded_rootfs/var/db/pkg/ * > > </snip> > > > > 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? > > > > <snip> > > rm -R /embedded_rootfs/var/db/pkg/* > > </snip> > >Major typo on my part. Fixed in version 0.08. > > > > > 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? > >My target will be a Via based SBC. From what I have read using a ramdisk >on a >x86 based platform really does not buy you much. But you sure don't want >to >write to the CF all that often (limited write cycles, usallay 100,000 to >300,000). So I plan on mounting the / partition of the CF as read only and >creating a separate partition that is mounted read/write and have my >embedded >application and only my application write to that partition. > > > Regards, > > > > 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 > > longer > > 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 > > system" > > for groff. Bug 98187 (http://bugs.gentoo.org/show_bug.cgi?id=98187). > > Check > > out the bug report for the temp fix/work around (USE="-sandbox" emerge > > -e > > 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.07 > > # 2005.8.7 > > # > > # 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 (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 \ > > http://gentoo.osuosl.org/experimental/x86/embedded/stages/stage1-x86-ucl > > ibc-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 > > > > # 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 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 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 > > chromm /embedded_rootfs > > passwd > > rm /embedded_rootfs/etc/passwd- > > exit > > > > # 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. > > 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 > > 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 > > -- > > gentoo-embedded@g.o mailing list > >-- >heath holcomb >liquidcable at bulah.com >www.bulah.com >-- >gentoo-embedded@g.o mailing list >
Regards, Pierre Cassimans -- gentoo-embedded@g.o mailing list