linux内核源码目录结构如下所示:
(1)Kbuild
Kbuild是Kernel build的意思,就是内核编译的意思,这个文件就是linux内核特有的内核编译体系需要用到的文件。
(2)Makefile
这个是linux内核的总Makefile,整个内核工程是用这个Makefile来管理的。
(3)mk
这个文件是九鼎在移植时自己添加的,不是linux内核本身的东西。九鼎添加这个文件的作用是用这个文件来整个管理kernel目录的配置和编译。
(4)arch
arch是architecture的缩写,意思是架构。arch目录下是好多个不同架构的CPU的子目录,例如ARM这种CPU的所有文件都在arch/arm目录下,X86的CPU的所有文件都在arch/x86目录下。
(5)block
英文是块的意思,在linux中block表示块设备(以块(多个字节组成一个整体,类似于扇区)为单位进行访问),例如SD卡、iNand、Nand、硬盘等都是块设备。几乎可以认为块设备就是存储设备。block目录下放的是一些linux存储体系中关于块设备管理的代码。
(6)crypto
英文意思是加密。这个目录下放了一些各种常见的加密算法的C语言代码实现,例如crc32、md5、sha1等。
(7)Documentation
这个目录下放了一些文档。
(8)drivers
驱动目录,里面分门别类地列出了linux内核支持的所有硬件设备的驱动源代码。
(9)firmware
固件。什么叫固件?固件其实就是软件,不过这个软件是固化到IC里面运行的,就像S5PV210里的iROM代码。
(10)fs
fs就是file system,文件系统,里面列出了linux支持的各种文件系统的实现。
(11)include
头文件目录,公共的(各种CPU架构共用的)头文件都在这里。各种CPU架构特有的一些头文件在arch/arm/include目录及其子目录下。
(12)init
init是初始化的意思,这个目录下的代码就是linux内核启动时初始化内核的代码。
(13)ipc
ipc就是inter process communication,进程间通信,里面都是linux支持的IPC的代码实现。
(14)kernel
kernel就是内核,就是linux内核,所以这个文件夹下放的就是内核本身需要的一些代码文件。
(15)lib
lib是库的意思,这里面都是一些公用的有用的库函数,注意这里的库函数和C语言的库函数是不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。例如在内核中要把字符串转成数字用atoi,但是在内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。还比如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。
(16)mm
mm就是memory management,内存管理,linux的内存管理代码都在这里。
(17)net
该目录下是网络相关的代码,例如TCP/IP协议栈等。
(18)scripts
脚本,这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助linux内核的配置和编译。这个目录下的脚本不需要详细的分析,只需要通过外围来重点学会配置和编译linux内核即可。
(19)security
安全相关的代码,不需要去管。
(20)sound
音频处理相关的。
(21)tools
linux中用到的一些有用工具。
(22)usr
目录下是initramfs相关的,和linux内核的启动有关,暂时可以不管。
(23)virt
内核虚拟机相关的,暂时可以不管。
注:与内核移植紧密的目录是arch和drivers,有点相关的是include、block、mm、net、lib等目录。