W2012-ITS/Androidkernel mit GadgetFS: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
 
(17 intermediate revisions by 2 users not shown)
Line 1: Line 1:
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.
GadgetFS:


Ziel
Motivation
Meilensteine
Voraussetzung
Kernel
GadgetFS
rooten
flashen
Test
Ausblick
-------------------------------


== Vorraussetzungen ==
Ziel:
1) kernel kompileren
- Nexus S als NFC Kartenleser
2) gadgetfs modul kompilieren (als modul oder in kernel)
- Untersuchen, ob gadgetFS für die Umsetzung geeignet ist
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 ==
Motivation:
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:
- gadgetFS ermöglicht dem Programmierer ein Treiber im Userspace zu
schreiben
--------------------------------------


http://forum.xda-developers.com/showthread.php?t=1774035
Meilensteine:
1) kernel kompileren
2) gadgetfs modul kompilieren (als modul oder in kernel)
3) samsung galaxy s rooten
4) samsung galaxy flashen
5) gadgetfs mounen
6) usb.c mit crosscompiler kompilieren
7) testen mit usb.c
------------------------------------


unter Ubuntu 10.04 (LTS):
Voraussetzung:
- Kernel mit gadgetFS für Nexus S
- android source tree
- cross compiler
- build enviroment
------------------------------------


1) auf neuestes Update bringen:
Kernel:
$ sudo apt-get update
- Viele Anleitungen im Netz, zum Teil veraltet
$ sudo apt-get dist-upgrade
Von uns benutzt:
$ sudo reboot


2) JDK 6 SE Update 33 (oder neuer), nicht Java 7 JDK
http://forum.xda-developers.com/showthread.php?t=1774035


das ist der Name des Files:
Fehlermeldungen und Lösungen
Linux x64 68.69 MB jdk-6u33-linux-x64.bin
-libGL.so Problemm:
http://www.quantumwise.com/support/faq/116-libglso-cannot-open-
shared-object-file?catid=25%3Ainstallation-issues


Angenommen das File liegt hier:
- Black Screen im Emulator:
~/Downloads
http://stackoverflow.com/questions/2446414/android-emulator-is-start-but-
window-show-blank-screen


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:
Git:
$ 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

4. Konfiguration der USB-Ports

$ sudo vim /etc/udev/rules.d/51-android.rules

Das File sollte folgenden Inhalt bekommen:
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
<username> muss natürlich durch den aktuellen Nutzernamen ersetzt werden.

=== Fehlermeldungen und Lösungen ===
==== libGL.so Problem ====
http://www.quantumwise.com/support/faq/116-libglso-cannot-open-shared-object-file?catid=25%3Ainstallation-issues

- kann auftretten, wenn zum ersten Mal ausgeführt wird

==== 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

- Diskussion und Lösungsansatz: Emulatorfenster startet, aber bleibt schwarz

=== Git ===
- git checkout:
- git checkout:


http://gitready.com/intermediate/2009/01/09/checkout-remote-tracked-
http://gitready.com/intermediate/2009/01/09/checkout-remote-tracked-branch.html
branch.html


- make modules & modules install:
- make modules & modules install:

http://www.linuxhaven.de/dlhp/HOWTO/DE-Kernel-HOWTO-9.html
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-
http://madteam.co/news/2012/02/how-to-build-a-custom-android-kernel-for-your-device/

for-your-device/
- Folgende Aspekte werden hier besprochen:

1) Install the cross compiler
2) Extract and prepare the kernel sources
3) Compiling the kernel
4) Extracting a boot.img
5) Creating the boot.img





- Ubuntu 12.x android-jdk:
- Ubuntu 12.x android-jdk:
Line 77: Line 130:
ubuntu-12-04-precise-pangolin/
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
Rooten + Flashen:


Anleitung beschreibt folgende Schritte:
http://androidforums.com/evo-3d-all-things-root/494212-complete-
newbies-guide-rooting-flashing-evo-3d-roms-kernels-using-fastboot.html


Step 1) How to install and configure the Android SDK
---------------------------------------------------------------------------------
Step 2) Picking the recovery, ROM, and kernel you want to use
Step 3) Opening the command prompt and getting ready for entering fastboot
Step 4) Unlocking Device
Step 5) Let's install then boot into recovery!
Step 6) Before you do anything, it's time to make a backup
Step 7) Flashing the ROM


GadgetFS Testen/Endpunkte aufbauen (nicht realisiert)
== GadgetFS Testen/Endpunkte aufbauen (nicht realisiert) ==


http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=8
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=877600
77600


- GadgetFS mounten(read only):
- GadgetFS mounten(read only):
mount -o remount,rw /dev/block/mmcblk0p4 /system
mount -o remount,rw /dev/block/mmcblk0p4 /system


=== Test ===
------------------------------------------------------------------------------------------

Test:


Crosscompiling von ubs.c
Crosscompiling von ubs.c
Line 102: Line 157:
usbstring.c -I- -I /crespo/samsung/include/linux
usbstring.c -I- -I /crespo/samsung/include/linux


-> was noch fehlt ist die types.h
-> was noch fehlt ist die types.h
-> types.h = /samsung/arch/arm/include/asm/types.h
-> types.h = /samsung/arch/arm/include/asm/types.h



- crosscompile .c unter Eclipse:
- crosscompile .c unter Eclipse:


http://www.eclipse.org/forums/index.php/m/187633/
http://www.eclipse.org/forums/index.php/m/187633/

http://ksearch.wordpress.com/2010/10/18/pthread-support-in-eclipse/
== Quellen ==

* http://www.eclipse.org/forums/index.php/m/187633/
* http://ksearch.wordpress.com/2010/10/18/pthread-support-in-eclipse/

Latest revision as of 08:27, 25 October 2012

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 

4. Konfiguration der USB-Ports

  $ sudo vim /etc/udev/rules.d/51-android.rules

Das File sollte folgenden Inhalt bekommen:

  # adb protocol on passion (Nexus One)
  SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
  # fastboot protocol on passion (Nexus One)
  SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
  # adb protocol on crespo/crespo4g (Nexus S)
  SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
  # fastboot protocol on crespo/crespo4g (Nexus S)
  SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
  # adb protocol on stingray/wingray (Xoom)
  SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
  # fastboot protocol on stingray/wingray (Xoom)
  SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
  # adb protocol on maguro/toro (Galaxy Nexus)
  SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
  # fastboot protocol on maguro/toro (Galaxy Nexus)
  SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
  # adb protocol on panda (PandaBoard)
  SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
  # fastboot protocol on panda (PandaBoard)
  SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
  # usbboot protocol on panda (PandaBoard)
  SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
  # usbboot protocol on panda (PandaBoard ES)
  SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"

<username> muss natürlich durch den aktuellen Nutzernamen ersetzt werden.

Fehlermeldungen und Lösungen

libGL.so Problem

http://www.quantumwise.com/support/faq/116-libglso-cannot-open-shared-object-file?catid=25%3Ainstallation-issues

- kann auftretten, wenn zum ersten Mal ausgeführt wird

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

- Diskussion und Lösungsansatz: Emulatorfenster startet, aber bleibt schwarz

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


http://madteam.co/news/2012/02/how-to-build-a-custom-android-kernel-for-your-device/

- Folgende Aspekte werden hier besprochen:

1) Install the cross compiler
2) Extract and prepare the kernel sources
3) Compiling the kernel
4) Extracting a  boot.img
5) Creating the boot.img



- 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

Anleitung beschreibt folgende Schritte:

Step 1) How to install and configure the Android SDK
Step 2) Picking the recovery, ROM, and kernel you want to use
Step 3) Opening the command prompt and getting ready for entering fastboot
Step 4) Unlocking Device
Step 5) Let's install then boot into recovery!
Step 6) Before you do anything, it's time to make a backup
Step 7) Flashing the ROM

GadgetFS Testen/Endpunkte aufbauen (nicht realisiert)

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=877600

- 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:

http://www.eclipse.org/forums/index.php/m/187633/

Quellen