Module 'nach'-kompilieren

  • 7 Antworten
  • Letztes Antwortdatum
T

tiefimwesten

Ambitioniertes Mitglied
8
Moin,

ich habe ein GN, JB4.1.2 und habe mir die 'ppp_async.ko' zusätzlich kompiliert. Nun scheint dieses Modul Probleme zu machen und ich bin mir nicht sicher, ob ich richtig vorgegangen bin.
Folgende Anleitung habe ich benutzt:
[Tutorial] How to compile your first Nexus Kernel - xda-developers

Als Branch habe ich die 'master' genommen:
'$ git clone https://android.googlesource.com/device/samsung/maguro -b jb-mr0-release'
sowie
'$ git clone https://android.googlesource.com/kernel/omap.git -b android-omap-tuna-3.0-jb-mr0'

und die toolchain
'$ git clone https://android.googlesource.com/platform/prebuilt -b jb-mr0-release'

Sonst alles wie in der Anleitung.
Nach dem 'make tuna_defconfig' habe ich die .config angepaßt und die Auskommentierung beim 'PPP_ASYNC' rausgenommen und auf '=m' gesetzt. Das Modul wurde dann beim 'make' auch erstellt.
Habs dann auf dem GN ins '/system/lib/modules' kopiert und Rechte/Besitzer anpaßt. Bei mir funktioniert das Modul auch, bei anderen aber nicht.
Und da ich nicht sicher bin, ob ich das Ding sauber erstellt habe, frage ich einfach mal.
Vielleicht kann das ja einer von euch netterweise mal kommentieren, ob das so ok ist oder nicht.

Ach ja. Sinn und Zweck des ganzen ist, das man bei einer VW-FSE rSAP mit DUN nutzen kann.

Thx,
Ingo
 
  • Danke
Reaktionen: Mandulli
Habt ihr überprüft, ob vermagic von Kernel und Modul übereinstimmen?
Module werden immer für einem bestimmten Kernel kompiliert, wenn die vermagic nicht passt, kann man das Modul auch nicht nutzen.
Die Kernel Version findet ihr unter Einstellungen->Über das Telefon->Kernel-Version oder über den Terminal Emulator, dort mal
Code:
uname -r
eingeben. Die Ausgabe müsste dann die Kernelverson-CRCPrüfsumme sein.
Danach um vermagic des Modules herauszufinden
Code:
modinfo /pfad/zum/modul.ko
eingeben. In der Ausgabe überprüfen, ob in der vermagic Zeile die selbe Kernelversion und Prüfsumme enthält wie beim ersten Befehl. Wenn sie übereinstimmen, dann mal mit Rootrechten
Code:
insmod /pfad/zum/modul.ko
eingeben, wenn er den Befehl ohne Fehler ausführt, liegt das Problem wahrscheinlich nicht am Modul.
Überprüfen ob das Modul geladen wurde, könnt ihr mit lsmod.
Falls er einen Fehler ausgibt, dann gebt mal
Code:
dmesg
ein (auch mit root), Such dort nach einer Zeile, die mit <3> beginnt, die 3 steht für Fehler. Wenn der Fehler was mit dem Modul zu tun hat, wirst du das schon erkennen. Kannst es dann mal hier posten.

Beim Kompilieren bist du zwar richtig vorgegangen, aber mal ein paar Tipps:

- Wenn du nicht vor hast den ganzen Kernel auszuwechseln sondern nur ein zusätzliches Module erstellen willst, ist es meist besser als .config die Datei /proc/config.gz von deinem Telefon zu nehmen. Sie entpacken,.config umbenennen und ins Kernelquellcode Verzeichnis kopieren.
Beim Stockkernel muss du das zwar nicht zwingend machen, da sie in der Regel mit der def_config übereinstimmt, bei anderen ist es jedoch sicherer, da man nie weiss, welche Konfigurationen der Kernelersteller verändert hat ohne eine aktuelle def_config zu erstellen.

- Die .config solltest du nicht manuell verändern. Wenn du die Konfigurationen ändern willst, solltest du das mit dem Befehl
Code:
make menuconfig
durchführen. Damit erhältst du ein Auswahlmenü für die diversen Konfigurationen. PPP_ASYNC findest du unter "Device Drivers->Network Device Support->"PPP support for async serial ports"
Wenn du dich nicht durch das Menü kämpfen willst, dann kannst du auch ohne Änderungen mit make erst mal deinen Kernel erstellen, so stellst du auch sicher, dass du nichts versehentlich änderst und die vermagic mit dem installierten Kernel übereinstimmt.
Danach gibst du einfach nur
Code:
make CONFIG_PPP_ASYNC=m
ein, um das von dir gewünschte Modul zu erstellen
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: tiefimwesten
Hi perpe,

ich danke dir für deine Antwort.

Also, 'uname -r' gibt mir als vermagic '3.0.31-g4f6d371' aus.

Die vermagic des Moduls kriege ich nicht raus. Gebe ich 'modinfo /system/lib/modules/ppp_async.ko' ein, bekomme ich folgende Fehlermeldung: 'can't open /lib/modules/3.0.31-g4f6d371/modules.dep: no such file or directory'. Hat er Recht, es gibt noch nicht mal ein lib-Verzeichnis.

'insmod /system/lib/modules/ppp_async.ko' gibt auch einen Fehler, nämlich
'init_module '/system/lib/modules/ppp_async.ko' failed (file exists)'. Klingt mir aber als korrekt schon geladen, da 'lsmod' 'ppp_async 6958 0 - Live 0x0000000' ausgibt. Das sagt mir doch, das das Modul geladen ist.

Ich weiss das ich 'make menuconfig' hätte machen sollen, funktionierte aber nicht. Brach mit diversen Fehlermeldungen ab. Vielleicht liegt es daran, da ich Ubuntu in einer virtuellen Maschine laufen habe.
Bin dann eben den 'einfachen' Weg über dir .config gegangen.
UPDATE: make menuconfig funktioniert nach Installation von 'lib32ncurses5-dev'
Aber der Tipp mit der config.gz ist gut. Ich probiere das mal aus, kompiliere damit den Kernel und mache dann mal ein neues Modul mit dem 'make CONFIG_PPP_ASYNC=m'.

Thx,
Ingo
 
Zuletzt bearbeitet:
tiefimwesten schrieb:
Die vermagic des Moduls kriege ich nicht raus. Gebe ich 'modinfo /system/lib/modules/ppp_async.ko' ein, bekomme ich folgende Fehlermeldung: 'can't open /lib/modules/3.0.31-g4f6d371/modules.dep: no such file or directory'. Hat er Recht, es gibt noch nicht mal ein lib-Verzeichnis.
Wenn ich mich nicht ganz irre, hängt der Fehler von der busybox ab. Modinfo funktioniert unter Android nicht ganz so wie mit einer Linux Distros.
Schau mal welche busybox du hast, ob es die von Stericson oder von JRummy ist, je nachdem installiere die andere. Eine von beiden konnte auch modinfo ohne die modules.dep. Ich kann dir nur sagen, dass es mit der CM Busybox geht.

'insmod /system/lib/modules/ppp_async.ko' gibt auch einen Fehler, nämlich
'init_module '/system/lib/modules/ppp_async.ko' failed (file exists)'. Klingt mir aber als korrekt schon geladen, da 'lsmod' 'ppp_async 6958 0 - Live 0x0000000' ausgibt. Das sagt mir doch, das das Modul geladen ist.
Das ist ok so, wenn du zuvor die App laufen gelassen hast, da dadurch das Modul bei dir schon geladen ist.
Es bringt jedoch nicht viel, wenn du die Befehle auf deinem Telefon ausführst, da es bei dir funktioniert. Das solltet IHR schon auf dem Gerät machen, auf dem es nicht funktioniert ;)

Ich weiss das ich 'make menuconfig' hätte machen sollen, funktionierte aber nicht. Brach mit diversen Fehlermeldungen ab. Vielleicht liegt es daran, da ich Ubuntu in einer virtuellen Maschine laufen habe. Bin dann eben den 'einfachen' Weg über dir .config gegangen.
An der VM liegt es nicht, evt. fehlen dir ein paar Pakete. Wenn ich mir Punkt 5 der Anleitung ansehe, müsste jedoch alles installiert sein, falls du es so ausgeführt hast.
Manch mal zickt er auch, wenn das Terminalfenster zu klein ist (gut möglich, wenn deine VM mit geringer Auflösung läuft), kannst es mal vergrößern und dann probieren.
Ohne genaue Fehlerangabe ist es halt ein Raten ;)

Aber der Tipp mit der config.gz ist gut. Ich probiere das mal aus, kompiliere damit den Kernel und mache dann mal ein neues Modul mit dem 'make CONFIG_PPP_ASYNC=m'.

mach das, vergiss aber vorher nicht das Verzeichnis zu reinigen, das machst du mit
Code:
make clean #löscht alles zu vor erstellte
make mrproper #löscht auch die alte .config
 
  • Danke
Reaktionen: tiefimwesten
Hi,

das mit 'make menuconfig' hat sich erledigt. Ich habe die 'lib32ncurses5-dev' nachinstalliert, jetzt tut es...
Mit dem anderen probiere ich mal rum. Melde mich dann...

Thx,
Ingo


Der ursprüngliche Beitrag von 20:01 Uhr wurde um 20:27 Uhr ergänzt:

Soderle...

modinfo gibt '3.0.31-g4f6d371 SMP preempt mod_unload ARMv7' raus. Ist ja doch ein wenig mehr als die 'uname -r' -Ausgage. Ist das relevant?

Die 'config.gz' finde ich nirgendwo auf dem Gerät. Also doch mit 'make tuna_defconfig'...

Ingo
 
Das passt doch. :)
Hast du es bei dir auf dem Androiden ausgeführt oder auf dem Gerät, wo es nicht funktioniert?
Wenn nun auch insmod auf dem Gerät geht, dann liegt das Problem nicht am Modul,
 
  • Danke
Reaktionen: tiefimwesten
Ich kann das nur auf meinem Gerät ausprobieren. Da, auf dem das Modul auch schon tut. Aber ich war mir halt auch nicht sicher, ob ich alles richtig gemacht habe. Das interessierte mich auch... :)
Aber ich denke das der 'Mandulli', der das Problem hat, mitliest und es ihm hilft.

Ich danke dir sehr, perpe

Ingo
 
Du hast das schon richtig gemacht, sonst würde es bei dir ja nicht funktionieren. :)
Überprüfen ob dein Modul auch dem anderen Geräte "schmeckt" könnte ihr halt nur auf dem Gerät. Bei deinem kannst du nicht viel herausfinden.

Er soll halt mal versuchen es mit insmod zu laden, wenn das geht, liegt das Problem woanders, also der App oder den Einstellungen dazu.
Wenn insmod nicht geht, obwohl vermagic passt, dann eben auf die Fehlermeldungen achten, auch im dmesg.
 

Ähnliche Themen

M
  • mikesch dauerhaft
Antworten
12
Aufrufe
2.603
BOotnoOB
BOotnoOB
G
  • Gelöschtes Mitglied 410096
Antworten
1
Aufrufe
2.069
Gelöschtes Mitglied 410096
G
stonebe
Antworten
1
Aufrufe
1.620
stonebe
stonebe
Zurück
Oben Unten