今天编译自己的第一个内核模块但是出现错误,结果如下:
而我的Makefile 和C文件是这样的:
开始的时候,我以为是Makefile写错了,尤其是“obj-m :=”,这个我改了好几遍,网上的各种写法都用过,比如:
obj-m :=memdev.o #要生成的模块名
memdevmodule-objs:=module #生成这个模块名所需要的目标文件
使用之后编译结果还是错误,找了别人写的被确认正确的Makefile和C文件,同样不能编译成功!到最后没有办法,我把内核重新编译了一下,重新生成vmlinuz,和initramfs文件,这是新生成的文件:
花了接近两个小时,编译好这两个文件之后,连内核都换了,总可以了吧,但是事实是,但是无法生成.ko文件。心情无比悲伤。突然想到有V=1,看详细编译过程:
好吧,终于找到原因了,但是进入内核中ls一下,文件可以找到:
刚开始以为只是自己的虚拟机配置出现问题,在别人那找了一份vmlinuz和initramfs文件,重新启动虚拟机,悲剧的是还是出现问题。好吧,真的是找不到问题了,准备删除这个虚拟机,纯新安装一个。
没有想到第一次编译内核模块就是这种悲惨的经历,同时我也有一个问题,既然自己写的简单模块无法编译,但是官网下载的内核代码又为什么可以编译出bzImage 和modules文件呢?
驱动学习之路还是漫长呀,重新装个虚拟机,再来编译吧!
时间: 2024-11-08 17:06:39