2012. április 4., szerda

Compile: tun.ko modul

Folytatva a tegnap elkezdett - nevezzük sorozatnak -, tovább mélyedtem a C660 Cyanogenmod rejtelmeibe. Hirtelen ötlettől vezérelve - és mert nem találtam más használható megoldást - fordítottam egy kernel modult.
Előzetesként annyit, hogy szerettem volna vpnc klienst használni (VPNC Widget), de tun.ko kernel modul hiányában nem tudtam életre kelteni. Kutatásaim során eljutottam a tun.ko installer applikációhoz, ami arra hivatott, hogy telepítse, illetve betöltse a megfelelő modult a telefonhoz. A weboldal szerint támogatva van a Cyanogenmod-ot futtató C660 is. Természetesen ez a megoldás nem működött, ugyanis a letöltött modul kernel pánikot okozott és minden egyes vpn indításkor újraindította a telefont.
Ekkor jött az ötlet, hogy mi lenne ha megpróbálnék fordítani egy saját tun.ko modult.

Ami kell hozzá:

- Linux (én ezt használom, de működhet Windows-on is) - Ubuntu 10.04 LTS
- Az LG specifikus CM kernel forrása
- Code Sourcery ARM EABI Toolchain
- Egy erős gép vagy sok türelem :-)

1. Szerezzünk egy kernel forrást. A fent hivatkozott link-en található az LG specifikus CM kernel Git repository-ja. Egyszerűen kattintsunk Downloads linkre és töltsük le forrást (~100MB)

2. Telepítsük az arm C++ fordítót. Letöltve a .bin kiterjesztésű linux-os telepítőt, majd ezt elindítva tehetjük meg. Fordítás előtt még szükséges beállítani a compiler-t:

export CCOMPILER=[extraction directory]/bin/arm-none-eabi-

3. Lépjünk be a kernel forrás root könyvtárába:

cd ~/Fejlesztés/android/kernel/CyanogenMod-lge-kernel-msm7x27-40c44bb

4. Kell szereznünk egy megfelelő config-ot amit legegyszerűbben az éppen futó telefonról tehetjük meg:

adb pull /proc/config.gz /home/user_name/android/kernel/cm-kernel/config.gz
zcat config.gz > .config

5. Most már minden készen áll arra, hogy konfiguráljuk a kernel forrását:

 make ARCH=arm CROSS_COMPILE=$CCOMPILER menuconfig

Ha ennél a pontnál hibaüzenetet kapunk, valószínűleg nincsenek telepítve a fejlesztéshez szükséges csomagok. Tehát:

sudo apt-get install build-essential libncurses5-dev

6. Innentől olyan mintha egy akármilyen linux kernelét konfigurálnánk.
Device drivers --> Network device support --> Universal TUN/TAP device driver support
Itt nyomjunk egy 'M'-et, hogy modulként készítse el a fordító. Ha ezzel megvagyunk exit és save configuration.

7. A kernel fordítása:

make ARCH=arm CROSS_COMPILE=$CCOMPILER -j`grep 'processor' /proc/cpuinfo | wc -l`

8. Ha hiba nélkül lefut, akkor a kész tun.ko modult a kernel-source-dir/drivers/net könyvtárban találjuk.


A modul telepítése:

adb push tun.ko /sdcard
mount -w -o remount /system
cp /sdcard/tun.ko /system/lib/modules/
mount -r -o remount /system

Reboot után élvezhetjük a friss, ropogós tun.ko modult. :-)

Nincsenek megjegyzések: