通过编写驱动,从应用层,内核层,再到底层硬件之间的关系。明白内核驱动的意义。现在开始才是重头戏,前面的都是铺垫。     

  正式编写驱动前,要先了解linux内核代码的组成。linux主要是由五个子系统组成:进程调度,内存管理,文件系统,网络接口以及进程间通信。linux源代码用来实现这些功能,linux源码包在source_code目录下的linux-3.5-20131028.tgz,将其解压,进入目录下,在下面是linux源码截图:

  

centos7内核裁剪实验原理 什么是linux内核裁剪_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 。

 

centos7内核裁剪实验原理 什么是linux内核裁剪_内核配置_02

 执行上面一条命令后,会生成tags的文件。使用vim 任意打开一个文件。在命令模式下 输入 ta + 要查找的函数。

下面是使用内核裁剪的步骤:

  首先是编译内核:

   (1): 先把原先编译的删除

   

centos7内核裁剪实验原理 什么是linux内核裁剪_linux内核_03

   (2) : 继续删除配置文件

    

centos7内核裁剪实验原理 什么是linux内核裁剪_centos7内核裁剪实验原理_04

           (3) :将平台的配置文件拷贝到源码目录下的 .config  ,  .config文件是在进行内核配置的时候,经过配置后生成的内核编译参考文件。

   原本是要执行  cp arch/arm/configs/exynos4_defconfig .config

   因为友善之臂在源码目录下提供了他们更改过的,这时候我们就用这个

  

centos7内核裁剪实验原理 什么是linux内核裁剪_内核配置_05

      (4):编译

  

centos7内核裁剪实验原理 什么是linux内核裁剪_centos7内核裁剪实验原理_06

  经过漫长的等待,linux内核镜像就会出现在arch/arm/boot/ 目录下,其中Image是就是linux内核镜像,zImage是压缩过的linux内核镜像。

现在编译的是没有裁剪过得内核,使用 make menuconfig 就可以通过图形界面来裁剪内核。把不需要的模块前面的*去掉,就能实现内核的裁剪。相当的方便。

  

centos7内核裁剪实验原理 什么是linux内核裁剪_centos7内核裁剪实验原理_07

  选择保存退出后 再次执行 make 就能生成编译过后的镜像文件了。

centos7内核裁剪实验原理 什么是linux内核裁剪_linux_08

Linux 内核源码树的每个目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个 Kconfig分别描述了所属目录源文档相关的内核配置菜单。在执行内核配置make menuconfig时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文档中。在内核编译时,主Makefile调用这 个.config,就知道了用户的选择。这个内容说明了,Kconfig就是对应着内核的每级配置菜单。