通过编写驱动,从应用层,内核层,再到底层硬件之间的关系。明白内核驱动的意义。现在开始才是重头戏,前面的都是铺垫。
正式编写驱动前,要先了解linux内核代码的组成。linux主要是由五个子系统组成:进程调度,内存管理,文件系统,网络接口以及进程间通信。linux源代码用来实现这些功能,linux源码包在source_code目录下的linux-3.5-20131028.tgz,将其解压,进入目录下,在下面是linux源码截图:
这里面最重要的是Makefile,这个文件中包含了许多linux内核配置的信息,我们Linux内核要编译的平台,交叉编译器的选择,编译链接Linux内核的参数,等等。
arch目录中包含于体系结构有关的子目录和文件,arm的相关平台信息在arch/arm目录下。
scripts目录中存放着对核心配置的脚本文件。
crypto目录中包含着常见的加密算法。
drivers目录包含各种各样的驱动,包括字符型,快型,网络设备驱动程序。
fs目录中包括了linux系统所支持的文件系统类型,比如ext4 nfs
init目录中存放着与linux内核相关的启动代码。
kernel目录中包含许多linux进程调度子系统相关的源代码。
lib目录存放linux内核所用的库文件。
mm目录存放linux内存管理的源代码。
net目录存放有关网络协议的源代码。
linux源码数量庞大,需要一个工具来管理,方便我们来查找,这个工具就是ctags 。
执行上面一条命令后,会生成tags的文件。使用vim 任意打开一个文件。在命令模式下 输入 ta + 要查找的函数。
下面是使用内核裁剪的步骤:
首先是编译内核:
(1): 先把原先编译的删除
(2) : 继续删除配置文件
(3) :将平台的配置文件拷贝到源码目录下的 .config , .config文件是在进行内核配置的时候,经过配置后生成的内核编译参考文件。
原本是要执行 cp arch/arm/configs/exynos4_defconfig .config
因为友善之臂在源码目录下提供了他们更改过的,这时候我们就用这个
(4):编译
经过漫长的等待,linux内核镜像就会出现在arch/arm/boot/ 目录下,其中Image是就是linux内核镜像,zImage是压缩过的linux内核镜像。
现在编译的是没有裁剪过得内核,使用 make menuconfig 就可以通过图形界面来裁剪内核。把不需要的模块前面的*去掉,就能实现内核的裁剪。相当的方便。
选择保存退出后 再次执行 make 就能生成编译过后的镜像文件了。
Linux 内核源码树的每个目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个 Kconfig分别描述了所属目录源文档相关的内核配置菜单。在执行内核配置make menuconfig时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文档中。在内核编译时,主Makefile调用这 个.config,就知道了用户的选择。这个内容说明了,Kconfig就是对应着内核的每级配置菜单。