W2012-ITS/Androidkernel mit GadgetFS
Hier fassen wir die Ergebnisse der Gruppe "Androidkernel mit GadgetFS" vom IT-Security Workshop 2012 zusammen. Ziel der Gruppe war es ein Nexus S als NFC Kartenleser mittels GadgetFS zu verwenden. Der Vorteil bei GadgetFS besteht darin, dass die USB-Treiber im Userspace geschrieben werden.
Vorraussetzungen
1) kernel kompileren 2) gadgetfs modul kompilieren (als modul oder in kernel) 3) samsung galaxy s rooten 4) samsung galaxy flashen 5) gadgetfs mounten 6) usb.c mit crosscompiler kompilieren 7) testen mit usb.c
Kernel bauen
Zu dem Thema Androidkernel kompilieren gibt es viele Anleitungen im Netz, diese sind allerdings zum Teil veraltet oder speziell auf andere Telefone/ Kernel. Hier ist der von uns benutzte zu finden:
http://forum.xda-developers.com/showthread.php?t=1774035
unter Ubuntu 10.04 (LTS):
1) auf neuestes Update bringen:
$ sudo apt-get update $ sudo apt-get dist-upgrade $ sudo reboot
2) JDK 6 SE Update 33 (oder neuer), nicht Java 7 JDK
das ist der Name des Files:
Linux x64 68.69 MB jdk-6u33-linux-x64.bin
Angenommen das File liegt hier:
~/Downloads
dann sieht die Installtion so aus:
$ cd ~/Downloads $ sudo chmod +x jdk-6u33-linux-x64.bin $ ./jdk-6u33-linux-x64.bin $ sudo mv jdk1.6.0_33 /usr/lib/jvm/jdk1.6.0_33 $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_33/bin/javac 1 $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_33/bin/java 1 $ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_33/bin/javaws 1 $ sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_33/bin/jar 1 $ sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.6.0_33/bin/javadoc 1 $ sudo update-alternatives --config javac $ sudo update-alternatives --config java $ sudo update-alternatives --config javaws $ sudo update-alternatives --config jar $ sudo update-alternatives --config javadoc $ java --version $ ls -la /etc/alternatives/java*
Jetzt ist ein Neustart zwar optional, aber sicher ist sicher:
$ sudo reboot
3. benötigte Pakete
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
Fehlermeldungen und Lösungen
-libGL.so Problem: http://www.quantumwise.com/support/faq/116-libglso-cannot-open-shared-object-file?catid=25%3Ainstallation-issues
-64-bit Umgebung Ab Kernelversion 2.3 ist das Kompilieren nur noch in 64-bit Umgebung möglich.
Black Screen im Emulator
http://stackoverflow.com/questions/2446414/android-emulator-is-start-but-window-show-blank-screen
Git
- git checkout:
http://gitready.com/intermediate/2009/01/09/checkout-remote-tracked-branch.html
- make modules & modules install:
http://www.linuxhaven.de/dlhp/HOWTO/DE-Kernel-HOWTO-9.html
- boot.img -Erstellen
http://madteam.co/news/2012/02/how-to-build-a-custom-android-kernel- for-your-device/
- Ubuntu 12.x android-jdk:
http://www.liberiangeek.net/2012/07/download-and-install-androidsdk-in- ubuntu-12-04-precise-pangolin/
Rooten + Flashen
http://androidforums.com/evo-3d-all-things-root/494212-complete- newbies-guide-rooting-flashing-evo-3d-roms-kernels-using-fastboot.html
GadgetFS Testen/Endpunkte aufbauen (nicht realisiert)
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=8 77600
- GadgetFS mounten(read only): mount -o remount,rw /dev/block/mmcblk0p4 /system
Test
Crosscompiling von ubs.c prebuild/linux-x86/toolchain/arm-aebi-4.4.3/bin/arm-aebi-gcc usb usb.c usbstring.c -I- -I /crespo/samsung/include/linux
-> was noch fehlt ist die types.h -> types.h = /samsung/arch/arm/include/asm/types.h
- crosscompile .c unter Eclipse: