ARM9 a quattrova automatizace na mini2440
Quattro (http://quattro.haje.cz) napsal hezký tutoriál o rozjetí Angströmu na mini2440. Zkoušel jsem jej, ale jelikož jsem chtěl mini2440 použít na jeho automatizaci, která je napsaná na owfs a php, tak jsem musel vyřešit problém s instalací owfs. Owfs potřebuje pro svůj běh FUSE a další moduly které ve standardní instalaci nejsou dostupné, proto po dlouhých dnech pátrání a zkoušení jsem nakonec skončil u Debian Lenny s xorg. Nejprve jsem použil distribuci z http://www.friendlyarm.net/forum/topic/1598 bohužel zde také v kernelu nebyl zkompilován modul FUSE a tak nastalo další zkoušení. Řešení se na sebe nedalo dlouho čekat a bylo rozhodnuto, že si musím zkompilovat vlastní kernel. Použil jsem postup ze stránek http://wiki.linuxmce.org/index.php/Mini2440 .
Takže jak na to?:
1. Připravíme si libtool
Tato nástroje slouží pro kompilaci jednotlivých částí pro mini2440. Nachází se na cd k mini2440 nebo na internetu.
Stáhnu si z internetu archiv, ten rozbalím, a nastavím cestu pro spouštění.
cd /opt
wget http://corewind2440.googlecode.com/files/arm-linux-gcc-4.3.2.tgz
tar xzvf arm-linux-gcc-4.3.2.tgz –C /
echo “export PATH=$PATH:/opt/Hiteg/4.3.3/bin” >> /toot/.bashrc
Otestuji, zda funguje.
arm-none-linux-gnueabi-g++ -v
2. Zkompilujeme si uboot ten bude potřeba k vytvoření uImage kernelu.
Na disk přeneseme zdrojáky:
cd /home
mkdir mini2440 ; cd mini2440
mkdir uboot ; cd uboot
git clone git://repo.or.cz/u-boot-openmoko/mini2440.git
Nastavíme cross compiling:
export CROSS_COMPILE=arm-none-linux-gnueabi-
nebo upravíme „.bashrc“ např.
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PS1=“\[\033[1;34m\]\u \[\033[0m\]\w:\$: \[\033[0m\]“
#export PS1=“\u:\w\$>“
LS_OPTIONS=“–color=auto“
alias ls=“ls $LS_OPTIONS“
Příprava na kompilaci:
cd mini2440
make mini2440_config
Kompilace:
3. Zkompilujeme si kernel, do kterého přidáme modul FUSE
cd /home/mini2440
mkdir kernel ; cd kernel
git clone git://repo.or.cz/linux-2.6/mini2440.git
cd mini2440
mkdir -p ../kernel-bin
Vygenerujeme .config pro mini2440
Přidáme si potřebné moduly v našem případě FUSE. Nachází se v menu File systems/FUSE suports. Tuto část označíme (M). Modul
apt-get install libncurses5-dev
cd ../kernel-bin
make ARCH=arm menuconfig
Provedu kompilaci kernel a modules:
cd ../mini2440
CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make O=../kernel-bin/
Vygeneruji uImage za pomoci mkimage:
cd /home/mini2440
uboot/mini2440/tools/mkimage -A arm -O linux -T kernel -C none -a 0×30008000 -e 0×30008000 -d kernel/kernel-bin/arch/arm/boot/zImage /home/mini2440/uImage
Kernel Moduly
Aby nám FUSE fungovaly musí se zkompilovat moduly a nahrát na SD kartu:
cd kernel
CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make O=../kernel-bin/ modules
CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make O=../kernel-bin/ INSTALL_MOD_PATH=.. modules_install
Po zkompilování se musí moduly nahrát na sd kartu z adresáře ../lib/modules/ do adresáře /lib/modules. Budu to blíže popisovat u nahrávání všech věcí na SD.
cp ../lib/modules/2.6.32-rc8/ /mnt/sd/lib/modules/ -r
Tím jsme vlastně ukončily veškeré věci, které je potřeba připravit pro rozjetí systému na mini2440. Takže slíbený popis přípravy SD. Předpokládám, že jste již nějakou kartu dělali, takže nebudu popisovat jednotlivé příkazy v fdisku, a napíši jen jak to má vypadat. Nehledě na to že Quattro již přípravu popsal.
Takže karta musí mít tři části. Např. u mě na /dev/sdb 2GB SD.
Device Boot Start End Blocks Id Systém
/dev/sdb1 1 51 102748+ b W95 FAT32
/dev/sdb2 52 827 1564416 83 Linux
/dev/sdb3 828 957 262080 82 Linux swap
Tyto části sformátujeme
mkfs.vfat /dev/sdb1
mkfs.ext3 /dev/sdb2
mkswap /dev/sdb3
Stáhneme root fs z prvního popisu nebo ode mne
cd /home/mini2440
wget http://kthxbai.geekinthefamily.com/whoo/archive.tar.gz
Připojíme si SD kartu a na ni nahrajeme rootfs a moduly.
mount /dev/sdb2 /mnt/sd
cd /mnt/sd
tar xzvf /home/mini2440/ archive.tar.gz
cd /home/mini2440/kernel/
cp lib/modules/2.6.32-rc8/ /mnt/sd/lib/modules/ -r
umount /mnt/sd
Připojíme si SD kartu a na ni nahrajeme uImage.
mount /dev/sdb1 /mnt/sd
cp /home/mini2440/uImage /mnt/sd/
umount /mnt/sd
Tím je karta připravena a můžeme se vrhnout na spuštění mini2440. Předpokládám, že uboot již máte nahraný, když jste si zkoušeli jiné kompilace, proto popíši jen na nastavení ubootu.
Spustíme si mini2440 a počkáme, až najede uboot
setenv bootcmd ‘mmcinit ; fatload mmc 0:1 0×31000000 uImage ; bootm 0×31000000′
setenv bootargs ‘noinitrd rootdelay=3 root=/dev/mmcblk0p2 console=ttySAC0,115200 rootwait mini2440=1tb’
saveenv
reset
po restartu najede již linux. Přihlásíme se jako root bez hesla.
pokud při bootu nahlásí
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
SIOCSIFADDR: No such device
eth0: ERROR while getting interface flags: No such device
eth0: ERROR while getting interface flags: No such device
Bind socket to interface: No such device
Failed to bring up eth0.
Spustíme
ifconfig -a
pokud reportuje eth3 nebo něco jiného tak to nastavíme v v /etc/network/interfaces
nano /etc/network/interfaces
Dále následuje instalace automatizace od Quattra, Bylo nutné upravit aplikaci, aby pracovala s SQLite a ne v MySQl. A také se ještě nepodařilo plnohodnotně rozjet OWFS. Prozatím funguje jen čtení a zápis teploty do databáze. Takže další popis instalace je shodný s instalací automatizace na webu http://quattro.haje.cz, s menšími úpravami.
apt-get update
apt-get upgrade
apt-get install php5-cli automake gcc g++ libtool libusb-dev libfuse-dev swig python2.4-dev tcl8.4-dev tk php5-dev make mc php5-gd phpmyadmin proftpd fuse-utils sqlite php5-sqlite -y –force-yes
Při instalaci proftpd je nutné vybrat, jak bude služba spouštěna. V našem případě vybereme samostatně
Při instalaci phpmyadmin budeme vyzváni k výběru webového serveru. Je nutné vybrat apache2
nainstalujeme OWFS
cd /home
wget http://quattro.haje.cz/images/stories/dom_reg.V/owfs-2.7p4.tar.gz
tar zxpf owfs-2.7p4.tar.gz
cd owfs-2.7p4
./configure
make && make install
modprobe fuse
pokud by zahlásilo chybu, že nemůže najít fuse.mo tak spustit
depmod -a
Otestujeme OWFS
zjistíme seriové porty – mini2440 má 3 ttySAC0,ttySAC1,ttySAC2 a owfserver spustíme na tom ke kterému přiojíme převodník
dmesg | grep tty
/opt/owfs/bin/owserver /dev/ttyUSB0 -p 3000
/opt/owfs/bin/owhttpd -s 3000 -p 3001
test v IE http://ip-mini2440:3001
reboot
nainstalujeme aplikaci topeni
připravíme adresáře pro aplikaci Topeni
mkdir /home/topeni
cd /home/topeni
wget http://mini2440.rc-modely.net/automatizace.tar.gz
tar xzf automatizace.tar.gz
cd automatizace
chmod 755 *.sh
./install.sh
Tím je aplikace nainstalovaná a může se zkusit na adrese http://ipmini2440/topeni
Uživatelské jméno je admin a heslo 1
–––––––––––––––––––––––––––––––––
poznámky pod čarou
pokud by apt-get install hlásilo „Segmentation faulty tree… 50%“ tak smazat cache
rm -r /var/cache/apt/*.bin
Pozor automatizace nejede na com1 protože na něj je přesměrovaná konzole. Musí se použít com2 nebo com3 které jsou na minikonektorech. Ale pozor, zde je výstup TTL takže připojit přes MAX232. Nebo použít USB převodník. Já jsem pro rychlost použil USB převodník s čipem pl2303 a aby jel na mini2440 tak jsem si musel do kernelu přidat driver.
Nakonec odkazy na moje soubory, se kterými teď funguji.
http://mini2440.rc-modely.net/archive.tar.gz
http://mini2440.rc-modely.net/2.6.32-rc8.tar.gz
http://mini2440.rc-modely.net/uImage.tar.gz
http://mini2440.rc-modely.net/automatizace.tar.gz