S
sven-ola
Ambitioniertes Mitglied
- 24
Hey,
(gehört evnt. in die Entwickler-Ecke. Ich benutze das Forum mal als Notizblock, evnt. hilft es jemanden ja)
Das hier habe ich gelesen:
Building Android kernel images
Es gibts 2 verschiedene Cross-Compile toolchains:
1 Für faule Leute bietet eine Firma "G++ Lite für ARM-GNU/Linux Target"
Download Sourcery G++ Lite Edition for ARM
Der Java-Installer ist recht huebsch und es installiert dann
einen "gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)" für
das Target "arm-none-linux-gnueabi". Will ich aber nicht benutzen.
2 Für nicht-so-faule wird mit dem Auschecken der Quelltexte eine
Toolcain mitinstalliert. Ich habe ein neues Verzeichnis angelegt:
/usr/src/android. Hineinwechseln und "repo init", "repo sync". Es finden
sich dann verschiedene Versionen unter ./prebuild, beispielsweise unter
linux-x86/toolchain/arm-eabi-4.4.0/bin/, Target ist arm-eabi, diese
Version ist offenbar etwas neuer: "gcc version 4.4.0 (GCC)".
Instruktionen, um die Quellen zu installieren finden sich dann hier:
Get source ?(Android Open Source Project)?
3 Jedenfalls braucht man einen Linux-Kernel-Quellbaum. Der war beim
Checkout (siehe Punkt 2) nicht dabei. Also das hier ausführen:
cd /usr/src/android
git clone git://android.git.kernel.org/kernel/msm.git
In dem lokalen GIT repo sollten mehrere Branches bereits drin sein.
Die Suche nach einem speziellen Samsung-Galaxy-Branch startet ich mit:
sven-ola@pcacer:/usr/src/android/msm$ git branch -a
* android-msm-2.6.27
origin/HEAD
origin/android-msm-2.6.25
origin/android-msm-2.6.27
origin/android-msm-2.6.29
origin/android-msm-2.6.29-donut
origin/android-msm-htc-2.6.25
origin/msm-2.6.25
Schade, kein Samsung da. Evnt. auch brauchbar - der 2.6.27 Branch, der
ja bereits aktiviert ist (der mit dem Stern). Die 2.6.27 steht auch im
./Makefile oben drin - ist ist offenbar gleich alles passend da.
4 Das dmesg auf dem Mobiltelefon behauptet, dass GCC 4.2.1 benutzt wurde:
"Linux version 2.6.27 (hudson@andy) (gcc version 4.2.1)". Damit stehen
aus Schritt 2 für Linux und MAC-OS diese Compiler zur Verfügung:
/usr/src/android/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc -v
oder
/usr/src/android/prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc -v
(Eins von beiden lässt sich ausführen - falls du nicht mehr weisst ob bei
dir ein Linux oder ein MAC-OS drauf ist <ggg>)
5 Wir brauchen eine .config-Datei. Die ziehe ich mir vom Telefon:
adb pull /proc/config.gz /dev/stdout | gunzip -c > .config
(Vom 17.Juli, also noch nicht mal einen Monat her. Wow).
Erstmal den Cross-Compiler in den Pfad aufnehmen:
export PATH=$PATH:/usr/src/android/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin
Die Konfiguration kann man mit "make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig"
anpassen. Ich habe einfach das Programm wieder beendet und gespeichert. Dann noch
ein Test-Compile:
make ARCH=arm CROSS_COMPILE=arm-eabi-
Scheint zu laufen. Ctrl-C. Jetzt ein Unionfs dazu, das gibt es auf
Unionfs: A Stackable Unification File System. Passende Diff-Datei
herunterladen und draufspielen:
zcat unionfs-2.5.2_for_2.6.27.24.diff.gz | patch -p1 --dry-run
OK - sieht gut aus, also nochmal ohne "--dry-run". Das UnionFS einschalten
mit "make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig" (steht unter
File systems -> Layered file systems -> Unionfs = Module). Speichern.
Kompilieren mit "make ARCH=arm CROSS_COMPILE=arm-eabi- modules".
6 Schnell mal draufspielen:
adb push fs/unionfs/unionfs.ko /sdcard
adb shell
insmod /sdcard/unionfs.ko
dmesg
Mist: Unresolved symbols. Das kann jetzt heiter werden
<4>[ 5693.336535] unionfs: Unknown symbol vfs_splice_from
<4>[ 5693.341992] unionfs: Unknown symbol vfs_splice_to
<4>[ 5693.357345] unionfs: Unknown symbol release_open_intent
(gehört evnt. in die Entwickler-Ecke. Ich benutze das Forum mal als Notizblock, evnt. hilft es jemanden ja)
Das hier habe ich gelesen:
Building Android kernel images
Es gibts 2 verschiedene Cross-Compile toolchains:
1 Für faule Leute bietet eine Firma "G++ Lite für ARM-GNU/Linux Target"
Download Sourcery G++ Lite Edition for ARM
Der Java-Installer ist recht huebsch und es installiert dann
einen "gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)" für
das Target "arm-none-linux-gnueabi". Will ich aber nicht benutzen.
2 Für nicht-so-faule wird mit dem Auschecken der Quelltexte eine
Toolcain mitinstalliert. Ich habe ein neues Verzeichnis angelegt:
/usr/src/android. Hineinwechseln und "repo init", "repo sync". Es finden
sich dann verschiedene Versionen unter ./prebuild, beispielsweise unter
linux-x86/toolchain/arm-eabi-4.4.0/bin/, Target ist arm-eabi, diese
Version ist offenbar etwas neuer: "gcc version 4.4.0 (GCC)".
Instruktionen, um die Quellen zu installieren finden sich dann hier:
Get source ?(Android Open Source Project)?
3 Jedenfalls braucht man einen Linux-Kernel-Quellbaum. Der war beim
Checkout (siehe Punkt 2) nicht dabei. Also das hier ausführen:
cd /usr/src/android
git clone git://android.git.kernel.org/kernel/msm.git
In dem lokalen GIT repo sollten mehrere Branches bereits drin sein.
Die Suche nach einem speziellen Samsung-Galaxy-Branch startet ich mit:
sven-ola@pcacer:/usr/src/android/msm$ git branch -a
* android-msm-2.6.27
origin/HEAD
origin/android-msm-2.6.25
origin/android-msm-2.6.27
origin/android-msm-2.6.29
origin/android-msm-2.6.29-donut
origin/android-msm-htc-2.6.25
origin/msm-2.6.25
Schade, kein Samsung da. Evnt. auch brauchbar - der 2.6.27 Branch, der
ja bereits aktiviert ist (der mit dem Stern). Die 2.6.27 steht auch im
./Makefile oben drin - ist ist offenbar gleich alles passend da.
4 Das dmesg auf dem Mobiltelefon behauptet, dass GCC 4.2.1 benutzt wurde:
"Linux version 2.6.27 (hudson@andy) (gcc version 4.2.1)". Damit stehen
aus Schritt 2 für Linux und MAC-OS diese Compiler zur Verfügung:
/usr/src/android/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc -v
oder
/usr/src/android/prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc -v
(Eins von beiden lässt sich ausführen - falls du nicht mehr weisst ob bei
dir ein Linux oder ein MAC-OS drauf ist <ggg>)
5 Wir brauchen eine .config-Datei. Die ziehe ich mir vom Telefon:
adb pull /proc/config.gz /dev/stdout | gunzip -c > .config
(Vom 17.Juli, also noch nicht mal einen Monat her. Wow).
Erstmal den Cross-Compiler in den Pfad aufnehmen:
export PATH=$PATH:/usr/src/android/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin
Die Konfiguration kann man mit "make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig"
anpassen. Ich habe einfach das Programm wieder beendet und gespeichert. Dann noch
ein Test-Compile:
make ARCH=arm CROSS_COMPILE=arm-eabi-
Scheint zu laufen. Ctrl-C. Jetzt ein Unionfs dazu, das gibt es auf
Unionfs: A Stackable Unification File System. Passende Diff-Datei
herunterladen und draufspielen:
zcat unionfs-2.5.2_for_2.6.27.24.diff.gz | patch -p1 --dry-run
OK - sieht gut aus, also nochmal ohne "--dry-run". Das UnionFS einschalten
mit "make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig" (steht unter
File systems -> Layered file systems -> Unionfs = Module). Speichern.
Kompilieren mit "make ARCH=arm CROSS_COMPILE=arm-eabi- modules".
6 Schnell mal draufspielen:
adb push fs/unionfs/unionfs.ko /sdcard
adb shell
insmod /sdcard/unionfs.ko
dmesg
Mist: Unresolved symbols. Das kann jetzt heiter werden
<4>[ 5693.336535] unionfs: Unknown symbol vfs_splice_from
<4>[ 5693.341992] unionfs: Unknown symbol vfs_splice_to
<4>[ 5693.357345] unionfs: Unknown symbol release_open_intent