# Installing Gentoo Linux on A DiskOnChip/Compact Flash

## xcable

Embedded Gentoo on a DiskOnChip / Compact Flash

I have created a script to install a Gentoo based Linux system onto a DiskOnChip or Compact Flash.  This system now boots using only the DiskOnChip   :Very Happy:  .  There are still problems   :Crying or Very sad:  ("Could not get dependency info for "xxxxxx"", during boot, and "7G [ ok ]g xxxx" during init).  To create the /dev directory I took a stage1 /dev and bz2 and tar'ed it.

Hope this helps others with embedded setups using a DiskOnChips or a Compact Flashe.  Also looking for help in makeing this more refined and fixing the bugs.

Heath H Holcomb

xcable_hhh@yahoo.com

Kernel Configuration for DiskOnChip Access

I use the DiskOnChip 2000

cd /usr/src

make menuconfig

1 - Enable "Memory Technology Device (MTD) support"

2 - Enbale "MTD partitionion suport"

3 - Enbale "Direct char device access to MTD devices"

4 - Enbale "Readonly block device access to MTD devices"

5 - Enbale "FTL (Flash Translation Layer) support"

6 - Enbale "NFTL (NAND Flash Translation Layer) support"

7 - Enbale "Write support for NFTL (BETA)"

Enter the "Self-contained MTD device drivers"

8 - Enable "M-Systems Disk-On-Chip 2000 and Millennium"

exit and save

make dep && make clean bzImage modules modules_install

mount your boot directory

cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.xxxx

modify /boot/grub/grub.conf or /etc/lilo

if using lilo run /sbin/lilo

reboot 

looking at .config

```

#

# Memory Technology Devices (MTD)

#

CONFIG_MTD=y

CONFIG_MTD_PARTITION=y

CONFIG_MTD_CHAR=y

CONFIG_MTD_BLOCK_RO=y

CONFIG_FTL=y

CONFIG_NFTL=y

CONFIG_NFTL_RW=y

```

Fstab

Here is my fstab for the DiskOnChip : 

```

/dev/nftl/disc0/part1   /   ext3   defaults   0 0

none   /proc   proc   defaults   0 0

none   /dev/shm   tmpfs   defaults   0 0

```

Lilo

I use grub for my hard drive based system, so that I will not mistakenly use the /etc/lilo.conf for the harddive (only the DiskOnChip).

Here is my /etc/lilo.conf for the DiskOnChip : 

```

boot = /dev/nftl/disc0/part1

map =/mnt/diskonchip/boot/System.map

prompt

timeout = 5

default = linux

image = /mnt/diskonchip/boot/vmlinuz-2.4.20-ck6-h3.1

   label = linux

   read-only

   root = /dev/nftl/disc0/part1

   vga = 791

image = /mnt/diskonchip/boot/vmlinuz-2.4.20-ck6-h3.1

   label = linux-init

   read-only

   root = /dev/nftl/disc0/part1

   vga = 791

   append = "init=/bin/bash"

```

 :Confused:  I know this looks weird, but after weeks of tyring different settings these are the ones that work.

Requirements

- Working Gentoo system on a hard drive (using the target single board computer with a DiskOnChip or Compact Flash socket).

- Kernel configured for DiskOnChip read and write access (tested on 2.4.20 but anything later should work) - only needed for DiskOnChip setups

- A x86 stage1 /dev directory tar'ed in the same directory as this script.

- Modified fstab in the same directory as this script (will post mine soon).

Updates and Changes from Original Post

 :Very Happy:  Update 9.19.2003 - I have decreased the size of the build from 30 MB to 16 MB.  The change affects the /usr/lib section (see below).

 :Very Happy:  Update 9.21.2003 - Added Lilo, Fstab, and Kernel Configuration for DiskOnChip Access.

 :Very Happy:  9.24.2003 - Added Compact Flash section, and notes (no code yet, maybe iin a few days or next week).  Fixed my e-mail address.

Compact Flash Script

Coming soon

DiskOnChip Script

```

#!/bin/bash

# This script creates a linux system on the mounted DiskOnChip

# Heath H Holcomb

# xcable_hhh@yahoo.com

# This script is GPL'ed, please send any changes to my e-mail address (see above)..

# This script assumes that you have a full Gentoo Linux development system on the

# SBC (single board comptuer, which has a DiskOnChip socket) running off a hard drive.

# That you have already configured the kernel to work with the DiskOnChip, you have

# partition the DiskOnChip, you have formated the DiskOnChip with a linux fileing

# system (I used ext3), you have the /dev directory tar'ed and the tar file located

# in the same directory as this script.

# This is still a work in  progress.  That are several problem with the DiskOnChip

# Linux system.  But the system does boot and seems to run ok.  There is still a

# problem with the init process about dependencies.

#------------------------------------------------------------------------------start

echo Create-linux-system.sh

# define DiskOnChip location, where the DiskOnChip is mounted

target=/mnt/diskonchip

echo Moving to the DiskOnChip

cd $target

echo Removing previous build

rm -R *

#------------------------------------------------------------------------------fileing system

echo Creating main filesystem

mkdir {bin,boot,etc,home,lib,mnt,opt,proc,root,sbin,share,tmp,usr,var}

mkdir -p {var/log,var/run,usr/bin,usr/sbin,var/lib/init.d/softscripts}

mkdir -p {var/log/everything,var/log/kernel,var/log/cups,var/log/samga}

mkdir -p {usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2}

mkdir -p {usr/X11R6/lib,usr/share}

touch var/run/utmp

#------------------------------------------------------------------------------/boot

echo Populating /boot

cp -ap /boot/vmlinuz* $target/boot

#------------------------------------------------------------------------------/dev

# /mnt/cerebro-data is a mounted directory where the script and

# tar'ed /dev file (cread-dev.tar.bz2) live, this is specific to my setup.

# Change what you need to accomodate you system

echo Populating /dev

cp /mnt/cerebro-data/create-dev.tar.bz2    $target

tar -xvjpf create-dev.tar.bz2

rm create-dev.tar.bz2

#------------------------------------------------------------------------------/root

# Probably not needed, I leave in commented out.

#echo Populating /root

#cp -apR /root    $target/root

#------------------------------------------------------------------------------/home

echo Populating /home

cp -apR /home    $target/home

#------------------------------------------------------------------------------/etc

# Theses are configuration files that I think I need, some I may not.

echo Poplulating /etc

cp -apR /etc/conf.d             $target/etc

cp -apR /etc/devfs.d             $target/etc

cp -apR /etc/env.d             $target/etc

cp -apR /etc/init.d             $target/etc

cp -apR /etc/metalog            $target/etc

cp -apR /etc/modules.d          $target/etc

cp -apR /etc/opt                $target/etc

cp -apR /etc/rsync             $target/etc

cp -apR /etc/runlevels            $target/etc

cp -apR /etc/skel             $target/etc

cp -apR /etc/fonts             $target/etc

cp -apR /etc/pam.d             $target/etc

cp -apR /etc/X11             $target/etc

cp -apR /etc/security            $target/etc

cp -apR /etc/localtime            $target/etc

cp -ap /etc/adjtime             $target/etc

cp -ap /etc/csh.env            $target/etc

cp -ap /etc/devfsd.conf          $target/etc

cp -ap /etc/DIR_COLORS          $target/etc

cp -ap /etc/dispatch-conf.conf       $target/etc

cp -ap /etc/etc-update.conf          $target/etc

cp -ap /etc/filesystems          $target/etc

cp -ap /mnt/cerebro-data/fstab       $target/etc

cp -ap /etc/gentoo-release          $target/etc

cp -ap /etc/group             $target/etc

cp -ap /etc/hosts             $target/etc

cp -ap /etc/hostname             $target/etc

cp -ap /etc/inittab             $target/etc

cp -ap /etc/inputrc             $target/etc

cp -ap /etc/ld.so.cache          $target/etc

cp -ap /etc/ld.so.conf             $target/etc

cp -ap /etc/login.defs            $target/etc

cp -ap /etc/lilo.conf             $target/etc

cp -ap /etc/modules.autoload       $target/etc

cp -ap /etc/modules.conf          $target/etc

cp -ap /etc/modules.devfs          $target/etc

cp -ap /etc/mtab             $target/etc

cp -ap /etc/networks             $target/etc

cp -ap /etc/nsswitch.conf          $target/etc

cp -ap /etc/passwd             $target/etc

cp -ap /etc/profile             $target/etc

cp -ap /etc/profile.env             $target/etc

cp -ap /etc/protocols             $target/etc

cp -ap /etc/resolv.conf          $target/etc

cp -ap /etc/rc.conf             $target/etc

cp -ap /etc/rmt                $target/etc

cp -ap /etc/rpc                $target/etc

cp -ap /etc/services             $target/etc

cp -ap /etc/securetty            $target/etc

cp -ap /etc/shadow             $target/etc

cp -ap /etc/shells             $target/etc

cp -ap /etc/sysctl.conf          $target/etc

cp -ap /etc/shells             $target/etc

#------------------------------------------------------------------------------/bin

echo Populating /bin

cp -ap /bin/awk             $target/bin

cp -ap /bin/gawk*             $target/bin

cp -ap /bin/bash             $target/bin

cp -ap /bin/cp                $target/bin

cp -ap /bin/cut             $target/bin

cp -ap /bin/env             $target/bin

cp -ap /bin/kill             $target/bin

cp -ap /bin/killall             $target/bin

cp -ap /bin/login             $target/bin

cp -ap /bin/ls                $target/bin

cp -ap /bin/rm                $target/bin

cp -ap /bin/rmdir             $target/bin

cp -ap /bin/touch             $target/bin

cp -ap /bin/tty             $target/bin

cp -ap /bin/echo             $target/bin

cp -ap /bin/mount             $target/bin

cp -ap /bin/mkdir             $target/bin

cp -ap /bin/dd                $target/bin

cp -ap /bin/umount             $target/bin

cp -ap /bin/uname             $target/bin

cp -ap /bin/chmod             $target/bin

cp -ap /bin/cat             $target/bin

cp -ap /bin/dmesg             $target/bin

cp -ap /bin/install             $target/bin

cp -ap /bin/ln                $target/bin

cp -ap /bin/ps               $target/bin

cp -ap /bin/grep             $target/bin

cp -ap /bin/domainname          $target/bin

cp -ap /bin/hostname          $target/bin

cp -ap /bin/mv                $target/bin

cp -ap /bin/sed             $target/bin

#cp -ap /bin/sync            $target/bin

cp -ap /bin/sleep             $target/bin

cp -ap /bin/sort             $target/bin

cp -ap /bin/stat             $target/bin

cp -ap /bin/basename          $target/bin

cp -ap /bin/whoami            $target/bin

cp -ap /bin/gunzip            $target/bin

cp -ap /bin/gzcat            $target/bin

cp -ap /bin/gzip            $target/bin

#------------------------------------------------------------------------------/sbin

echo Populating /sbin

cp -ap /sbin/agetty             $target/sbin

cp -ap /sbin/consoletype          $target/sbin

cp -ap /sbin/dhcpcd             $target/sbin

cp -ap /sbin/depmod          $target/sbin

cp -ap /sbin/devfsd             $target/sbin

cp -ap /sbin/env-update.sh      $target/sbin

cp -ap /sbin/halt             $target/sbin

cp -ap /sbin/ifconfig          $target/sbin

cp -ap /sbin/init             $target/sbin

cp -ap /sbin/ldconfig          $target/sbin

cp -ap /sbin/lilo             $target/sbin

cp -ap /sbin/sulogin          $target/sbin

cp -ap /sbin/shutdown          $target/sbin

cp -ap /sbin/fsck             $target/sbin

cp -ap /sbin/e2fsck          $target/sbin

cp -ap /sbin/fsck.ext2          $target/sbin

cp -ap /sbin/fsck.ext3          $target/sbin

cp -ap /sbin/fsck.reiserfs       $target/sbin

cp -ap /sbin/reiserfsck          $target/sbin

cp -ap /sbin/reboot             $target/sbin

cp -ap /sbin/runscript          $target/sbin

cp -ap /sbin/runlevel          $target/sbin

cp -ap /sbin/modprobe          $target/sbin

cp -ap /sbin/modules-update       $target/sbin

cp -ap /sbin/start-stop-daemon    $target/sbin

cp -ap /sbin/depscan.sh          $target/sbin

cp -ap /sbin/functions.sh       $target/sbin

cp -ap /sbin/runscript.sh       $target/sbin

cp -ap /sbin/rc             $target/sbin

cp -ap /sbin/rc-update          $target/sbin

cp -ap /sbin/update-modules       $target/sbin

#------------------------------------------------------------------------------/lib

# I determined which library files I need using the "ldd" command.

# This should copy the source library file and it's links.

echo Populating /lib

cp -apRd /lib/dev-state       $target/lib

cp -apR /lib/rcscripts/awk    $target/lib

cp -apR /lib/rcscripts/sh    $target/lib

cp -apR /lib/evms          $target/lib

cp -apR /lib/modules       $target/lib

cp -apR /lib/rcscripts      $target/lib

cp -apR /lib/security       $target/lib

cp -ap /lib/libdl*         $target/lib

cp -ap /lib/libc*         $target/lib

cp -ap /lib/libpthread*      $target/lib

cp -ap /lib/ld*            $target/lib

cp -ap /lib/libcrypt*      $target/lib

cp -ap /lib/libpam*         $target/lib

cp -ap /lib/libpam_misc*      $target/lib

cp -ap /lib/librt*         $target/lib

cp -ap /lib/libm*         $target/lib

cp -ap /lib/libnss*         $target/lib

cp -ap /lib/libnsl*         $target/lib

cp -ap /lib/libblkid*         $target/lib

cp -ap /lib/libuuid*         $target/lib

cp -ap /lib/libutil*         $target/lib

cp -ap /lib/libproc*         $target/lib

cp -ap /lib/libext2fs*      $target/lib

cp -ap /lib/libcom_err*      $target/lib

cp -ap /lib/libblkid*         $target/lib

cp -ap /lib/libcrypt*      $target/lib

#------------------------------------------------------------------------------/usr

echo Populating /usr

cp -apR /usr/lib/awk             $target/usr/lib

cp -apR /usr/lib/portage/bin         $target/usr/lib/bin

cp -apR /usr/share/awk             $target/usr/share

cp -ap /usr/bin/awk             $target/usr/bin

cp -ap /usr/bin/chmod             $target/usr/bin

cp -ap /usr/bin/dd                $target/usr/bin

cp -ap /usr/bin/echo             $target/usr/bin

cp -ap /usr/bin/gawk             $target/usr/bin

cp -ap /usr/bin/fbi                $target/usr/bin

cp -ap /usr/bin/hostname          $target/usr/bin

cp -ap /usr/bin/mkdir             $target/usr/bin

cp -ap /usr/bin/uname             $target/usr/bin

cp -ap /usr/bin/install             $target/usr/bin

cp -ap /usr/bin/ln                $target/usr/bin

cp -ap /usr/bin/ld               $target/usr/bin

cp -ap /usr/bin/ldd               $target/usr/bin

cp -ap /usr/bin/users             $target/usr/bin

cp -ap /usr/bin/whoami            $target/usr/bin

cp -ap /usr/bin/rm                $target/usr/bin

cp -ap /usr/sbin/etc-update          $target/usr/sbin

cp -ap /usr/sbin/env-update         $target/usr/sbin

cp -ap /usr/sbin/metalog          $target/usr/sbin

cp -ap /usr/sbin/useradd          $target/usr/sbin

cp -ap /usr/sbin/pam_tally          $target/usr/sbin

cp -ap /usr/sbin/pam_console_apply    $target/usr/sbin

cp -ap /usr/sbin/pam_timestamp_check    $target/usr/sbin

cp -ap /usr/bin/basename          $target/usr/bin

cp -ap /usr/bin/setfont            $target/usr/bin

cp -apR /usr/lib/portage            $target/usr/lib

cp -ap /usr/bin/python*            $target/usr/bin

#------------------------------------------------------------------------------/usr/lib

#Change 9.19.2003 : added ".so" before the "*", with out this

#the script copys some extra tared files in the /usr/lib directory

cp -ap /usr/lib/libpcre.so*         $target/usr/lib

cp -ap /usr/lib/libglib.so*         $target/usr/lib

cp -ap /usr/lib/libcrack.so*         $target/usr/lib

cp -ap /usr/lib/libtiff.so*         $target/usr/lib

cp -ap /usr/lib/libpng.so*         $target/usr/lib

cp -ap /usr/lib/libungif.so*         $target/usr/lib

cp -ap /usr/lib/libjpeg.so*         $target/usr/lib

cp -ap /usr/lib/libm.so*            $target/usr/lib

cp -ap /usr/lib/libc.so*            $target/usr/lib

cp -ap /usr/lib/libz.so*            $target/usr/lib

cp -ap /usr/lib/libX11.so*         $target/usr/lib

cp -ap /usr/share/consolefonts      $target/usr/share

#cp -apR /usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2/libstdc++*   $target/

#------------------------------------------------------------------------------/var

echo Populating /var

cp -apR /var/lib/init.d             $target/var

cp -apR /var/log               $target/var

cp -apR /var/lib/init.d/softscripts    $target/var/lib/init.d/softscripts

cp -apR /var/lib/init.d/started       $target/var/lib/init.d/softscripts

#------------------------------------------------------------------------------ldconfig

echo Running ldconfig

ldconfig -r $target

#------------------------------------------------------------------------------lilo

# lilo is used because grub does not seem to work with DiskOnChips

# This uses the /etc/lilo.conf file for configuration, change this if you

# need to.

echo Running lilo

lilo -b /dev/nftl/disc0/disc

#------------------------------------------------------------------------------exit

echo Finished

exit 0

```

Last edited by xcable on Wed Sep 24, 2003 5:26 pm; edited 12 times in total

----------

## pjp

Moved from Installing Gentoo.

----------

## ZerBit

Hi, 

  What is the size of your DiskOnChip? 

  What is the size of your Gentoo installation?

  Why do you have lilo and no grub?

  What is the size of X?

  Have you stripped the libs?

  It´s a good job, perhaps it has a lot of dependence with your gentoo install.

  Regards.

----------

## xcable

Qucik answers:

1 - 32 MB

2 - around 20 MB 

3 - no grub

4 - no X

5 - no

More detail:

I am going to try several things to get the size of the install down (hopefully below 10 MB).  I'm going to try BusyBox, library striping, compling with -02, using diet libc, removing unused binaries, simplying the init process, etc..  Gurb does not seam to work with DiskOnChips.  I did research on the web, and everyone that I found used lilo.  I did try Grub, at first, but had problems and did not really try to solve them because I already had lilo working.  I'm not using X my target application.  I'm using fbi to display images directly to the framebuffer and mplayer to display movies directly to the framebuffer.  I don't think X will fit onto the DiskOnChip, but I plan to try in a few weeks.  I'm also looking at other small GUIs (microwindows, nano-x, pico X, etc..).  I did strip some libs at first but I did not see a huge size difference, so I did not bother.  I plan to strip them when I'm optimization for size in the next few weeks or months.

I'm going to post a DiskOnChip format how to in a fews.  It will go over the required kernel options, cfdisk, and mke2fs for the DiskOnChip.

Still looking for any help (mostly for Gentoos init process).  I'm willing go help get anyone started.

heath h holcomb

----------

## ZerBit

I´m going to do something similar. It´s great   :Laughing: 

What is your hardware platform? (i have an EPIA M10000 Ezra) 

How could i help you?

  Regards

----------

## xcable

Right now I using a Bossier board, but I plan on using a Lanner SBC, and a Advantach board. 

Basier 4500 K6-2 400 MHz 128 MB

Lanner Geode 233 MHz 32 MB

Advantech PCM-9575 Ezra/Edian 

heath holcomb

----------

## joshmccormack

It's been a year since this thread quieted. Have you guys figured out a lot with Gentoo Embedded? Sounds very exciting, I'd love to know more.

Josh

 *xcable wrote:*   

> Right now I using a Bossier board, but I plan on using a Lanner SBC, and a Advantach board. 
> 
> Basier 4500 K6-2 400 MHz 128 MB
> 
> Lanner Geode 233 MHz 32 MB
> ...

 

----------

## xcable

This how-to has only been up for a about a month.

I'm still working on it.  I have not had much time in the last couple of weeks.

heath holcomb

----------

## Sapienter

Dollars to donuts he was looking at your "Joined" date.  (Aug 2002) I do that a lot when I'm scanning for recent posts in a thread.

I'm trying to apply this to USB key stripped down gentoos for the servers I'm rolling out.  We're using cheap hardware and have had some HD reliability issues.  Since the servers are probably eventually going to perform firewall/routing/Swan functions, having a wee $20 usb key at each office to boot up off of and quickly restore web access is much better than trying to throw redundancy at all our hardware.  I'll post here to let you know how it turns out.

----------

## lo4dro

@cable

Hi.

Use you busy-box to make a smaller System?

----------

## robert0380

i have got to try this.

i have a Gateway box that came with AOL on a compact flash card.

really nice machine, small. has NIC, modem, IR Keyboard.  the flash card is 32MB.

i'd like to get linux on it.

waiting on the Compact Flash script.

----------

## OdinsDream

 *robert0380 wrote:*   

> i have got to try this.
> 
> i have a Gateway box that came with AOL on a compact flash card.
> 
> really nice machine, small. has NIC, modem, IR Keyboard.  the flash card is 32MB.
> ...

 

Where did you get this system? Do you have a link to it, it sounds interesting...

----------

## robert0380

i got it off ebay.  my friend has a few of em and he managed to get win 98 on it but whre my hard drive pins would be is just solder blobs  :Sad:   so all i have for storage is a 32MB flash memory card but i might get a bigger one.   

i found a link here, apparently it's called a   "Web Appliance".  Notice the year on that article is back in 2000.  I dont think they make em anymore but there are probably enough circulating to where you can get your hands on one.

I would love nothing more than to put linux on it but I'm not familiar with installing Linux on un-common hardware (im just used to getting onto PCs).

----------

## robert0380

http://msnbc-cnet.com.com/2100-1040_3-248422.html

forgot the link, lol

----------

## bus_drivr

2 things to consider:

1) for gcc flags -Os is supposed to give a smaller size application after compiling. 

2) -fomit-frame-pointers will also result in smaller size at the cost of debugging

there is an irc channel on irc.freenode.net #gentoo-embedded that might be helpful. Though members are often busy- be patient when waiting on replies.

----------

## bus_drivr

form the diet libc faq

Q: Compiling software with "diet -Os gcc..." gives error messages about

   -malign-loops, -malign-jumps and -malign-functions being obsolete.

A: diet -Os uses some platform dependant gcc options to create tighter

   code.  Unfortunately, these options have been renamed on gcc 3.  You

   can fix this by creating a file ~/.diet/gcc containing this line:

     -Os -fomit-frame-pointer -falign-functions=0 -falign-jumps=0 -falign-loops=0 -mpreferred-stack-boundary=2

   If you get this options not for diet -Os gcc but for diet -Os

   i386-linux-gcc, put this in ~/.diet/i386-linux-gcc instead.

----------

## my_nick

Could this work with an iPod?

It can be mounted with sd_mod, ieee1394, ohci1394 and sbp2 modules.

I can create partitions on it (/dev/sda3 and so on)

----------

## xcable

I have looked into useing diet libc, and have determined that the benifits would not justify the work required to get it working.  My target system will have a 32 MB DiskOnChip or a >=128 MB Compact Flash.  

"-Os" and "-fomit-frame-pointer" should be and wil be used.

I'm build this for a x86 embedded SBC with a DiskOnChip or Compact Flash socket, anything else I really don't care about (at least right now).

I have subscribed to the embedded.gentoo listserv, and I looks like it's going to be a while before we see a new gentoo init system.  I have deceided to use busy box to replace the system apps, and mini login to handle the login process.  this will greatly change my install script.  

I have not had very much time to work on it (I'm a new dad), but with the holidays coming up I should have enough time to get it work by the end of the year.

heath holcomb

----------

## smukec

I'm trying to inject life to a PC/104 system based on Advantech PCM-3550 and some additional RS232 & I/O ports.

 It seems (due to documentation I found on the net) that this board needs i586 code in order to run properly. I found some minimalistic linuxes but they're having problems with the CompactFlash card (seek timeout & similar). Ohers (newer-probably i686 issue) had problems at booting time: LILO reported 'LI 04' - seems to be Sector not found.

 I decided to go with gentoo (I'm, running it on my desktop & server). I emerged crosdev-0.3, but having problems(read: no knowledge) using it. I have experience in programming, I also did some cross-compiling for my palm(CygWin on Wins), but totally lacking of such experience under linux.

Can you help?

----------

## xcable

How can I help and why are you using crossdev?

On my installs I put a hard drive on my target SBC (single board computer) and put gentoo on the hard drive.  This takes a while (a long while, use distcc if you can) but you get full access to your target hardware, you can compile the programs with custom gcc settings to optimize speed and/or size, and you make sure that the hardware is fully supported under Linux.

Looks like the PCM-3550 is a Geode based SBC.  No problem on that hardware because I run gentoo on a Geode based SBC, and yes your c/c++ flags need to be set to i586.  The Geode is basicaly a 586 grade processor with 3dnow (I think or is it mmx, just do a proc /cat/cpuinfo from the live cd to double check) support.

After you have you hard drive system fully up then you can put in a compact flash and mount it (just like a hard drive).  Lilo and grub should have no problem with the compact flash.  Just remember that a compact flash is a flash based memory storage device with a limited number of write cycles per each cell (around a 100,000).

heath holcomb

----------

## smukec

 *xcable wrote:*   

> How can I help and why are you using crossdev?

 

a) I intended help on crossdev.

b) I use crossdev because I tought this is the 'right' way

 *Quote:*   

> On my installs I put a hard drive on my target SBC ...

 

To be honest I haven't tought about that. However I have a smaller IDE (E-IDE) connector for disks. How can I connect a normal HD - is it just narrower or it has less pins?

Anyway, if you install everything on the HD, how you install the CF then? Do you use your script and just copy what you need? Or you mount only some (huge) directories on the HD?

Goran

----------

## xcable

Ya, that IDE header is most likely 2mm pin spaccing and 5" harddrive is .1" pin spacing.  Those kinds of cables are quite comming when deal with SBCs (from OEMs), but may be hard to come by for some out the embedded profession.  I easy work around is to use a laptop harddirve, there spacing 2mm; but you would still need a 2mm IDE cable.  Try DigiKey, Mouser, Frys, maybe Radio Shack for 2mm to .1" IDE cables and/or 2mm to 2mm IDE cables.

Sorry don't know anything about crossdev.

For installing on a CF, for now you just have to copy over specific files (config, libraries, executables, etc...) and make all the directories (including the proc directory and the devices - not easy to do manualy that's why I use gentoos stage1 proc directory).  That's what the script does.  I'm looking into doing something more professional in the near future, using Busybox and Minilogin; it is if Gentoo does not beat me to the puch (see http://www.gentoo.org/proj/en/base/embedded/)

heath

----------

## drdabbles

Hey all,

Just tossing a suggestion into the mix, here, but I thought it would be helpful.  Anyway, I have been building a custom-rolled distro for quite some time now.  It's been used in security systems, etc. and has performed very well.  The problem is maintaining everything.  Keeping kernel patches, programs, makefiles, etc. all updated is a real pain.  a REAL pain.

So to cut to the chase, I'd suggest dropping dietlibc and going with uClibc.  It's supported on more architectures, contains more "standard" system functions, results in a slimmed-down set of binaries, and in general has a VERY active and open development community.  Of course, I am biased, but I figured I'd let you all try it and decide on your own.

http://www.uclibc.org/

----------

## drdabbles

Another quick note.  Instead of running `lilo -b /dev/nftl/disc0/disc`, the line should be changed to `lilo -r $target`.  This will make lilo run with the "target" as the "root".  This means you don't have to change YOUR lilo.conf.  Just another thought.

----------

## Mimamau

I've also running a small embedded system on compact flash (atm it's debian). Because of the limited write cycles I have a fat16 fs on my card and booting is done with syslinux. It first boots into a small initrd. There's a script which fills a ramdisk from an image located on my fat16 fs, this is done with dd. Then the new ramdisk is used as rootfs. So my card has to be mounted only read-only.

Sometimes I get seek timeout & similar errors while booting and I have to press the reset button. Also when the system is up I sometimes get hda: lost interrupt. Any workaround for this?

----------

## solamour

I tried the script, but it looks like it works with the Gentoo system from a few years ago; I see a bunch of missing files, etc, most likely because things have changed a lot since the script was last updated.

So the question is, what do I need to copy to the target disk for a minimal setup? All I need is a console and a few basic commands. I got to the point where it boots up and stops with the following message.

```
Freeing unused kernel memory: 240k freed

Warning: unable to open an initial console.

```

__

sol

----------

## xcable

This script it to old to use.  I suggest you check out the embedded Gentoo project.  I also wrote a how-to for embedded Gentoo for x86 computers, but this too is old; although it is much newer and still works.  Check the links below : 

http://www.gentoo.org/proj/en/base/embedded/handbook/

http://www.bulah.com/embedded-guide.html

--

heath

bulah.com

----------

## solamour

Thanks for the links. Just what I was looking for.

__

sol

----------

