[IMX][UBoot] 13.Linux 内核源码目录分析
目录
1.架构 - /arch
2.块设备 - /block
3.加密文件 - /crypto
4.帮助文档 - /Documentation
5.驱动 - /drivers
6.固件 - /firmware
7.文件系统 - /fs
8.头文件 - /include
9.初始化文件 - /init
10.进程间通信 - /ipc
11.内核源码 - /kernel
12.库文件 - /lib
13.内存管理 - /mm
14.网络 - /net
15.示例 - /samples
16.脚本 - /scripts
17.安全 - /security
18.音频驱动 - /sound
19.工具 - /tools
20.initramfs - /usr
21.虚拟机 - /virt
22.帮助信息 - README
23.配置文件 - .config
24.编译配置文件 - Kbuild
25.图形化配置项 - Kconfig
26.Makefile
Linux 内核的官网为:The Linux Kernel Archives
NXP 基于标准的 Linux 内核进行修改,以适配自己的 SoC,并将其提供给开发者
在内核源码的根目录中新建编译脚本 mx6ull_alientek_emmc.sh,其内容如下:
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j6
-
#!/bin/sh 指定脚本解释器的路径;
-
ARCH=arm 指定目标架构为 ARM;
-
CROSS_COMPILE=arm-linux-gnueabihf- 指定所使用的交叉编译器;
-
distclean 清理工程;
-
imx_v7_defconfig 指定配置文件;
-
menuconfig 打开图形配置界面;
-
all -j6 编译所有目标,使用 6 个线程进行编译;
执行脚本编译 Linux 内核:
./mx6ull_alientek_emmc.sh
编译时会弹出图形配置界面,暂时不进行配置,按两次 ESC 键退出,等待编译完成
编译完成后会在 /arch/arm/boot 目录下生成 zImage 文件,在 /arch/arm/boot/dts 目录下生成设备树文件
部分文件仅在编译后生成,此时 Linux 内核的源码目录如下图所示:
其中重要的目录及文件的含义如下:
1.架构 - /arch
/arch 目录中存放架构相关的文件或目录,如 arm、x86 等,每个架构均有一个对应的目录:
ARM 架构对应的目录为 /arch/arm,其中包含了各个平台的目录、库文件目录、头文件目录等:
各个平台的配置文件保存在 /arch/arm/configs 目录中 (配置文件的命名格式为 xxx_defconfig),其中 I.MX6U-ALPHA 开发板对应的配置文件为 imx_v7_defconfig:
/arch/arm/boot/dts 目录中存放各平台的设备树文件,其中 I.MX6U-ALPHA 开发板对应的设备树文件如下图所示:
Linux 内核编译后生成的 zImage 文件位于 /arch/arm/boot 目录中:
/arch/arm/mach-xxx 目录为对应平台的驱动和初始化文件,例如 /mach-imx 目录中存放着 IMX 系列 SoC 的驱动和初始化文件:
2.块设备 - /block
/block 目录中存放块设备相关的文件,如 SD 卡、EMMC、NAND、硬盘等:
3.加密文件 - /crypto
/crypto 目录中存放加密文件,如 CRC、MD4、HASH 等:
4.帮助文档 - /Documentation
/Documentation 目录中存放 Linux 的帮助文档,如果需要了解 Linux 的某个驱动或者模块,可以在该目录中查看是否存在对应的文档,文档中包含了该模块或驱动的帮助信息:
5.驱动 - /drivers
/drivers 目录中存放驱动相关的文件,每个驱动均有一个对应的子目录,例如 /drivers/i2c 中为 I2C 相关的驱动文件:
6.固件 - /firmware
/firmware 目录中存放各个平台的固件:
7.文件系统 - /fs
/fs 目录中存放文件系统相关的文件,如 EXT2、FAT32 等:
8.头文件 - /include
/include 目录中存放头文件:
9.初始化文件 - /init
/init 目录中存放 Linux 的初始化文件:
10.进程间通信 - /ipc
/ipc 目录中存放进程间通信的相关文件:
11.内核源码 - /kernel
/kernel 目录中存放 Linux 内核的源码文件:
12.库文件 - /lib
/lib 目录中存放公用的库文件:
13.内存管理 - /mm
/mm 目录中存放内存管理相关的文件:
14.网络 - /net
/net 目录中存放网络相关的文件:
15.示例 - /samples
/samples 目录中存放示例代码:
16.脚本 - /scripts
/scripts 目录中存放编译时使用的脚本文件:
17.安全 - /security
/security 目录中存放安全相关的文件:
18.音频驱动 - /sound
/sound 目录中存放音频驱动 (音频驱动并未放在 /drivers 目录中):
19.工具 - /tools
/tools 目录存放编译时使用的工具:
20.initramfs - /usr
/usr 目录中存放 initramfs 相关的文件:
21.虚拟机 - /virt
/virt 目录存放虚拟机相关的文件:
22.帮助信息 - README
README 文件中包含了如何编译 Linux 内核、Linux 内核的目录结构等帮助信息:
23.配置文件 - .config
配置文件 .config 保存 Linux 内核的配置信息,编译 Linux 时会读取该文件中的配置项,并依据这些配置项编译对应的模块或功能:
24.编译配置文件 - Kbuild
Kbuild 文件中包含了 Linux 内核的编译配置项:
25.图形化配置项 - Kconfig
Kconfig 文件中包含了 Linux 编译时的图形化配置项:
26.Makefile
Linux 内核的 Makefile 文件: