拿I2C 代码举例:
obj-$(CONFIG_I2C_BOARDINFO) += i2c-boardinfo.o
obj-$(CONFIG_I2C) += i2c-core.o
i2c-core-objs := i2c-core-base.o i2c-core-smbus.o
i2c-core-$(CONFIG_ACPI) += i2c-core-acpi.o
i2c-core-$(CONFIG_I2C_SLAVE) += i2c-core-slave.o
i2c-core-$(CONFIG_OF) += i2c-core-of.o
obj-y += algos/ busses/ muxes/
ccflags-$(CONFIG_I2C_DEBUG_CORE) := -DDEBUG
1 Makefile里的o文件就是要去执行的文件,执行的顺序就是从头开始的。一般重要的文件,依赖性的文件,先执行的文件,放在最前面。
2 obj-xxx。根据CONFIG_,xxx可能为y,也可能为m。
xxx为y代表该文件最终会链接到可执行文件中执行。
xxx为m代表该文件会编成一个ko文件。注意该ko文件是不会链接到可执行文件中去,想要执行它,要么 modprobe要么insmod。
3 观察一下目录,你会发现是没有i2c-core.c这个文件的。正者厅但是最终会生成i2c-core.o文件,它是怎么来的呢,看下面i2c-core-objs这个,它表示i2c-core.o这个文件必须是由i2c-core-base.o i2c-core-smbus.o组合而来的,缺一不可,从“:=”就可以看出来这个约束力。而i2c-core-acpi.o这个是 “+=”,表示可有可举隐无,若config了y,再添加进i2c-core.o。
4 本层目录的Makefile,也指定了下一层所需目录。通常下一层目录会调用到当前目录层的代码。怎么说呢,就是当前的代码是核心的代码,而busses下的一些接口会调用到当前目录里的接口。
5 ccflags 表示编译的时候需要加的选项嫌早,如开启debug宏,然后就可以使用dev_dbg了。
来自https://mp.weixin.qq.com/s/2K2CKPTwoFwO0JEeq-0yCQ
看看则芦你是否编译进内核了把你的makefile板书出来
有.o 而没有.ko
估计是你把驱动编译进内核了
obj-m += $(KO_NAME).o //m是编译成坦卖module
obj-y += $(KO_NAME).o //y是让盯逗编译进 kernel 只可以看到.o 不会生成ko
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)