makefile杂谈

makefile杂谈,第1张

在看驱动代码的时候,会涉及驱动本身代码,也会涉及总线相关代码。这里只讨论一下,驱动代码如何读好。

拿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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12284596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存