为什么编译驱动的过程会产生一个.mod.c的文件?
例如,我自己写一个模拟的字符驱动,比如叫做GlobalCharDev.c文件,然后有一个如下的Makefile(均来自网上)obj-m := GlobalCharDev.o
KDIR := /lib/modules/$(shell uname -r)/build
SRCPWD := $(shell pwd)
all:
make -C $(KDIR) M=$(SRCPWD) modules
我敲入make命令的话,会产生好几个输出:
-rw-rw-r--. 1 a a 149678 Mar3 20:47 GlobalCharDev.ko
-rw-rw-r--. 1 a a 980 Mar3 20:47 GlobalCharDev.mod.c
-rw-rw-r--. 1 a a51392 Mar3 20:47 GlobalCharDev.mod.o
-rw-rw-r--. 1 a a 102104 Mar3 20:47 GlobalCharDev.o
我的问题:
(1) 为什么会产生一恶搞GlobalCharDev.mod.c? 没有发现这个文件有什么必须存在的理由啊
(2) 产生了一个GlobalCharDev.o和一个GlobalCharDev.ko,如果.ko文件是需要产生的目标文件的名字,让insmod GlobalCharDev.ko这样调用。
那为什么还要产生一个GlobalCharDev.o文件呢? 感觉是不是两者只有一个是我要的? 目的是为内核驱动的版本控制。
*.mod.c中是函数的crc,在你内核源码编译的路径中的Module.symvers中,也是同样的值。
相同内核函数,在同样的编译环境中,*.mod.c和Module.symvers中的crc是一致的。 镇水铁牛 发表于 2015-03-05 19:21 static/image/common/back.gif
目的是为内核驱动的版本控制。
*.mod.c中是函数的crc,在你内核源码编译的路径中的Module.symvers中,也是 ...
我想知道这个.mod.c是谁产生的? 如果需要编译和链接一个和内核模块相关的内容,那么我觉得内核直接提供一个可供链接的东西就可以了,完全没有必要再用某种方式去生成源代码然后在让用户去编译啊。 回复 3# sentto2
是make的过程中产生的。可以在make的时候通过make V=1看看究竟发生了什么。
如果没有理解错的话,应该是在modpost阶段,由script/mod/modpost产生的。
页:
[1]