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

Kernel Kompilieren, kurzes Tutorial

Dieses Thema im Forum "Anleitungen für HANNspree HANNSpad (SN10T1)" wurde erstellt von rotation, 03.11.2011.

  1. rotation, 03.11.2011 #1
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    Ein Tutorial für jene, die selbst Kernel Kompilieren wollen:

    Grundsätzlich basiert alles auf dem Folgenden für das G Tablet:
    [GUIDE] Compiling and Installing Custom Kernel (based on pershoot's Kernel from git) - xda-developers
    Hier nur kleine Ergänzungen, bzw. Erweiterungen.


    1. Vorbereitung:

    Ich empfehle eine Virtuelle Maschine und Ubuntu. Das hat den Vorteil, dass man keinen PC neu aufsetzen muss, Windows kann weiterverwendet werden. Ein Doppelbildschirm ist aber sehr praktisch, dann kann auf einem der Code betrachtet werden, auf dem anderen z.B. Internet Explorer und Infos suchen.

    Im Terminal die Packages installieren:
    Ich weiß noch, dass es manche Packages nicht mehr gab, ich hab die dann selber gesucht, welche das waren, weiß ich aber nicht mehr. Die leiten sich aber aus den Namen ab, haben aber am Ende andere Bezeichnungen.

    Weiters muss ein Verzeichnis erstellt werden und ihr müsst Besitzer sein, damit nicht dauernd sudo verwendet werden muss.

    Weiters die Toolchain, bzw. der Crosscompiler:
    https://android-build.linaro.org/jenkins/job/linaro-android_toolchain-4.6-linaro-master-with-generic-target/21/artifact/build/out/android-toolchain-eabi-linaro-4.6-2011.10-21-2011-10-15_01-08-47-linux-x86.tar.bz2

    Das ist der Crosscompiler, mit dem keine SoD's mehr auftraten (zumindest bei mir). Fards scheint nun auch mit diesem zu arbeiten.
    Diese Entpacken.
    Für den Cross Compiler muss die der Pfad ...\arm-eabi\bin angegeben werden, sonst wird der nicht gefunden.

    Weiters die Kernel Sources.
    Fards: git://github.com/fards/ab73kernel-Hannspad-2632.git
    oder meine: git://github.com/Gott/ab73kernel-Hannspad-2632.git

    Github hat den Vorteil, dass man Änderungen einfach anderen mitteilen kann.
    Weiters kann man auch nach Infos in Google suchen, z.B.: "ondemand governor tweak github".

    2. Config

    Die Configs sind in /arch/arm/config
    Da sind mehrere drin.
    Für uns "ab_per_adam_tegra_harmony_android_newbl_defconfig".

    Wenn nun
    eingegeben wird, wird die Config geladen, nach dem verändern wird die in .config gespeichert.
    (Der Punkt zeigt an, dass die Datei unsichtbar ist)
    Ich weiß aber nicht, ob die ab_per_..... Config verändert wird.
    Ich hab ein Script benutzt, die die .config automatisch wieder zurückkopiert.

    3. Kompilieren

    Damit wird as zImage kompiliert. Es befindet sich anschließend im Ordner /arch/arm/boot/zImage.
    Wichtig ist, dass der CrossCompile Pfad richtig ersetzt wird, gegen euren, oben heruntergeladen.

    Hierdurch werden die Module kompiliert.

    4. Packen

    Wir verwenden die Methode von Koush.
    Das erlaubt das Installieren beliebiger Dateien im CWM.
    Koushs Methode ist auch auf github zu finden, es reicht aber, wenn wir ein ab73 Zip Archiv verwenden.
    Einfach die Module und zImage darin löschen.

    Hierdurch werden die Module kompiliert und im Pfad .../staging/system gespeichert. Dort habt ihr dann einen Pfad /system/lib/modules/2.3.32-cyanogenmod/ ... mit weiteren Unterordnern. Die .ko Dateien sind die Module. Diese müssen ins ZIP archiv in den Ordner /lib/modules kopiert werden.
    Ich hab mir damit mal das WLAN gebrickt, weil das Modul alt war, es wurde schlicht das alte verwendet, siehe Test Kernel Thread.
    Nicht vergessen, das bcm4329 Modul mit dem dhd.ko zu ersetzen. Die dhd.ko ist das WLAN Modul.

    Anschließend die Symlinks entfernen, im Ordner /system/lib/modules/2.6.32.28-cyanogenmod/
    build und source. Windows Usern ist so etwas unbekannt, Windows kennt keine Symlinks.

    Anschließend alles zippen, in den richtigen Pfaden. Das ab73 Kernel Zip ist eigentlich selbsterklärend.

    Bitte verwendet dazu NUR Linux. Schlimmstenfalls 7zip unter Windows. Keinesfalls Winrar, das funktioniert nicht richtig. Die Zips haben dann nicht das richtige Format und können nicht installiert werden.
    Vorteil von Linux ist, dass man auch Scripte schreiben kann. Die Befehle werden nacheinander abgearbeitet.
    Anschließend via CWM installieren.



    Zum Programmieren:
    Ihr habt dann ein Verzeichnis .../ab73kernel-Hannspad-2632/
    Darin sind alle Dateien, aus dem der Kernel besteht.
    Wenn etwas zu einer bestimmten Funktion verändert werden soll, muss erst die betreffende Stelle gesucht werden. Das kann schonmal recht lange dauern. Bis man dann auch noch den Code versteht dauert es nochmal länger.

    Kleine Liste:
    Swappiness: mm/vmscan.c
    touchscreen: /drivers/input/touchscreen/tegra_odm.c
    Clocks und Voltages: /arch/arm/mach-tegra/nvrm/core/common/nvrm_clocks_limits.c

    Für alles weitere müsst ihr Google bemühen.

    Evtl. hab ich euch den Einstieg ins Kernel Programmieren etwas erleichtert.
     
    Zuletzt bearbeitet: 12.01.2012
    rebelt2i, muhahahaah, benlis und 6 andere haben sich bedankt.
  2. antibyte, 15.11.2011 #2
    antibyte

    antibyte Erfahrener Benutzer

    Beiträge:
    236
    Erhaltene Danke:
    322
    Registriert seit:
    16.05.2010
    Make -jx ....
    beschleunigt das erstellen enorm.
    Wobei x=Anzahl der CPU-Kerne * 2
    also -j8 bei einem Quadcore.


    Sent from my MB525 using Tapatalk
     
  3. rotation, 15.11.2011 #3
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    wie kann ich mehrere Optionen angeben?
    -C -j4 gibt bei mir immer einen Fehler.

    Könnten hier Race Conditions entstehen?
     
  4. Basti-Fantasti, 25.11.2011 #4
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Hi,

    danke erstmals für das Tutorial :)

    Mir sind aber ein paar Kleinigkeiten aufgefallen:

    unter 2. sind die config Dateien unter

    <source_dir>/arch/arm/configs

    und den Ordner /usr/src/tegratab/gtab-2632 in dem make Kommando gibts bei mir nicht :-(
    Wenn ich den Ordner erstelle und dann das Kommando ausführe klappts auch nicht.

    Hast du mir nen Tipp?

    ich hab den ab73kernel-... ausgecheckt

    Gruß
    Basti

    EDIT:

    hier noch der Output:

     
    Zuletzt bearbeitet: 25.11.2011
  5. rotation, 25.11.2011 #5
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    du musst zuerst mit git clone das repo auf deine platte klonen...
     
  6. Basti-Fantasti, 25.11.2011 #6
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Ja das hab ich gemacht. Ich hab mir 3 unterschiedliche git repos auf den rechner gecloned. Den originalen, den ab73 und den .36er kernel von fards. Den crosscompiler hab ich heruntergeladen und entpackt.

    Wo liegt bei euch das /usr/src verzeichnis?
    In den kernel ist zwar ein /usr verzeichnis aber ohne weitere Unterverzeichnisse...
     
  7. rotation, 25.11.2011 #7
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    ne, bei mir liegen die Kernel auf /usr/src/tegratab/gtab-2632/
    also unter /usr/src/tegratab/
    hab ich eingegeben git clone, da kopiert er dann das repo hin.

    Die Ordner sind aber unterschiedlich, je nachdem, wo du anfängst, muss nicht tegratab heißen, der wurde von mir persönlich erstellt.
     
  8. Basti-Fantasti, 25.11.2011 #8
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Aber das /usr/src liegt doch nicht direkt in /usr/src oder? Das repo checkst du doch unterhslb von deinem user account aus oder?

    Also /home/user/ab73/usr/src
     
  9. rotation, 25.11.2011 #9
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    doch...
    das ist der Pfad bei mir...

    /usr/src/.......
    nix mit home...

    bei mir...
    du kannst das natürlich ändern, aber dann musst du auch alle Pfade korrekt ändern...
     
  10. Basti-Fantasti, 25.11.2011 #10
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Ok danke erstmal ich werd das probieren :)
    Ich berichte dann :)
    D.h. du hast das git repo nach /usr/src gecloned
     
  11. rotation, 25.11.2011 #11
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    /usr/src/tegratab/, dann clone...
     
  12. Basti-Fantasti, 25.11.2011 #12
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Ah langsam wirds mir klar :)
     
  13. Basti-Fantasti, 02.01.2012 #13
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Hallo,

    jetzt hab ich mich daran versucht den kernel zu compilieren - leider klappts aber immernoch nicht.

    ich hab die kernel sources unter /usr/src/tegratab/gtab-2632
    die toolchain (gcc ver. 4.6.2) unter /usr/src/tegratab/prebuilt/bin (hier liegen die ganzen arm-eabi-gcc, ...)

    soweit so gut :)

    im gtab-2632 Verzeichnis mach ich dann:

    Code:
    make ARCH=arm ab_per_adam_tegra_harmony_android_newbl_defconfig menuconfig
    #
    # configuration written to .config
    #
      HOSTCC  scripts/kconfig/lxdialog/checklist.o
      HOSTCC  scripts/kconfig/lxdialog/inputbox.o
      HOSTCC  scripts/kconfig/lxdialog/menubox.o
      HOSTCC  scripts/kconfig/lxdialog/textbox.o
    scripts/kconfig/lxdialog/textbox.c: In Funktion »print_line«:
    scripts/kconfig/lxdialog/textbox.c:323:9: Warnung: Variable »x« gesetzt, aber nicht verwendet [-Wunused-but-set-variable]
    scripts/kconfig/lxdialog/textbox.c:323:6: Warnung: Variable »y« gesetzt, aber nicht verwendet [-Wunused-but-set-variable]
      HOSTCC  scripts/kconfig/lxdialog/util.o
      HOSTCC  scripts/kconfig/lxdialog/yesno.o
      HOSTCC  scripts/kconfig/mconf.o
      HOSTLD  scripts/kconfig/mconf
    scripts/kconfig/mconf arch/arm/Kconfig
    
    
    *** End of Linux kernel configuration.
    *** Execute 'make' to build the kernel or try 'make help'.
    
    dann startet das menuconfig Fenster. Es sind einige Punkte ausgewählt (also denke ich, dass die Konfiguration aus dem ab_... File richtig geladen wurde.

    Dann versuche ich den Kernel mit der Grundkonfiguration zu bauen mit:

    Code:
    make ARCH=arm CROSSCOMPILE=/usr/src/tegratab/prebuilt/bin/arm-eabi- zImage
    
    Und das ist der produzierte Fehler:

    Code:
    scripts/kconfig/conf -s arch/arm/Kconfig
      CHK     include/linux/version.h
    make[1]: »include/asm-arm/mach-types.h« ist bereits aktualisiert.
      CHK     include/linux/utsrelease.h
      UPD     include/linux/utsrelease.h
      SYMLINK include/asm -> include/asm-arm
      CC      kernel/bounds.s
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mlittle-endian«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mapcs«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-sched-prolog«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-thumb-interwork«
    kernel/bounds.c:1:0: Fehler: unbekanntes ABI (aapcs-linux) für -mabi= switch
    kernel/bounds.c:1:0: Fehler: falscher Wert (armv5t) für -march= switch
    kernel/bounds.c:1:0: Fehler: Falscher Wert (cortex-a9) für -mtune= switch
    make[1]: *** [kernel/bounds.s] Fehler 1
    make: *** [prepare0] Fehler 2
    
    
    Muss ich an dem Makefile noch was ändern, oder benötige ich eine andere Toolchain?

    Gruß
    Basti
     
  14. rotation, 02.01.2012 #14
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    welche Toolchain hast du?
    versuche mal nach dem make noch "-C" dranzuhängen.
     
  15. Basti-Fantasti, 02.01.2012 #15
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Gleiches Ergebnis :-(

    Code:
    make -C /usr/src/tegratab/gtab-2632/ ARCH=arm CROSSCOMPILE=/usr/src/tegratab/prebuilt/bin/arm-eabi- zImage
    make: Gehe in Verzeichnis '/usr/src/tegratab/gtab-2632'
      CHK     include/linux/version.h
    make[1]: »include/asm-arm/mach-types.h« ist bereits aktualisiert.
      CHK     include/linux/utsrelease.h
      SYMLINK include/asm -> include/asm-arm
      CC      kernel/bounds.s
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mlittle-endian«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mapcs«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-sched-prolog«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-thumb-interwork«
    kernel/bounds.c:1:0: Fehler: unbekanntes ABI (aapcs-linux) für -mabi= switch
    kernel/bounds.c:1:0: Fehler: falscher Wert (armv5t) für -march= switch
    kernel/bounds.c:1:0: Fehler: Falscher Wert (cortex-a9) für -mtune= switch
    make[1]: *** [kernel/bounds.s] Fehler 1
    make: *** [prepare0] Fehler 2
    make: Verlasse Verzeichnis '/usr/src/tegratab/gtab-2632'
    
    
    Die Version steht leider nirgends. Ich seh nur das der gcc in Version 4.6.2 ist.
    Ich glaub aber ich hab die Toolchain von dem ersten Post hier im Thread runtergeladen
     
    Zuletzt bearbeitet: 02.01.2012
  16. rotation, 02.01.2012 #16
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    und welche toolchain?
     
  17. Basti-Fantasti, 02.01.2012 #17
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Ich hab die Toolchain von der ersten Seite grad nochmals runtergeladen und mit der getestet - gleiches Ergebnis

    Code:
     make ARCH=arm CROSSCOMPILE=/usr/src/tegratab/android-toolchain-eabi/bin/arm-eabi- zImage
      CHK     include/linux/version.h
    make[1]: »include/asm-arm/mach-types.h« ist bereits aktualisiert.
      CHK     include/linux/utsrelease.h
      SYMLINK include/asm -> include/asm-arm
      CC      kernel/bounds.s
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mlittle-endian«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mapcs«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-sched-prolog«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-thumb-interwork«
    kernel/bounds.c:1:0: Fehler: unbekanntes ABI (aapcs-linux) für -mabi= switch
    kernel/bounds.c:1:0: Fehler: falscher Wert (armv5t) für -march= switch
    kernel/bounds.c:1:0: Fehler: Falscher Wert (cortex-a9) für -mtune= switch
    make[1]: *** [kernel/bounds.s] Fehler 1
    make: *** [prepare0] Fehler 2
    
    
    und hier noch mit dem -C Parameter

    Code:
    make -C /usr/src/tegratab/gtab-2632/ ARCH=arm CROSSCOMPILE=/usr/src/tegratab/android-toolchain-eabi/bin/arm-eabi- zImage
    make: Gehe in Verzeichnis '/usr/src/tegratab/gtab-2632'
      CHK     include/linux/version.h
    make[1]: »include/asm-arm/mach-types.h« ist bereits aktualisiert.
      CHK     include/linux/utsrelease.h
      SYMLINK include/asm -> include/asm-arm
      CC      kernel/bounds.s
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mlittle-endian«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mapcs«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-sched-prolog«
    cc1: Fehler: nicht erkannte Kommandozeilenoption »-mno-thumb-interwork«
    kernel/bounds.c:1:0: Fehler: unbekanntes ABI (aapcs-linux) für -mabi= switch
    kernel/bounds.c:1:0: Fehler: falscher Wert (armv5t) für -march= switch
    kernel/bounds.c:1:0: Fehler: Falscher Wert (cortex-a9) für -mtune= switch
    make[1]: *** [kernel/bounds.s] Fehler 1
    make: *** [prepare0] Fehler 2
    make: Verlasse Verzeichnis '/usr/src/tegratab/gtab-2632'
    
    
     
  18. Basti-Fantasti, 02.01.2012 #18
    Basti-Fantasti

    Basti-Fantasti Android-Hilfe.de Mitglied

    Beiträge:
    50
    Erhaltene Danke:
    0
    Registriert seit:
    23.09.2011
    Ah habs glaub ich gefunden... Der Parameter muss

    CROSS_COMPILE und nicht CROSSCOMPILE heißen :cool2:

    er kommt zumindest weiter als vorher
     
  19. watz, 11.01.2012 #19
    watz

    watz Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    15
    Registriert seit:
    09.01.2012
    Hier noch ein paar kleine Anmerkungen zur Anleitung:


    • "..._defconfi menuconfig..." <- da fehlt das "g" :lol:
    • lzma wird benötigt (war bei Ubuntu 11.10 nicht vorinstalliert)
    • im "git://github.com/Gott/ab73kernel-Hannspad-2632.git" fehlen aktuell einige Dateien, z.B. "include/linux/rcu_types.h"
    Gruß,
    Watz
     
    rotation bedankt sich.
  20. rotation, 12.01.2012 #20
    rotation

    rotation Threadstarter Android-Lexikon

    Beiträge:
    1,468
    Erhaltene Danke:
    213
    Registriert seit:
    04.05.2011
    * geändert
    * geändert
    * Kann ich nicht beantworten. Ich habe das Repo von ab73 geforkt...
     

Diese Seite empfehlen

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. android kernel kompilieren