参考文章:
Linux操作系统原理与应用实验 实验三 实验四 问题总结_0jiaohosu的博客-CSDN博客_passing arguement4of
Linux内核模块开发"模块:X86/模块:跳过无效的重定位目标,现有值是类型1的非零值" - IT宝库
刚刚补完这学期所有的操作系统实验,在这个过程中因为一些问题反而找到了“Invalid module format”这一难题的解决方法。而且是两个!
首先我用的是unbantu22.04。
这个报错的原因大概就是内核版本它老是自己更新,某次重启之后你的内核版本就跟之前的不一样了,导致你在添加内核模块的时候报错。
方法零:
insmod XX.ko别忘了前面加sudo
sudo insmod XX.ko(√)
方法一(燃眉之急型):
需要你最好知道你之前常用的内核版本,不知道也没关系,因为我们的备选项大概率只有两个。
重启你的虚拟机(图形界面或者输命令都可以),然后这个时候按住shift键
会出现以下界面(一闪而过),手别松开,直到出现GRUB界面
一般情况下你会成功进入GRUB界面
选择第二个选项,回车进入
选择你之前常用的内核版本启动即可(注意别选recovery mode)。一般就是比较旧的那个。
成功开机后,命令行输入uname -r,查看是不是成功切换了内核版本,这种方法不是一劳永逸的,因为他开机会默认较新的内核版本(应该能改,但是我不会)。接下来再sudo insmod应该就ok了
方法二(一劳永逸型):
(这是舍友说的方法,很牛逼。)
重启你的虚拟机,什么也不用按
打开终端,输入下面四行命令
sudo apt update && sudo apt upgrade
sudo apt remove --purge linux-headers-*
sudo apt autoremove && sudo apt autoclean
sudo apt install linux-headers-generic
回车执行,该yes的就yes,执行完毕后再次sudo insmod就可以成功插入了!
以上。