以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
1、内核代码基本分为3块
(1)arch目录
本目录下全是cpu架构有关的代码。本文说的就是这个目录中的内容。
(2)drivers目录本目录下全是硬件的驱动。
(3)其他内容这些代码都和硬件无关,因此系统移植和驱动开发的时候这些代码几乎不用关注。
2、与架构相关的常用目录名及含义
注意上面截图是ARM架的,因为我们开发板采用ARM芯片。
(1)/arch/arm/mach-xxx
mach就是machine architecture(机器架构)。
/arch/arm目录下的一个mach-xxx目录就表示一类machine,这类machine都使用xxx这个cpu来做主芯片,比如/arch/arm/mach-s5pv210目录里面,都是一些用s5pv210作为主芯片的开发板。
而mach-xx目录里面的一个mach-yy.c文件,则定义了一个开发板(一个开发板对应一个机器码),这个是可以被扩展的。比如/arch/arm/mach-s5pv210目录中,有mach-smdkc110.c、mach-smdkv210.c、mach-x210.c等文件。
(2)/arch/arm/plat-xxxplat是platform的缩写,含义是平台。
plat可以理解为SoC,这个plat目录下都是SoC里面的一些硬件(内部外设)相关的代码。
在内核中把SoC内部外设相关的硬件操作代码就叫做平台设备驱动。
(3)/arch/arm/include这个include目录中的所有代码都是架构相关的头文件。
3、补充说明
(1)内核中的文件结构很庞大与凌乱,不同版本的内核可能一个文件存放的位置是不同的,给初学者带来一定的困扰。
(2)头文件目录include有好几个,使用时要注意具体是哪个。
//内核通用头文件 x210_kernel/include //架构相关的头文件 x210_kernel/arch/arm/include x210_kernel/arch/arm/include/asm x210_kernel/arch/arm/include/asm/mach x210_kernel/arch/arm/mach-s5pv210/include/mach x210_kernel/arch/arm/plat-s5p/include/plat
(3)内核中包含头文件时有一些格式。
#include <linux/kernel.h> //x210_kernel/include/linux/kernel.h #include <asm/mach/arch.h>//x210_kernel/arch/arm/include/asm/mach/arch.h #include <asm/setup.h> //x210_kernel/arch/arm/include/asm/setup.h #include <plat/s5pv210.h> //x210_kernel/arch/arm/plat-s5p/include/plat/s5pv210.h
(4)有些同名的头文件是有包含关系的,有时候我们需要包含某个头文件时可能并不是直接包含它,而是包含一个包含着它的头文件。