1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Kernel selbst kompilieren

Dieses Thema im Forum "Root / Hacking / Modding für Huawei Ideos X3" wurde erstellt von Exilant, 01.12.2011.

  1. Exilant, 01.12.2011 #1
    Exilant

    Exilant Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    51
    Erhaltene Danke:
    5
    Registriert seit:
    21.10.2011
    Phone:
    Huawei Ideos X3
    Da das hier doch sehr weit verstreut ist, und ausserdem ein wenig komplizierter als es sein sollte, dachte ich ich fasse es mal zusammen.

    Zum Kernel-kompilieren brauchen wir:

    • ein entwicklungssystem, ich gehe mal von einem Linux mit make usw. bereits installiert aus. Sollte unter Windows mit cygwin oder macosx aber ähnlich sein.
    • den kernel-quellcode, huawei bietet einen an unter Downloads - Huawei Device Co., Ltd.. (etwa 431 MB)
    • die android-ndk (oder eine andere arm-toolchain), und zwar die version 5c (etwa 45 MB). Die aktuelle Android NDK r7 (etwa 70 MB) kompiliert zwar den kernel problemlos, aber die kompilierten module können dann nicht geladen werden. (*)

    dann alles entpacken
    bei der ndk ist die toolchain dann im unterverzeichnis toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/

    gcc-4.4 anpassungen, im kernel-makefile im hauptverzeichnis:
    Code:
    # conserve stack if available
    KBUILD_CFLAGS   += $(call cc-option,-fconserve-stack)
    
    # das hier einfuegen !
    #changed for gcc 4.4 (Exilant)
    KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
    # ende eingefuegtes !
    
    # Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
    # But warn user when we do so
    warn-assign = \
    Cross-compilieren vorbereiten
    Code:
    export ARCH=arm
    export CROSS_COMPILE=arm-eabi-
    export PATH=$PATH:~/Hacking/android-ndk-r5c/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/
    # pfad anpassen !
    make hw_msm7x27_defconfig
    jetzt können mit make menuconfig weitere einstellungen gemacht werden, zum Beispiel das tun-modul aktivieren. Man kann in general setup eine lokale version zu definieren, dann sieht man später einfacher, welche version gerade installiert ist, allerdings wird dann die dhd.ko (wlan) nicht mehr geladen.

    jetzt mit make das system bauen und erstmal etwas essen gehen, es dauert ein paar minuten (hier etwa 30, aber es ist auch ein stromspar-laptop)
    Danach ist der kernel in arch/arm/boot/zImage und die module sind überall verstreut (tun.ko ist in drivers/net/ )

    Installation
    Die Installation ist so verwirrend, dass ich mir fast sicher bin, dass es einfacher gehen muss.

    Wir wollen ein update.zip mit dem kernel erstellen. Als Basis nehmen wir Anykernel (https://github.com/koush/AnyKernel). In Anykernel muss noch in META-INF/com/google/android/updater-script
    die zeile mit mount() geändert werden zu
    Code:
    mount("yaffs2", "MTD", "system", "/system");
    dann ersetzen wir noch das zImage durch das kompilierte und kopieren unsere Module hinein. Aus dem Kernelverzeichnis heraus:
    Code:
    cp arch/arm/boot/zImage ../anykernel/kernel/
    rm ../anykernel/system/lib/modules/*.ko
    find . -iname *.ko | xargs -I {} mv {} ../anykernel/system/lib/modules
    dann will das anykernel-verzeichnis in ein zip gepackt werden,
    aus dem anykernel-verzeichnis heraus:
    Code:
    zip -r ../meinupdate.zip *
    Jetzt sollte das update noch signiert werden, dazu nehmen wir die signapk.jar (soll angeblich in der android-sdk sein, aber bei mir ist sie es nicht)

    Code:
    java -jar signapk/signapk.jar signapk/testkey.x509.pem signapk/testkey.pk8 meinupdate.zip meinupdate_signed.zip
    Das update kann nun zB mit CWM installiert werden.

    Die Integration in das Stock-rom habe ich noch nicht verstanden (die /wifi/dhd.ko scheint verwandt mit der bcm4329.ko, wird in der Ramdisk geladen)

    Nach der Installation
    Wlan ist abgeschaltet, muss wieder aktiviert werden (geht nur, wenn die dhd.ko geladen werden konnte)

    Weitere Informationen
    mehr informationen zu den Installationswegen update.zip und kernel.img mit ramdisk: http://www.android-hilfe.de/root-ha...6-boot-image-kernel-update-zip-erstellen.html

    zu (*): NDK Toolchain and "Unknown symbol _GLOBAL_OFFSET_TABLE_" in kernel module - Android Linux Kernel Development | Google Groups

    zu den extra cflags: kernel module.c not handling R_ARM_REL32 - ARM Community

    Konfigurationen
    fuchsteufel schrieb im supertoast-thema:
    Hat bei mir nicht funktioniert, im stock-rom ist da auch keine firmware, das modul laden schlägt dann fehl mit dhd_module_init: sdio_register_driver timeout

    und droid84 schrieb im supertoast-thema
    Mein kernel ist bei hw_msm7x27_defconfig als zImage 3163364 B gross, etwas mehr als der stock kernel(extrahiert aus mtd0) mit 3133436 B.
     
    Zuletzt bearbeitet: 02.12.2011
    XantiX, KatyB, Oma7144 und eine weitere Person haben sich bedankt.
  2. KatyB, 27.05.2012 #2
    KatyB

    KatyB Ehrenmitglied

    Beiträge:
    7,858
    Erhaltene Danke:
    1,888
    Registriert seit:
    06.09.2011
    Phone:
    BQ Aquaris M5
    Danke für die super Anleitung. Mein eigener Kernel läuft mit CM7.2.0-RC1 1a. Jetzt gehts heute Abend ans probieren und modifizieren. Die Einstellungsmöglichkeiten sind doch ziemlich groß.

    Sent from my fingers to your eyes :)
     
  3. XantiX, 28.05.2012 #3
    XantiX

    XantiX Android-Hilfe.de Mitglied

    Beiträge:
    96
    Erhaltene Danke:
    14
    Registriert seit:
    05.12.2011
    danke dafür. wird im nächstens update berücksichtigt und gewürdigt.
     

Diese Seite empfehlen