hacker:: [[kaspe]] ##content goes here = 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 }}} {{attachment:kaspe_ArmKernelRootfsError.PNG}} 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 }}} {{{#! c #include 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" }}} {{attachment:kaspe_ArmKernelCpuInfo.PNG}} == BuildRoot == == Skyeye == == uClinux == == Bootloader == started:: 2011-09-17 ---- jatkuu... ---- CategoryProjekti