Motivation
Das Ziel dieses Projektes war es die Android Debug Tools (adb) auf dem Dokstar zu installieren. Dadurch soll ein kleiner intelligenter Netzstecker möglich sein. Der Dockstar benötigt nur wenig Energie und verfügt über USB-Anschlüsse, diese Hardware macht ihn zum idealen Server. Außerdem war er relativ günstig zu erwerben.
Als Hürde stellte sich heraus, dass in dem System ein ARM-Prozessor verbaut ist, und somit die fertig von Google erstellten Pakete nicht einfach darauf installieren lassen. Die folgende Dokumentation beschreibt, meinen Erfolg eine Version von ADB für ARM-Prozessoren zu erstellen.
Version Android Debug Bridge version 1.0.26
Voodoo Skripte
nandroid
netcat muss installiert sein. Folgende Dateien müssen von http://svn.infernix.net/nandroid/ heruntergeladen werden:
- nandroid.sh
- dump_image-arm
- mkyaffs2image-arm-uclibc (ist in mkyaffs2image umzubenennen)
- dump_image-arm-uclibc
Erstellt ein Backup des Handys und speichert es auf dem Dockstar unter backup-ordner :
android-auto-backup.sh backup-ordner
Im Laufe des Skripts wird das Handy neu gestartet um das Backup zu erstellen:
#!/bin/bash # Script: android-auto-backup.sh # 'adb' must be in $PATH if [ $# -ne 1 ]; then echo -e "Usage $0 <Backup target path>\t(Will be created if not exists)" exit 1 fi adb devices | grep -v devices | grep device >> /dev/null if [ $? -ne 0 ]; then echo "No Device was added" exit 1 fi FOLDER=$1/`date +%Y-%m-%d` if [ -d $FOLDER ]; then echo "$FOLDER exists, no backup must be done" exit 1 fi echo "----- Target: $FOLDER -----" adb reboot recovery if [ $? -ne 0 ]; then exit 1 fi sleep 20 echo "----- Backuping -----" sleep 15 ./nandroid.sh $FOLDER if [ $? -ne 0 ]; then exit 1 fi adb shell reboot & # clean USE at your own risk! # echo "---- Clean tmp folder in $FOLDER ----" # cd $FOLDER # rm -rf *-tmp/
android light backup
Dieses Skript speichert alle wichtigen Datenbanken des Handys auf dem Dockstar.
#!/bin/bash # android-light-backup.sh # For restoreing all backuped files must be pushed back to the device via adb # T H I S S C R I P T W A S B U I L D F O R A N D R O I D 2.* D E V I C E S if [ $# -ne 1 ]; then echo -e "Usage $0 <Backup target path>\t(Will be created if not exists)" exit 1 fi adb devices | grep -v devices | grep device >> /dev/null if [ $? -ne 0 ]; then echo "No Device was added" exit 1 fi FOLDER=$1/`date +%Y-%m-%d`-light/ mkdir -p $FOLDER echo "----- Target: $FOLDER -----" # Essential: People, SMS+MMS, Alarms adb pull /data/data/com.android.providers.telephony/databases/mmssms.db $FOLDER adb pull /data/data/com.android.providers.telephony/databases/telephony.db $FOLDER adb pull /data/data/com.android.providers.contacts/databases/contacts2.db $FOLDER adb pull /data/data/com.android.deskclock/databases/alarms.db $FOLDER # Mail adb pull /data/data/com.fsck.k9/databases/preferences_storage $FOLDER adb pull /data/data/com.fsck.k9/shared_prefs/com.fsck.k9_preferences.xml $FOLDER # Jabberoid adb pull /data/data/uk.ac.napier.android.jabberoid/shared_prefs/uk.ac.napier.android.jabberoid_preferences.xml $FOLDER adb pull /data/data/uk.ac.napier.android.jabberoid/databases/jabber_android.db $FOLDER # NetCounter adb pull /data/data/net.jaqpot.netcounter/databases/network.db $FOLDER adb pull /data/data/net.jaqpot.netcounter/shared_prefs/net.jaqpot.netcounter_preferences.xml $FOLDER #AK Notepad adb pull /data/data/com.akproduction.notepad/databases/aknotepad.db $FOLDER adb pull /data/data/com.akproduction.notepad/shared_prefs/_has_set_default_values.xml $FOLDER adb pull /data/data/com.akproduction.notepad/shared_prefs/com.akproduction.notepad_preferences.xml $FOLDER echo "----- Backup is done -----"
Debian in Qemu installieren
Voraussetzungen
Folgende Voraussetzungen sind zu erfüllen:
- Qemu installiert
- GUI installiert, da Qemu diese leider zum starten benötigt.
Mein System:
- Debian Lenny 64Bit
- 512MB RAM
- 20GB HDD
Erstellte ARM Debian Version
- Debian Lenny ARM
- 256 MB RAM
- 8 GB HDD (4,8 GB wurden genutzt)
TODO: Ordner arm-debian NENNEN
Installation
Kernel herunterladen
In einen Arbeitsordner wechseln
mkdir ~/arm-debian cd ~/arm-debian
Die aktuellen Kerbel Dateien herunterladen:
wget ftp://ftp.de.debian.org/debian/dists/lenny/main/installer-armel/current/images/versatile/netboot/vmlinuz-2.6.26-2-versatile wget ftp://ftp.de.debian.org/debian/dists/lenny/main/installer-armel/current/images/versatile/netboot/initrd.gz
Festplatte erstellen
Qemu Festplatte erstellen
qemu-img create -f raw armdisk.img 8G
Installieren
Das System mit dem heruntergelassenen Kerbel starten und eine Netzwerkinstallation durchführen.
qemu-system-arm -m 256 -M versatilepb -kernel ~/arm/vmlinuz-2.6.26-2-versatile -initrd ~/arm/initrd.gz -hda ~/arm/armdisk.img -append "root=/dev/ram"
Es ist den Anweisungen zu folgen und das System nach der Installation herunterzufahren.
Tipps bei der Benutzung der VM
Bei der Tastatur ist es bei mir zu Problemen gekommen. Folgende Tastenbelegung habe ich getestet:
- 8 war ENTER
- t war J wie Ja
- r war Tab
- e ist löschen
- "2 3" ist "root"
Tipp: "-k de" bei dem Start von Qemu hinzufügen und eine deutsche Tastatur wird verwendet.
Initrd aus der VM extrahieren
Jetzt das bei der Debian-Instalation heruntergeladene initd auf den Hostrechner kopieren.
mkdir mount sudo mount -o loop,offset=32256 armdisk.img mount/ cp mount/boot/initrd.img-2.6.26-2-versatile . sudo umount mount/
Gedanke: die Zahl könnte der MBR sein ?
Jetzt kann die Maschine mit der neuen Version gestartet werden
qemu-system-arm -m 256 -M versatilepb -kernel vmlinuz-2.6.26-2-versatile -initrd initrd.img-2.6.26-2-versatile -hda armdisk.img -append "root=/dev/sda1"
SSH Server
Optional einen SSH-Server installieren zur einfacheren Nutzung
aptitude install openssh-server
Netzwerkverbindung konfigurieren
Um einfach auf die virtuelle Maschine zuzugreifen, kann ein bestimmter Netzwerkport des Hostrechner weitergeleitet werden.
-redir tcp:5022::22
Ist beim Starten als Parameter hinzufügen, damit über 5022 über SSH auf die Maschine zuzugreifen. Nun kann man einfach über die normale IP des Rechners auf die ARM-Maschine zugreifen. Zum Beispiel:
ssh -p 5022 user@localhost
adb-Tool erstellen
Android herunterladen
Alle die in diesem Kapitel aufglisten Befehle sind in der Virtuellen Maschine auszuführen. Damit steht uns ein Debian auf einem ARM-Prozessor zu Verfügung.
Voraussetzungen
Auf der virtuellen Maschine sind folgende Pakete zu installieren:
aptitude install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline5-dev libz-dev
Android repo client installieren
cd ~ mkdir bin export PATH=$PATH:~/bin echo $PATH curl http://android.git.kernel.org/repo >~/bin/repo chmod a+x ~/bin/repo
Initialisieren
mkdir mydroid cd mydroid repo init -u git://android.git.kernel.org/platform/manifest.git
Android SDK herunterladen
repo sync
Fehler
Beim Herunterladen ist folgender Fehler aufgetreten:
Initializing project platform/packages/apps/Bluetooth ... remote: Counting objects: 1775, done. remote: Compressing objects: 100% ()88/588, done. fatal: write error (broken pipe5), 131.99 KiB fatal: index-pack failed error: Cannot fetch platform/packages/apps/Bluetooth
Lösung
einfach öfters den Befehl
repo sync
eingaben. Dieses Problem bestand, da die Virtuelle Maschine nur wenig RAM zu Verfügung hatte
Adb Tools erstellen
Es soll nur das adb-Tool erstellt werden.
cd ~/mydroid make out/host/linux-x86/bin/adb
Dieser Befehl wird erst funktionieren, wenn die folgenden Modifikationen durchgeführt worden sind.
Modifikationen
Fehler bei Prozessorertyp-Erkennung
build/core/envsetup.mk:100: *** Unable to determine HOST_ARCH from uname -sm: Linux armv5tejl!. Schluss.
Lösung ist dazu die Datei build/core/envsetup.mk anzupassen und den Rechner als ein Standard 32Bit Linux zu behandeln.
# HOST_ARCH ifneq (,$(findstring 86,$(UNAME))) HOST_ARCH := x86 endif ifneq (,$(findstring Power,$(UNAME))) HOST_ARCH := ppc endif #Ollo: fake ARM as x86 ifneq (,$(findstring arm,$(UNAME))) HOST_ARCH := x86 endif
Außerdem ist in build/core/main.mk der folgende Textteil auszukommentieren:
#Ollo #ifeq ($(BUILD_OS),linux) #build_arch := $(shell uname -m) #ifneq (64,$(findstring 64,$(build_arch))) #$(warning ************************************************************) #$(warning You are attempting to build on a 32-bit system.) #$(warning Only 64-bit build environments are supported beyond froyo/2.2.) #$(warning ************************************************************) #$(error stop) #endif #endif
Java-Version nicht prüfen
Es muss noch vor den "make"-Aufruf Java aus kommentieren werden. Hierzu ist die Datei build/core/main.mk zu bearbeiten.
Hier die Bereiche die
# Check for the correct version java
und
# Check for the correct version javac
auskommentieren, sodass keine Überprüfung mehr stattfindet.
Fehler -m32
Der Fehler:
host C: adb <= system/core/adb/adb.c cc1: error: unrecognized command line option "m32"
Lösung: Hier zu ist die Datei build/core/combo/HOST_linux-x86.mk zu bearbeiten. Es sind die Zeilen 32 und 33 auszukommentieren:
ifneq ($(TARGET_SIMULATOR),true) #HOST_GLOBAL_CFLAGS += -m32 #HOST_GLOBAL_LDFLAGS += -m32 endif
Statisch gelinkte Version
TODO das auch noch beschreiben Es ist build/core/combo/HOST_linux-x86.mk zu bearbeiten.
ifneq ($(TARGET_SIMULATOR),true) #HOST_GLOBAL_CFLAGS += -m32 #HOST_GLOBAL_LDFLAGS += -m32 HOST_GLOBAL_LDFLAGS += -static endif
Binare Dateien
Die von mir erstellten Binär Dateien.
- Dynamisch gelinkte Version Datei:ARM adb dynamic.zip
- Statisch gelinkte Version Datei:ARM adb static.zip