- hacker
Embedded Linux
Johdanto
Tarkoitus on kirjoitella tänne sulautetun linuxin rakentamisesta, aluksi emulaattorille ja myöhemmin raudalle. Päätarkoitus on tallentaa jonnekkin kokeilut ja mahdollisesti avuksi muille kiinnostuneille. Vanhat muistiinpanot ovat jo bittiavaruudessa. Pitää joskus koota tänne tulevista asioista virallinen artikkeli.
Kokoonpano
Järjestemä on Ubuntu 10.04LST, joten kaikki paketti asennukset ovat verrattavissa Lucid Lynx:n puhtaaseen asennukseen. Kiintolevy tilaa kannattaa olla 10GB vapaana. 4GB ylittyy helposti. Seuraavat paketit on syytä asentaa aluksi:
sudo apt-get install build-essential bison flex gettext libncurses5-dev texinfo autoconf automake libtool
Kannattaa tehdä hakemisto missä työskennellään:
mkdir work cd work
Emulaattori
Alussa käytän QEMU emulaattori, myöhemmin myös muita. Emulaattoriin tarvittavat paketit saa asennettua:
sudo apt-get install qemu-kvm-extras
Ubuntun repositiosta tuleva qemu riittää alussa pitkälle.
Kääntäjä
Teen esimerkit ARM prosessorille, joten cross compiler täytyy hakea:
wget https://sourcery.mentor.com/sgpp/lite/arm/portal/package8734/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
Pura kääntäjä haluamaasi paikkaan tai kuin esimerkissä työhakemiston alle.
tar xvjf arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
Lisäksi täytyy määritellä käännettäessä tarvittavat ympäristömuuttujat. Korjaa CROSS_COMPILE polku osoittamaan oikeaan paikkaan.
export ARCH=arm export CROSS_COMPILE=$HOME/work/arm-2011.03/bin/arm-none-eabi-
Kernel
Kernelin noutaminen ja kääntäminen kohde järjestelmään. Kernel.org oli huoltokatkolla kun tätä kirjoittelin, niin kernelin koodit haetaan esimerkissä Funetin mirrorista.
wget http://www.nic.funet.fi/pub/mirrors/ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.4.tar.gz tar zxvf linux-2.6.39.4.tar.gz cd linux-2.6.39.4
Määritellään kerneli default asetuksille QEMU:lle sopivaksi.
make versatile_defconfig make menuconfig
Lisää EABI tuki kerneliin, löytyy "Kernel Features" ja "Use the ARM EABI to combile the kernel". Käännä kernel
make
Mikäli ympäristömuuttujia ei ole määritelty voidaan kääntäminen tehdä myös.
make ARCH=arm versatile_defconfig make ARCH=arm menuconfig make ARCH=arm CROSS_COMPILE=$HOME/work/arm-2011.03/bin/arm-none-eabi-
Kerneliä pääsee tässävaiheessa kokeilemaan.
qemu-system-arm -M versatilepb -m 128M -kernel arch/arm/boot/zImage
Mikäli tulostus menee VNC ikkunaan saat sen esiin.
vncviewer 127.0.0.1:5900
Kernelin käynistyminen loppuu erroriin koska tiedostojärjestelmää ei ole olemassa.
RootFS
Emuloinnissa käytettävän tiedostojärjestelmän rakentaminen.
Oma ohjelma
Ennen varsinaista tiedostojärjestelmän rakentamista tehdään pieni ohjelma jota ajetaan emuloitavassa järjestelmässä.
Koska jatkossa käännettävät ohjelmat ajetaan linuxin päällä täytyy kääntämiseen käyttää eri kääntäjää. Hae ja asenna arm-none-linux versio kääntäjästä.
cd ~/work wget https://sourcery.mentor.com/sgpp/lite/arm/portal/package8739/public/arm-none-linux-gnueabi/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar xvjf arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
CROSS_COMPILE ympärisstö muuttuja täytyy muuttaa osoittamaan uuteen kääntäjään.
export CROSS_COMPILE=$HOME/work/arm-2011.03/bin/arm-none-linux-gnueabi-
ympäristö muuttujaa ei tosin tarvitse muuttaa seuraavan esimerkki ohjelman takia.
Tee hakemisto work kansioon.
mkdir hello cd hello
Luo tiedosto hello.c.
nano hello.c
#include <stdio.h> void main() { printf("Terve!\n"); while(1); }
Käännetään ohjelma.
../arm-2011.03/bin/arm-none-linux-gnueabi-gcc -static hello.c -o hello
Luodaan tiedostojärjestelmä.
echo hello | cpio -o --format=newc > rootfs
Ajetaan ohjelama QEMU:lla
cd $HOME/work cp linux-2.6.39.4/arch/arm/boot/zImage . qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd hello/rootfs -append "root=/devam rdinit=/hello"
VNC ikkunassa pitäisi näkyä "Terve!" teksti.
BusyBox
BusyBox ohjelmistolla pystyy helposti luomaan minimaalinen linux tiedostojärjestelmä mistä löytyy tarvittavat työkalut.
wget http://busybox.net/downloads/busybox-1.19.2.tar.bz2 tar xvjf busybox-1.19.2.tar.bz2 cd busybox-1.19.2 export CROSS_COMPILE=$HOME/work/arm-2011.03/bin/arm-none-linux-gnueabi- export ARCH=arm make defconfig make menuconfig
Muuta asetuksista static lib päälle.
Käännetään:
make make install cd _install ls
Asennetaan kernelin moduulit luotuun _install hakemistoon.
cd ../../linux-2.6.39.4 make modules_install INSTALL_MOD_PATH=$HOME/work/busybox-1.19.2/_install
Palataa BusyBox hakemistoon.
cd ../busybox-1.19.2_install
Luo serutaava rakenne:
mkdir proc mkdir sys mkdir dev mkdir etc mkdir etc/init.d nano etc/init.d/rcS
rcS-tiedoston sisältö:
#!/bin/sh mount -t proc none /proc mount -t sysfs none /sys /sbin/mdev -s
Luodaan tiedostojärjestelmän image.
find . | cpio -o --format=newc > ../rootfs.img cd.. gzip -c rootfs.img > ../rootfs.img.gz
Käynnistä Qemu komennolla:
qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/sbin/init"
BuildRoot
Skyeye
uClinux
Bootloader
- started
- 2011-09-17
jatkuu...