hacker

kaspe

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

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

#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"

kaspe_ArmKernelCpuInfo.PNG

BuildRoot

Skyeye

uClinux

Bootloader

started
2011-09-17


jatkuu...


CategoryProjekti