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í:
- 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.) - 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