vbali blogja

just a geek with a blog

Linux futtatása iPaq 1940-en

Mar nagyon vartam az aktualis havi Linuxvilag megjeleneset, mert az előzetesek szerint a Linux es a PDA-k kapcsolatat fogja feszegetni az egyik iras. Korabban mar olvastam es erdeklődtem a temaval kapcsolatban, sajnos keves sikerrel. PDA-ra a legelterjedtebb - es talan ezidaig egyetlen - disztribucio a Familiar Linux. A Familiar Project egy eleg kiforrott es aktiv project, szamomra csak egy problema van vele: nemes egyszerűseggel a Familiar jelenleg “csak” az iPAQ 3100, 3600/3700, 3800, 3900, 5100/5400/5500 szeriait, a HP Jornada 565/568 es 720 szeriait valamint a Sharp Zaurus SL-5500/SL-5600, SL-6000, SL-C750/SL-C760/SL-C860 szeriait tamogatja, nekem viszont egy iPAQ 1940-es kezikutyum van.

Megerkezett a legfrissebb Linuxvilag es mar kerestem is a cikket, mely a PDA-Linux hazasitasrol szol. Megtalaltam, es el kellett, hogy keseredjek. Bar a cikk nagyon erdekes, nekem sajnos nem segitett, ugyanis a szerző az előbb emlitett disztribucioval foglalkozik es egy tamogatott iPAQ-el. Nos sebaj. Fel a fejjel es irany a Google. Lassuk van-e valami fejlemeny iPAQ 1940 es Linux ugyben…

Nos, a Handhelds.org-on talaltam egy kezdemenyezest a 1940-es szeriara, de fel van tuntetve, hogy “Work in progress”, vagyis “Folyamatban…”. Az oldal linkjeit vegigjarva azonban beleutkoztem egy oldalba, amely a kezdeshez megfelelőnek igerkezett. Az oldal cime: iPAQ 1930/1940 adventures. Na ez az, amit mar regota kerestem. A site foglalkozik az OpenEmbedded-el es tartalmaz nehany előre leforditott kernel image-et kulonboző celokra:

  • SSH: ezen image segitsegevel SSH protokollon keresztul kapcsolodhatunk a PDA-hoz.
  • NFS Root: ez az image felcsatol a PDA-ra egy előre beallitott NFS particiot, majd arrol elinditja a GPE vagy OPIE grafikus feluletek egyiket.

A Bootldr - PDA Boot Loader - jelenleg meg nem tamogatott a 1940-es gepeken ezert a HaRET - Handheld Reverse Engineering Tool - segithet abban, hogy műkodesre birjuk a Linuxot a PDA-n. A HaRET egy apro, par szaz kilobajtos PDA alkalmazas, amely egy megadott konfiguracios file alapjan (alapertelmezesben default.txt) betolti a leforditott Linux kernelt. Egy lehetseges default.txt tartalma:

1
2
3
4
5
6
7
set MTYPE 347
set KERNEL "zImage"
set INITRD "initrd"
set RAMADDR 0x30000000
set CMDLINE "console=ttySAC2,115200n8 root=/dev/ram ramdisk_size=4096 init=/linuxrc panic=30"

bootlinux

Azonban ovatosan, ugyanis a Linux inditasa utan minden adat elvesz, amely a PDA memoriajaban tarolodott. A File Storage es az SD/MMC kartyakon megmarad az adat, de minden mas elveszik (elvileg megfelel egy hardware reset-nek). Az első valasztasom az SSH-s image-re esett. Felmasoltam az iPAQ-ben levő SD kartyara a megfelelő file-okat ActiveSync-en keresztul, ugy mint: config, default.txt, initrd, zImage es termeszetesen magat a haret.exe-t. Ez utobbi exe-t elinditva, fel is ajanlotta, hogy a default.txt-ből fogja venni a beallitasokat, majd “Run” es indult a csoda.

Egy par masodpercre “bezizisedett” a kepernyő, majd fekete lett es megjelent a bal felső sarokban a jol ismert es szeretett pingvin. A bootolasi folyamat befelyezese utan megjelent a “h1940 login:” felirat. A linux konzol nem tartalmaz virtualis billentyűzetet, kulső billentyűzet hijjan pedig maradt az ssh login. A letoltott image bedrotozva tartalmazza a 192.168.6.2-es IP cimet. Szukseges volt tehat a notebook-om IP cimet is utanaallitani. Ez azonban csak akkor valt lehetsegesse, ha az USB kabelt le, majd visszacsatoltam a notebook-on. Ekkor az ‘ifconfig usb0 192.168.6.1’ parancs kiadasaval eletre is kelt a halozati kapcsolat a ket eszkoz kozott. A pingre mar valaszolt is a PDA, nem volt mas hatra mint “beshazni” a kis gepre, ami azon nyomban meg is tortent. Leteszteltem a fontosabb Linuxos parancsokat, majd mikor meggyőződtem, hogy minden ugy műkodik mint egy asztali gepen is, celba vettem a GPE grafikus feluletet. Ez mar egy kicsit harcosabb feladat volt. Letoltottem az NFS Root image-et es beelesitettem az NFS szervert a notebook-on. Az NFS particiora kicsomagoltam a gpe-image-ek egyiket amelyet szinten a korabban emlitett oldalrol toltottem le. A szukseges file-okat felmasoltam az iPAQ-re, majd inditottam a HaRET-et. A bootolasi folyamat soran a PDA fel is csatolta a megfelelő NFS meghajtot es elinditotta az ott talalhato GPE grafikus feluletet. Ez azonban nem olyan egyszerűen tortent, hogy egy mondatban lerendezzem. Az USB kapcsolat - valoszinűleg az NFS-nek koszonhetően - allandoan szakadozott, igy tehat a notebook-on egy uj konzolon folyamatosan pingelnem kellett a PDA-t, hogy lassam mikor szakad meg az eleres, majd mikor ez megtortent az USB kabelt ki- es vissza dugva - valamint az interfeszt az “ifconfig usb0 192.168.6.1” kiadasaval ismet felebresztve - figyeltem a betoltesi folyamatot. Jo par perc mulva - az izgalomnak koszonhetően ez inkabb oraknak tűnt - megjelent a GPE bejelentkező kepernyője.

Sikerult hat eletre kelteni egy grafikus feluletet is a handheld-en, de be kell latni elveszti a funkcionalitasat a PDA, ha egy NFS meghajto meglete is szukseges a hasznalatahoz. Jott tehat a nagy otlet, csatoljuk fel a GPE image-et NFS helyett loopback interface-en keresztul. Ehhez a kovetketőket kellett tennem:

El kellett kesziteni egy GPE image-et a kovetkező modon:
1
2
3
4
dd if=/dev/zero of=gpe bs=1k count=40k
mke2fs -i 1024 -b 1024 -m 3 -F -v gpe
mount -o loop gpe /mnt/rootfs
//file-ok bemasolasa a GPE image-bol a /mnt/rootfs-be umount /mnt/rootfs

Elkeszult a gpe file-unk, amely tartalmazza a GPE-t.

Modositani kellett az initrd-ben levő linuxrc-t:
1
2
3
4
5
6
7
gunzip -d < initrd > initrd_unzipped
mount -o loop initrd_unzipped /mnt/rootfs
vi /mnt/rootfs/linuxrc
//modositasok elvegzese...
umount /mnt/rootfs
gzip -9 initrd_uncompressed
mv initrd_uncompressed.gz initrd
Az en linuxrc-m igy nez ki:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
export PATH="/bin:/sbin:/usr/sbin"
echo "Booting Linux" > /dev/tty1
sleep 3
echo "Using kernel `uname -r`" > /dev/tty1
echo "Configuring usb0 to 192.168.6.2..." > /dev/tty1
ifconfig usb0 192.168.6.2
echo "Mounting /dev/mmcblk0p1 to /mnt/sdcard..." > /dev/tty1
mount /dev/mmcblk0p1 /mnt/sdcard
echo "Setting up loop device..." > /dev/tty1
losetup /dev/loop0 /mnt/sdcard/gpe
echo "Mounting rootfs to /mnt/temproot..." > /dev/tty1
mount -t ext2 -o rw /dev/loop0 /mnt/temproot
echo "Executing pivot_root..." > /dev/tty1
cd /mnt/temproot
if [ ! -d initrd ]; then
  mkdir initrd
fi
pivot_root . initrd
echo "Executing init..." > /dev/tty1
exec chroot . /sbin/init < /dev/tty1 2>&1
echo "Unmounting ramdisk..." > /dev/tty1
umount /initrd

Ezzel el is keszult a “sajat” initrd-m amely mar alkalmas arra, hogy egy image-re - jelen esetben a gpe image-re - chrootoljon, majd elinditja annak az init-jet. Nem volt hat mas dolgom, csak hatradőlni es elvezni a munkam gyumolcset…

Azaz megsem! Ezzel sajnos nem ert meg veget a dolog es nem veletlenul volt a Handhelds.org-on a “Work in progress” feltuntetve. A Linuxom ugyanis meg nem kezeli a hangkartyat, a bluetooth-t, de ami a legrosszabb: nincs power management es ez amiatt is nagyon problemas mert igy nem lehet a rendszert suspend-elni es minden egyes bekapcsolaskor ujra kell inditani a Linuxot. Talan egy sajat kernel majd megoldja ezeket a problemakat, de egyelőre meg nem szantam ra magam, hogy hozzafogjak.

Voltak kiserleteim az OPIE-vel is, de ezidaig nem jartam sikerrel. Hasonloan probakoztam mint a GPE-nel, de egy vegelathatatlan bootolasi folyamat veszi kezdetet es a rendszer soha nem indul el. Ssh-n keresztul tesztelve sikerult kicsalnom nehany hibauzenetet, de meg nem fogtam hozza a megoldas megkeresesehez. Amennyiben sikerul megoldanom, termeszetesen be fogok rola szamolni.