Devi costruire il tuo modulo del kernel sulla stessa versione del kernel che stai per eseguire. Quindi, se hai i sorgenti del kernel 4.3 che hai scaricato, devi compilare quelli versione del kernel e avviare con quella in esecuzione prima di provare a caricare il kernel.
Allora hai due soluzioni:
- Scarica i sorgenti del kernel per il kernel attualmente in esecuzione (puoi installarli con
zypper install kernel-source
su SLES o un comando equivalente su altre distribuzioni.) - Compila e installa il kernel 4.3 nel tuo sistema operativo. Se hai bisogno di aiuto con questo, fai una domanda separata (e probabilmente appartiene al superutente non qui). Nota che se kernel e glibc sono strettamente accoppiati, è possibile che tu non possa eseguire un nuovo kernel se hai una libreria C molto vecchia.
make -C /lib/modules/$(uname -r)/build M=$PWD modules,"$(uname -r)" mostra che stai compilando rispetto alla versione del kernel che stai eseguendo ora, quindi dovresti essere in grado di insmod il modulo nel kernel corrente se non hai cambiato le intestazioni.
Dal tuo testo, "Solo per controllare, ho copiato alcuni file dalle directory del kernel nella directory del mio progetto. Ho apportato modifiche e inserito altro codice."
Se hai apportato modifiche al sorgente del kernel, potrebbe essere necessario ricompilare il nuovo kernel e avviare con il nuovo kernel aggiornato. Quindi dovresti essere in grado di compilare il modulo del kernel con le intestazioni modificate.
Il problema qui è che il modulo del kernel utilizza i simboli esportati di altri moduli del kernel che in questo caso sembrano essere i metodi o i simboli esportati dello stack Linux InfiniBand RDMA.
Per risolvere i problemi relativi alla versione del simbolo, copia il Module.symvers
file dal
/usr/src/ofa-kernel
directory e incollala nella directory di lavoro corrente. Quindi crei di nuovo i tuoi moduli. Ora il insmod
dovrebbe funzionare perfettamente.
NOTA:il file Module.symvers contiene informazioni su tutti i simboli esportati da kernelmodule. Quindi, copiandolo nella tua directory di lavoro, aiuterai kbuild a saperne di più sui simboli esportati usati.
E se non trovi Module.symvers o è vuoto, creane uno usando create_Module.symvers.sh