前提
内核是一个大文件,里面有很多的驱动,内核中大部分都是使用DTS和driver机制:即device和driver分开写的,通过platform总线链接在一起。device这里就不过多描述,他主要就是一些设备的资源信息。
这篇文章我们主要看driver端,也就是驱动端的架构。
具体结构
这里我们先描述一些基础知识:
1、Makefile文件作用,Makefile文件就是一个编译脚本,最大的特点就是方便,一个目录下面有很多的.c文件,假如没有Makefile的话,就得一个个单独编译,多费事啊!给需要编译的文件都写Makefile里面,make一下一键编译多方便哇
2、 Kconfig文件是搭配makefile文件一起使用。Makefile里面编译的模块是从Kconfig中选取出来的
3、 .config文件就是控制和选择那些文件编译或者不编译的。
以上三点总结就是:
Kconfig
每个源码目录下提供选项
.config
源码顶层目录下保存选择结果
Makefile
每个源码目录下根据.config中的内容来告知编译系统如何编译
遍历每个源码目录(或配置指定的源码目录)Makefile
每个目录的Makefile 会根据Kconfig来定制要编译对象
回到顶层目录的Makeifle执行编译
obj -xxx += yyy.o
xxx = m 表示默认编译为模块
xxx = n 表示默认不编译
xxx = y 表示编译进内核
在pcmcia驱动中有这些文件
我们看一下pcmcia目录下的Makefile文件
再看一下pcmcia目录下的Kconfig文件
makefile中选择编译了三个文件:
obj-$(CONFIG_SYNCLINK_CS) += synclink_cs.o
obj-$(CONFIG_CARDMAN_4000) += cm4000_cs.o
obj-$(CONFIG_CARDMAN_4040) += cm4040_cs.o
我们在Kconfig目录下面都能找到
再到pcmcia目录的上层目录中
看一下上层目录中的Makefile和Kconfig文件
可以看到图中标黄的部分,调用了pcmcia目录下的makefile
再看Kconfig
一样也调用了pcmcia目录下的Kconfig文件。
就这样一层调一层,一直到顶层源码的makefile
2021/10/12 未更完,先更这么多。