MÉTODO MUITO ARTESANAL DE CONSTRUÇÃO, MELHOR USAR O BUILDROOT
Construindo um Sistema embarcado para uma flash 32 MB arquitetura i386
Sistema
Host
- Intel Celeron M 1.3 GHz
- Sistema Debian/Linux etch
Target
- Kalaheo
- Intel Celeron Mobile 733 MHz
- placa de vídeo compatível com i810fb (modprobe i810fb)
- placa de som compatível com snd-intel8x0 (modprobe snd-intel8x0)
- placa de rede compatível com e100 (modprobe e100)
Extras
Softwares necessários
Para construir:
compiladores e utilitários relacionados.
rsync:
http://rsync.samba.org
hal91:
http://chris.silmor.de/hal91/
Vou usar debian gnu linux como sistema host.
Para incluir no sistema:
busybox 1.01:
http://www.busybox.net/downloads/
udhcpc:
http://udhcp.busybox.net/
grub:
http://www.gnu.org/software/grub/
linux kernel:
http://www.kernel.org
nano:
http://www.nano-editor.org/
Para executar testes:
hdmounter:
http://www.dad-answers.com/qemu/utilities/QEMU-HD-Mounter/
qemu:
http://fabrice.bellard.free.fr/qemu/
Criar imagem
#!/bin/sh
mkdir mySystem
cd mySystem
# pegar um linux para partionar a pseudo-flash
wget http://chris.silmor.de/hal91/hal91.img
# criar a pseudo-flash
dd if=/dev/zero of=imagem.img bs=1M count=32
Agora temos quer particionar, vou usar o qemu para poder dar o boot
#!/bin/sh
qemu -fda hal91.img -hda imagem.img -boot a
Dentro do qemu, particione o disco com
fdisk e crie o sistema com
mke2fs
Montar imagem
Vamos instalar o hdmounter para poder usar a imagem.
#!/bin/sh
#cd mySystem
wget http://www.dad-answers.com/qemu/utilities/QEMU-HD-Mounter/qemu-hd-mounter.tar.gz
tar xvzf qemu-hd-mounter.tar.gz
make -C lomount
cp lomount/lomount hdmount
Agora vamos montar.
#!/bin/sh
#cd mySystem
mkdir mnt
./hdmount -t ext2 -diskimage imagem.img -partition 1 mnt
Criar uma raiz base
Assegure-se que o hd esteja montado
#!/bin/sh
#cd mySystem
# criar raiz
mkdir mnt/bin mnt/boot mnt/dev mnt/etc mnt/lib mnt/mnt mnt/proc \
mnt/sys mnt/tmp mnt/usr
cd mnt
ln -s bin sbin
mknod -m 622 dev/console c 5 1
mknod -m 666 dev/null c 1 3
mknod -m 666 dev/zero c 1 5
mknod -m 666 dev/ptmx c 5 2
mknod -m 666 dev/tty c 5 0
mknod -m 444 dev/random c 1 8
mknod -m 444 dev/urandom c 1 9
mknod -m 666 dev/tty1 c 4 1
chown root:tty dev/{console,ptmx,tty}
cd ..
Busybox
estou usando este config:
.config
#!/bin/sh
#cd mySystem
wget http://www.busybox.net/downloads/busybox-1.01.tar.bz2
tar xvjf busybox-1.01.tar.bz2
ln -s busybox-1.01 busybox
cd busybox
wget http://clx.digi.com.br/wiki/pub/Personal/EmbeddedSystem/iuri.config -O .config
make && make install
# busybox OK
cd ../mnt
# FIXME: usar Uclibc
# algumas libs (acho que nao sao necessarias todas estas libs)
rsync -avP /lib/libacl.so.1 /lib/libacl.so.1.1.0 /lib/libattr.so.1 \
/lib/libattr.so.1.1.0 /lib/ld-linux.so.2 /lib/ld-2.3.5.so /lib/librt-2.3.5.so \
/lib/libncurses.so.5 /lib/libncurses.so.5.4 /lib/libdl.so.2 /lib/libdl-2.3.5.so \
lib/
rsync -avP /lib/tls/librt.so.1 /lib/tls/libc.so.6 /lib/tls/libpthread.so.0 \
/lib/tls/libc-2.3.5.so /lib/tls/libpthread-2.3.5.so lib/tls/
rsync -avP /lib/tls/librt.so.1 /lib/tls/librt-2.3.5.so lib/tls/
# libs para o busybox
# /lib
rsync -avP /lib/ld-linux.so.2 /lib/ld-2.3.5.so lib/
# /lib/tls
rsync -avP /lib/tls/libcrypt.so.1 /lib/tls/libc.so.6 /lib/tls/libc-2.3.5.so \
/lib/tls/libcrypt-2.3.5.so lib/tls
cd ..
# para testar
# cd ..; chroot mnt /bin/ash
Kernel
Kernel versão 2.6.13.3
#cd mySystem
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.13.3.tar.bz2
tar xvjf linux-2.6.13.3.tar.bz2
Grub
TODO
estou usando este menu.lst:
TODO
olhe
GrubBootLoader#Instalar_GRUB_em_uma_imagem_img
#!bin/sh
#cd mySystem
mkdir -p mnt/boot/grub
cp /lib/grub/i386-pc/stage1 mnt/boot/grub/
cp /lib/grub/i386-pc/stage2 mnt/boot/grub/
#cp /usr/share/doc/grub/examples/menu.lst mnt/boot/grub/
# wget meu_menu.lst
# dizer que o hd0 é a pseudoflash
echo "(hd0) ./imagem.img" > device.map
Instalar o bootloader executando
/sbin/grub --device-map=device.map
#!/sbin/grub --device-map=device.map
root (hd0,0)
setup (hd0)
quit
Outras coisas
nano editor
#!/bin/sh
#cd mySystem
# apt-get install nano-tiny
cd mnt
# libs necessarias
rsync -avP /lib/libslang.so.2 /lib/libslang.so.2.0.4 \
/lib/libm.so.6 /lib/libm-2.3.5.so lib/
rsync -avP /lib/tls/libm.so.6 /lib/tls/libm-2.3.5.so lib/tls
rsync -avP /bin/nano-tiny bin/nano
Rede
TODO: this
#!/bin/sh
#cd mySystem
cd mnt
mkdir network
mkdir -p var/run
cd network
mkdir if-up.d if-down.d if-pre-up.d if-post-down.d
#TODO: wget interfaces
cd ..
# FIXME: usar Uclibc
rsync -avP /lib/tls/libnss_* lib/tls/
rsync -avP /lib/libnss_* lib/
rsync -avP /lib/libresolv-2.3.5.so /lib/libresolv.so.2 lib/
rsync -avP /lib/tls/libresolv-2.3.5.so /lib/tls/libresolv.so.2 lib/tls/
telnetd
Testar
#!/bin/sh
#cd mySystem
sync;sync
# desmontar particao
umount mnt
qemu -hda ./imagem.img
#qemu -hda ./imagem.img -fda hal91.img -enable-audio -std-vga -boot c
Configurando
/etc/fstab
Warning: This site does not allow %INCLUDE% of URLs
/etc/inittab
Warning: This site does not allow %INCLUDE% of URLs
/etc/init.d/startup
Warning: This site does not allow %INCLUDE% of URLs
/etc/init.d/halt
Warning: This site does not allow %INCLUDE% of URLs
--
IuriDiniz - 04 Nov 2005