-
fs 此目录下包括了大量的文件系统的源代码,其中在嵌入式开发中要使用的包括:devfs、cramfs、ext4、jffs2、romfs、yaffs、vfat、nfs、proc 等。
文件系统是 Linux 中非常重要的子系统,这里实现了许多重要的系统调用,比如 exec.c 文件中实现了execve 系统调用;用于文件访问的系统调用在 open.c、read_write.c 等文件中定义,select.c 实现了 select 和poll 系统调用,pipe.c 和 fifo.c 实现了管道和命名管道, mkdir、rmdir、rename、link、symlink、mknod 等。
系统调用在 namei.c 中实现。
文件系统的挂装和卸载和用于临时根文件系统的 initrd 在 super.c 中实现。Devices.c 中实现了字符设备和块设备驱动程序的注册函数;
file.c、inode.c 实现了管理文件和索引节点内部数据结构的组织。
Ioctl.c 实现 ioctl 系统调用。*
-
include 这里是内核的所有头文件存放的地方,其中的 linux 目录是头文件最多的地方,也是驱动程序经常要包含的目录。
-
initlinux 的 main.c 程序,通过这个比较简单的程序,我们可以理解 LINUX 的启动流程。
-
ipc 进程间通信的原语实现,包括信号量、共享内存。
-
kernel 这个目录下存放的是除网络、文件系统、内存管理之外的所有其他基础设施,其中至少包括进程调度 sched.c,进程建立 fork.c,定时器的管理 timer.c,中断处理,信号处理等。
-
lib 包括一些通用支持函数,类似于标准 C 的库函数。其中包括了最重要的 vsprintf 函数的实现,它是 printk 和 sprintf 函数的核心。还有将字符串转换为长整形数的 simple_atol 函数。
-
mm 这个目录包含实现内存管理的代码,包括所有与内存管理相关的数据结构,其中我们在驱动中需要使用的 kmalloc 和 kfree 函数在 slab.c 中实现,mmap 定义在 mmap.c 中的 do_mmap_pgoff 函数。将文件映射到内存的实现在 filemap.c 中,mprotect 在 mprotect.c,remap 在 remap.c 中实现;vmscan.c 中实现了kswapd 内核线程,它用于释放未使用和老化的页面到交换空间,这个文件对系统的性能起着关键的影响。
-
net 这个目录包含了套接字抽象和网络协议的实现,每一种协议都建立了一个目录,但是其中的 core、bridge、ethernet、sunrpc、khttpd 不是网络协议,我们使用最多的是 ipv4、ipv6、802、ipx 等。其中我们经常会用到的目录有:
-
net/core 目录中实现了通用的网络功能:设备处理、防火墙、组播、别名等。
-
net/ethernet 和 net/bridge 实现特定的底层功能:以太网相关的辅助函数以及网桥功能。
-
net/sunrpc 中提供了支持 NFS 服务器的函数。
-
samples 一些内核编程的范例。
-
script 这个目录存放许多脚本,主要用于配置内核。
-
sound 音频设备的驱动目录。
-
tools 工具文件夹。
-
usrcpio 命令的实现。
主要文件如下:
-
.config 内核里默认的隐藏配置文件,需要用 ls -a 查看。
-
config_uptech 裁剪好的配置文件,如果.config 损坏,可以将本文件拷贝成.config。
-
arch/arm64/configs/defconfig 默认官方 imx8 的配置,直接 make defconfig 或者拷贝到.config。
-
Makefile 编译时需要的主文件,各子目录也有类似的文件。
README 内核使用说明。
-
arch/arm64/boot/dts/freescale/fsl-imx8mm-evk.dts 设备树文件,是对 imx8mm 所有功能的配置,比
如 gpio、i2c 总线,串口等等。
-
arch/arm64/boot/dts/freescale/fsl-imx8mm-evk-rm67191.dts 设备树 mipi 显示配置文件。
-
arch/arm64/boot/Image 内核编译完生成的文件,主要用于系统烧写。
-
arch/arm64/boot/dts/freescale/fsl-imx8mm-evk-rm67191.dtb 内核设备树编译完生成的文件,主要用于系统烧写。