一般来说出现MODPOST 0情况的时候基本是 Makefile的格式问题,例如声明变量的时候没有Tab 又或者对应的接口变量没有设置好 obj-m 之类的。


然后就是编译这种不同版本的模块的时候大可不必上kerne.org的官网上下kernel源码 若是centos redhat 或者 fedora 可以直接使用yum install kernel-devel

如果需要旧版可能需要一些特别参数。

以下是一种可能操作

sudo yum download kernel-devel-[uname -r:版本号]

rpm -i --force:强制,无视可能存在的高版本或更新低版本的情况 kernel-devel-[uname -r].rpm


这样可以快速获得用于编译linux不同版本kernel的模块

附上标准的Makefile。表示已经倒背如流

ifneq【此处的空格没有会发生错误】($(KERNELRELEASE),)

【tab 缩进】obj-m:=xxx.o

else

【tab 缩进】KDIR:=/lib/modules/$(uname -r)/build

【tab 缩进】PWD:=$(shell pwd)

default:

【tab 缩进】make -C $(KDIR) M=$(PWD) modules

clean:

【tab 缩进】make -C $(KDIR) M=$(PWD) clean


【】括住的是需要注意的容易造成错误或者MODPOST 0 的地方。MODPOST 0如果不是编译发生错误 就应该是目标不明确导致的,就是obj-m没声明好,或者obj-m找不到依赖文件之类的 吧?

Logo

更多推荐