Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

opensuse 11.3:nur ein modul ändern!

Alles rund um die Systemverwaltung, die Administration und Konfiguration Eures Linuxsystems

Moderator: Moderatoren

Antworten
bassman56
Newbie
Newbie
Beiträge: 4
Registriert: 1. Aug 2010, 17:19

opensuse 11.3:nur ein modul ändern!

Beitrag von bassman56 » 1. Aug 2010, 17:34

habe gerade opensuse 11.3 installiert, mit pae-kernel.
Jetzt möchte ich eben nur 1 kleines module patchen und ersetzen. dazu probiere ich erst mal ob ich es ohne Änderungen nachbauen kann.

also: kernel-sourcen installiert, make mrproper, make cloneconfig, make prepare, make module_prepare.

dann das einzelne modul machen:
make drivers/media/video/ir-kbd-i2c.ko

Wenn ich aber versuche, das neue modul (noch ohne patches) zu installieren:
insmod drivers/media/video/ir-kbd-i2c.ko

dann gibts eine fehlermeldung:
insmod: error inserting 'drivers/media/video/ir-kbd-i2c.ko': -1 Invalid module format

und in dmesg:
kernel: [18506.295093] ir_kbd_i2c: no symbol version for module_layout

Was mache ich falsch? :???:

Gruß

Werbung:
spoensche
Moderator
Moderator
Beiträge: 7449
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

Re: opensuse 11.3:nur ein modul ändern!

Beitrag von spoensche » 1. Aug 2010, 21:20

bassman56 hat geschrieben: also: kernel-sourcen installiert, make mrproper, make cloneconfig, make prepare, make module_prepare.

dann das einzelne modul machen:
make drivers/media/video/ir-kbd-i2c.ko
Mööp error. ;) Das Paket kernel-syms fehlt noch und du hast dich auch nicht an die Buildstruktur gehalten.
bassman56 hat geschrieben: Wenn ich aber versuche, das neue modul (noch ohne patches) zu installieren:
insmod drivers/media/video/ir-kbd-i2c.ko

dann gibts eine fehlermeldung:
insmod: error inserting 'drivers/media/video/ir-kbd-i2c.ko': -1 Invalid module format

und in dmesg:
kernel: [18506.295093] ir_kbd_i2c: no symbol version for module_layout
Wie oben schon erwähnt, fehlt das Paket kernel-syms etc.

Das make mrproper kannst du weglassen.

Wie folgt solltest du vorgehen:

Code: Alles auswählen

cd /usr/src/linux

patch -Np tralala (Wenn du etwas an dem Modul geändert hast, dann wohl mit einer .patch Datei)

make oldconfig
make scripts && make prepare
make -C /lib/modules/$(uname -r)/build M=$(pwd)
cd pfad/zum/modul
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
Siehe /usr/src/linux/README.SUSE

bassman56
Newbie
Newbie
Beiträge: 4
Registriert: 1. Aug 2010, 17:19

Re: opensuse 11.3:nur ein modul ändern!

Beitrag von bassman56 » 3. Aug 2010, 18:00

kernel-syms war schon da - das kanns nicht sein.

make modules_install möchte ich eigentlich nicht machen, da ich dann das ganze System überbügle.
Ich wollte doch nur ein einziges modul nacharbeiten, das muss doch gehen?

Weitere Forschungen:
make rpm -> macht das ganze kernel-rpm, die zwischenergebnisse stehen dann in /usr/src/packages/BUILD/kernel-2.6.3412pae. dauert auch entsprechend einige zeit

jetzt kommt das was ich nicht verstehe: es kommen zwei unterschiedliche module raus!
-rw-r--r-- 1 root root 164189 Aug 3 01:08 ../packages/BUILD/kernel-2.6.3412pae/drivers/media/video/ir-kbd-i2c.ko --> kann geladen werden!
-rw-r--r-- 1 root root 162061 Aug 3 17:44 ./drivers/media/video/ir-kbd-i2c.ko --> fehler bein insmod!

das heisst:
"make rpm" --> produziert ein etwas anderes Binärmodul als "make drivers/media/video/ir-kbd-i2c.ko", aus dem gleichen source tree.

versteht das einer? wird bei make rpm eine andere target-architektur gemacht?

Rätsel! Wer kann das erklären?

bassman56
Newbie
Newbie
Beiträge: 4
Registriert: 1. Aug 2010, 17:19

Re: opensuse 11.3:nur ein modul ändern!

Beitrag von bassman56 » 3. Aug 2010, 18:15

Nachtrag: objdump -t ... liefert verschiedene symbole nur an dieser stelle:

< 00000140 l O .modinfo 00000023 __mod_srcversion28
< 00000163 l O .modinfo 00000009 __module_depends
< 00000000 l O __versions 00000000 ____versions
---
> 00000140 l O .modinfo 00000023 __mod_srcversion60
> 00000163 l O .modinfo 0000001a __module_depends
> 00000000 l O __versions 00000800 ____versions

Was bedeutet das?

spoensche
Moderator
Moderator
Beiträge: 7449
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

Re: opensuse 11.3:nur ein modul ändern!

Beitrag von spoensche » 3. Aug 2010, 20:19

bassman56 hat geschrieben: make modules_install möchte ich eigentlich nicht machen, da ich dann das ganze System überbügle.
Ich wollte doch nur ein einziges modul nacharbeiten, das muss doch gehen?

[/code]

Mit dem make Aufruf den ich dir an die Hand gegeben habe wird nur das eine Modul installiert.

Weitere Forschungen:
make rpm -> macht das ganze kernel-rpm, die zwischenergebnisse stehen dann in /usr/src/packages/BUILD/kernel-2.6.3412pae. dauert auch entsprechend einige zeit

jetzt kommt das was ich nicht verstehe: es kommen zwei unterschiedliche module raus!
-rw-r--r-- 1 root root 164189 Aug 3 01:08 ../packages/BUILD/kernel-2.6.3412pae/drivers/media/video/ir-kbd-i2c.ko --> kann geladen werden!
-rw-r--r-- 1 root root 162061 Aug 3 17:44 ./drivers/media/video/ir-kbd-i2c.ko --> fehler bein insmod!
bassman56 hat geschrieben: das heisst:
"make rpm" --> produziert ein etwas anderes Binärmodul als
"make drivers/media/video/ir-kbd-i2c.ko", aus dem gleichen source tree.

versteht das einer? wird bei make rpm eine andere target-architektur gemacht?

Rätsel! Wer kann das erklären?
Weil, make drivers/... /.ko die .ko Datei kompilieren soll, was aber zum einen das fertige Modul ist und zum anderen sich nicht an den Buildtree hält, was ich dir schon mitgeteilt habe.

bassman56
Newbie
Newbie
Beiträge: 4
Registriert: 1. Aug 2010, 17:19

Re: opensuse 11.3:nur ein modul ändern!

Beitrag von bassman56 » 4. Aug 2010, 00:29

OK. habs nochmal nach anleitung probiert.
frage:
bei
make -C /lib/modules/$(uname -r)/build M=$(pwd)
wird das geänderte module (auch nach touch xx.c) nicht kompiliert.

muss ich nicht danach noch den module-namen angeben, den ich spezifisch produzieren will, also?

make -C /lib/modules/$(uname -r)/build M=$(pwd) driver/media/video/ir-kbd-i2c.ko

??
merci vielmals!

spoensche
Moderator
Moderator
Beiträge: 7449
Registriert: 30. Okt 2004, 23:53
Wohnort: Siegen

Re: opensuse 11.3:nur ein modul ändern!

Beitrag von spoensche » 5. Aug 2010, 21:57

Nein, $(pwd) startet eine Subshell und führt den Befehl pwd aus, der das aktuelle Arbeitsverzeichnis ausgibt. Du musst in das Verzeichnis des Treibers wechseln und dann make ausführen.

PS:
Verwende bitte die Code Tags wenn du Ausgaben postest.

jengelh
Guru
Guru
Beiträge: 4039
Registriert: 20. Nov 2004, 17:42
Kontaktdaten:

Re: opensuse 11.3:nur ein modul ändern!

Beitrag von jengelh » 19. Aug 2010, 18:09

Du kannst keine einzelnen Module (drivers/media/video/ir-kbd-i2c.ko) bauen, bevor du nicht eine System.map im Buildverzeichnis hast, da sonst nicht die nötigen Symbolmetadaten ins .ko eingebaut werden (was dann letztendlich zu invalid module format / wrong crc / etc. führt). Und System.map wird erfahrungsgemäß erst dann erstellt werden können, wenn sie Symbole aller Module — in ihrer .o-Form — bekannt sind.

Antworten