Gentoo Archives: gentoo-embedded

From: Natanael Copa <mlists@××××××.org>
To: gentoo-embedded@l.g.o
Subject: Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07
Date: Tue, 16 Aug 2005 11:10:37
Message-Id: 4301C96C.6020208@tanael.org
In Reply to: Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07 by "S. ancelot"
Best regards
Natanael Copa

people are talking about?
http://en.wikipedia.org/wiki/Top-posting

and then scroll to the top again
to get a clue about what

when you have to scroll to
the bottom of every posting

Is it only me who thinks
that is is pretty annoying


S. ancelot wrote:

> > Hi, > > If I remember, the best thing to do is using a squashfs filesystem. > > Taking the filesystem completely in ram is a bad idea and unnecessary > (CF are lifetime warranty if you only read it !). > > Are you using catalyst ??? > > > I advice you trying GNAP in order to understand how to go on ... > > Best regards > Steph > > > Marcel Romijn wrote: > >> Hi Heath, >> >> I know about the limited number of write cycles on CF. Therefore I want >> the CF only to supply the kernel and the ramdisk image. My intention is >> to run Linux and my application completely from ramdisk. >> I want my device to be complately silent, therefore it has a fanless >> ME6000 board, no fans in the case and no harddisk (actually strange to >> 'hear' a computer boot in complete silence!). The CF is on an IDE >> converter and is recognized as /dev/hda1 (although for testing it has a >> normal harddisk connected). >> >> I was able to follow your howto to the end. >> Although I had some problems where the boot process stopped after >> "Freeing unused kernel memory". This turned out to be a typo in >> /etc/fstab on my side. >> >> Now that I have bootable configuration, I can look into what it takes to >> have the system files in a ramdisk image and have it mounted as '/'. >> >> I think I could just create an initrd from the whole system and have >> grub and the kernel extract it in memory and mount it. >> I have not done much investigation on it, be it seems to me that the >> /linuxrc in the initrd can be fairly simple. Actually just calling the >> /sbin/init once the ramdisk is mountded as '/'. >> >> Anyone any experience with this? >> >> PS. Maybe we should spawn of another thread about VIA Epia boards, CF >> and booting. I saw Pierre Cassimans is interested in this subject as >> well. >> This might go off topic for the Gentoo Embedded Howto. >> >> Marcel >> >> -----Original Message----- >> From: Heath Holcomb [mailto:liquidcable@×××××.com] Sent: Sunday, 14 >> August, 2005 0:53 >> To: gentoo-embedded@l.g.o >> Subject: Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version >> 0.07 >> >> 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 >> >> >> >> >>> 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 >>> >> >> >> >>
-- gentoo-embedded@g.o mailing list

Replies

Subject Author
Re: [gentoo-embedded] x86 SBC Gentoo Embedded HotTo version 0.07 Robert Wohleb <rob@×××××××××××××.com>