1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. Exilant, 01.12.2011 #1
    Exilant

    Exilant Threadstarter Android-Hilfe.de Mitglied

    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: https://www.android-hilfe.de/forum/...-image-kernel-update-zip-erstellen.93786.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 einer weiteren Person gefällt das.
  2. KatyB, 27.05.2012 #2
    KatyB

    KatyB Ehrenmitglied

    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

    danke dafür. wird im nächstens update berücksichtigt und gewürdigt.
     

Benutzer fanden diese Seite durch die Suche nach:

  1. android selbst kompilieren

    ,
  2. android selber kompilieren

    ,
  3. huawei g play mini Kernel bearbeiten

    ,
  4. android kernel für zusätzliche module kompilieren,
  5. kernel selbst bauen,
  6. huawei kernel,
  7. custom rom selber kmpilieren,
  8. haker wifi exilant,
  9. android system kernel configurieren
Du betrachtest das Thema "Kernel selbst kompilieren" im Forum "Root / Hacking / Modding für Huawei Ideos X3",