在做驱动时,往往想编译成模块,让后加载来使用,这样灵活性较高,无需重新编译内核。
然后在使用供应商提供的内核时,往往无法编译成内核。也就是说把宏设置为y,编译进内核没有问题,但是设置成m编译成模块却不行。检查很多地方都不行,实际上这个问题很简单,可就这个简单的问题,搞了我一天,真心伤啊,这里做个记录做谨记。
解决的办法很简单,看看在执行内核make的时候是否添加了modules参数,如下面的形式:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi-
如果不能编译,是不是发现没有modules这个参数呢。添加上问题解决。
Linux有问必答:如何找出Linux中内置模块的信息:http://www.linuxdiyf.com/linux/15406.html
我的第一个内核模块和makefile文件编写:http://www.linuxdiyf.com/linux/14210.html
Linux 4.0+内核对硬件交换模块的支持(HW Switch Offload):http://www.linuxdiyf.com/linux/12216.html
Ubuntu下编译的第一个内核模块:http://www.linuxdiyf.com/linux/8331.html
modprobe、insmod内核模块区别:http://www.linuxdiyf.com/linux/13957.html