GNU/Linux >> Znalost Linux >  >> Linux

Nesouhlasí s verzí symbolu symbol_name po insmod

Musíte sestavit svůj modul jádra na stejné verzi jádra, které se chystáte spustit. Pokud tedy máte zdrojové kódy jádra 4.3, které jste si stáhli, musíte zkompilovat to verzi jádra a nabootujte s tímto spuštěným, než se pokusíte načíst vaše jádro.

Pak máte dvě řešení:

  1. Stáhněte si zdroje jádra pro jádro, které aktuálně používáte (můžete je nainstalovat s zypper install kernel-source na SLES nebo ekvivalentní příkaz na jiných distribucích.)
  2. Zkompilujte a nainstalujte jádro 4.3 do operačního systému. Pokud s tím potřebujete pomoc, položte samostatnou otázku (a pravděpodobně patří superuživateli, který sem nepatří). Všimněte si, že pokud jsou jádro a glibc těsně propojeny, je možné, že nebudete moci spustit nové jádro, pokud máte velmi starou knihovnu C.

make -C /lib/modules/$(uname -r)/build M=$PWD modules,"$(uname -r)" ukazuje, že kompilujete s verzí jádra, kterou právě používáte, takže byste měli být schopni insmod modul v aktuálním jádře, pokud jste nezměnili hlavičky.

Z vašeho textu "Jen pro kontrolu jsem zkopíroval několik souborů z adresářů jádra do adresáře mého projektu. Provedl jsem v něm změny a vložil do něj několik dalších kódů."

Pokud jste provedli úpravy zdrojového kódu jádra, možná budete muset překompilovat nové jádro a zavést systém s novým aktualizovaným jádrem. Pak byste měli být schopni zkompilovat modul jádra s upravenými hlavičkami.


Problém je v tom, že váš modul jádra používá exportované symboly jiných modulů jádra, což se v tomto případě jeví jako exportované metody nebo symboly ze zásobníku linux InfiniBand RDMA.

Chcete-li vyřešit problémy s verzí symbolu, zkopírujte Module.symvers soubor z

/usr/src/ofa-kernel

adresář a vložte jej do aktuálního pracovního adresáře. Poté znovu vytvoříte své moduly. Nyní insmod by mělo fungovat naprosto dobře.

POZNÁMKA:Soubor Module.symvers obsahuje informace o všech exportovaných symbolech kernelmodule. Takže jeho zkopírováním do vašeho pracovního adresáře pomáháte kbuild dozvědět se více o použitých exportovaných symbolech.

A pokud nenajdete Module.symvers nebo je prázdný, vytvořte jej pomocí create_Module.symvers.sh


Linux
  1. Linux – Jak správně znovu načíst modul jádra?

  2. Pochopení efektivní verze jádra Ksplice

  3. insmod:příkaz nenalezen

  1. Jak mohu použít ioctl() k manipulaci s mým modulem jádra?

  2. Jak kódovat modul jádra Linuxu?

  3. Je možné vyvinout modul linuxového jádra v CLion?

  1. copy_to_user nedefinováno v linuxovém jádře verze 4.12.8

  2. Při bootování přeskočte modul jádra

  3. Co je to poskvrněné jádro v Linuxu?