SoftwareEmbedded Linux v kameře Jablocom EYE-02

Kořenový adresář

Pro kompletní funkci je potřeba připravit souborový systém, na kterém se nacházejí další podpůrné aplikace. K sestavení všech aplikací jsem použil systém portage z Gentoo. Jako základ systému jsem zvolil aplikaci busybox, která zahrnuje mnoho užitečných utilit.

Balíčkovací systém distribucí

Většina linuxových distribucí obsahuje balíčkovací systém, který slouží pro jednoduchou instalaci aplikací. Distribuce Gentoo obsahuje balíčkovací systém portage, který je vhodný i pro křížovou kompilaci pro jinou architekturu. Využil jsem proto tento systém pro snadnou kompilaci a instalaci základních programů potřebných pro běh systému. Program pro kompilaci balíčků se jmenuje emerge. Vytvořil jsem jednoduchý skript emerge_arm, který nastaví proměnné prostředí tak, aby proběhla kompilace a instalace do správného adresáře. Následné vytvoření aplikace, která je součástí balíčkovacího systému Gentoo, lze elegantně zprostředkovat pomocí zavolání příkazu emerge.

~ # emerge busybox

Konkrétně tento příkaz sám stáhne zdrojové soubory balíku busybox, provede konfiguraci, kompilaci a instalaci výsledného binárního programu do předem určeného adresáře.

Příprava obrazu souborového systému

Základem celého systému je aplikace busybox, která obsahuje všechny důležité utility. Jedná se o jediný binární soubor, ke kterému je vytvořeno mnoho symbolických odkazů s názvy programů. Balík busybox obsahuje veškeré základní nástroje pro práci se soubory (mv, cp, rm, …), dále obsahuje například nástroje pro práci v síti (udhcp, httpd, telnet, wget).

Na připravovaném souborovém systému je dále pomocí balíku static-dev vytvořen adresář /dev se základními soubory zařízení. Ostatní aplikace a knihovny jsou získány stejným způsobem.

Systém je nutné nakonfigurovat pomocí souborů v adresáři /etc. V souboru fstab jsou nadefinovány připojené diskové oddíly a připojené virtuální souborové systémy sysfs, procfs, ramfs apod. V souborech group a passwd jsou nadefinovány uživatelské účty a skupiny uživatelů. V souboru inittab je nastaveno chování po startu systému a chování při ukončení běhu systému. Je zde nadefinován první inicializační skript, který bude spuštěn procesem init.

První spuštěný skript se jmenuje /etc/init.d/rcS a spouští další služby, jejichž inicializační skripty jsou umístěny v adresáři /etc/init.d. Inicializační skripty se skládají ze dvou částí, jedné, která je spuštěna při startu služby a druhé, která je spuštěna při žádosti o její ukončení. Základní inicializační skript má jednoduchou strukturu. Obsahuje hlavičku, spouštěcí a zastavovací funkci.

#!/sbin/runscript
 
start () {
        ebegin "Start sluzby"
        start-stop-daemon --start --exec sluzba
        eend $?
}
 
stop () {
        ebegin "Ukonceni sluzby"
        start-stop-daemon --stop --exec sluzba
        eend $?
}

Spouštěcí program /sbin/runscript vychází z programu, který je používán v distribuci Gentoo. Je použita podobná myšlenka, ale program jsem napsal jako jednoduchý skript pro program sh. Tento program netestuje závislosti služeb, pouze zjednodušuje práci při psaní inicializačních skriptů. Napsal jsem dále inicializační skripty pro síťovou kartu přes USB, telnet, http, obsluhu GSM modulu a pro započetí vzdáleného sdílení adresáře.

Program /sbin/runscript

#!/bin/sh
CMD=$2
SERVICE=$1
GREEN="\033[01;32m"
NONE="\033[00m"
BLUE="\033[01;34m"
YELLOW="\033[01;33m"
RED="\033[01;31m"
 
OKPOS=60
 
LINE_END="\033[1000C"
LINE_BACK="\033[6D"
LINE_UP="\033[1A"
 
source $SERVICE
 
ebegin() {
        TEXT=$1
#       L=${#TEXT}
        echo -en "${GREEN}*${NONE} "
        echo "$1"
#       for i in $(seq $L $OKPOS); do echo -n " "; done
}
 
eend() {
        RESULT=$1
        echo -en "${LINE_UP}${LINE_END}${LINE_BACK}"
 
        if [ $RESULT -eq 0 ]; then
                echo -e "${BLUE}[ ${GREEN}ok${BLUE} ]${NONE}"
        else
                echo -e "${BLUE}[ ${RED}!!${BLUE} ]${NONE}"
        fi
}
 
 
if [ "$CMD" == "start" ]; then
    start
elif [ "$CMD" == "stop" ]; then
    stop
elif [ "$CMD" == "restart" ]; then
    stop
    start
else
    echo "Usage $1 start | stop | restart"
fi

Soubor /etc/rcS

#!/bin/sh
 
# pripojuji filesystemy
/bin/mount -a
 
# zaregistruju hotplug
echo /bin/mdev > /proc/sys/kernel/hotplug
 
# Out Of Memory zpusobi paniku
echo 1 > /proc/sys/vm/panic_on_oom
# panika zpusobi restart po 5s
echo 5 > /proc/sys/kernel/panic
 
#/etc/init.d/msd start
/etc/init.d/net.lo start
/etc/init.d/net.usb0 start
#/etc/init.d/dhcpd start
/etc/init.d/telnetd start
/etc/init.d/httpd start
 
# pripojeni nfs
#/etc/init.d/portmap start
#/etc/init.d/nfsmount start

Přiložené soubory:

Oskar19.6.2009 11:05
Wow

Pěkné, dokonce i barvičky. Tleskám.

Autor WWW
Titulek
Číslo stojedna  
Severovýchod Valid XHTML 1.0 Strict Valid CSS 2 Text to HTML converter and formatter Jay Bee simple CMS