前提

内核是一个大文件,里面有很多的驱动,内核中大部分都是使用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驱动中有这些文件
内核架构---Makefile、Kconfig、.config文件分析_vim
我们看一下pcmcia目录下的Makefile文件
内核架构---Makefile、Kconfig、.config文件分析_c++_02
再看一下pcmcia目录下的Kconfig文件
内核架构---Makefile、Kconfig、.config文件分析_vim_03
makefile中选择编译了三个文件:

obj-$(CONFIG_SYNCLINK_CS) += synclink_cs.o
obj-$(CONFIG_CARDMAN_4000) += cm4000_cs.o
obj-$(CONFIG_CARDMAN_4040) += cm4040_cs.o

我们在Kconfig目录下面都能找到
内核架构---Makefile、Kconfig、.config文件分析_linux_04
内核架构---Makefile、Kconfig、.config文件分析_vim_05
内核架构---Makefile、Kconfig、.config文件分析_c++_06
再到pcmcia目录的上层目录中
内核架构---Makefile、Kconfig、.config文件分析_编译系统_07
看一下上层目录中的Makefile和Kconfig文件
内核架构---Makefile、Kconfig、.config文件分析_编译系统_08
可以看到图中标黄的部分,调用了pcmcia目录下的makefile
再看Kconfig
内核架构---Makefile、Kconfig、.config文件分析_其他_09
一样也调用了pcmcia目录下的Kconfig文件。
就这样一层调一层,一直到顶层源码的makefile


2021/10/12 未更完,先更这么多。