总算有点感觉了,上一小章讲的完全不知道什么鬼啊
这一小章讲的是linux内核源代码的目录结构
- arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips等。在arch目录下,存放了各个平台以及各个平台
的芯片对linux内核进程调度,内存管理、中断等的支持,以及每个具体的Soc和电路板的板级支持代码 - block:块设备驱动程序I/O调度
- crypto:常用的加密和散列算法
- documentation:内核各部分的通用解释和注释,额,我看过里面关于drm那一块的解释。排版不好就算了,关键有些函数还没有,内容也不全。也就是能看看
- drivers:设备驱动,每个驱动都占用一个目录,如char、block、net等。估计是平时最常用的了
- fs:所支持的各种文件系统,如EXT、FAT、NTFS、JFFS2等
- include:头文件,与系统相关的头文件放置在include/linux子目录下。里面也有很多具体设备的头文件,比如drm等
- init:内核初始化代码。start_kernel()就位于init/main.c中
- ipc:进程间通信的代码
- kernel:内核最核心的部分,包括进程调度、定时器等。这一块改过cpu温度警报的代码好像就是这里面的
- lib:库文件代码,但是没有涉及过,以后涉及了注意下
- mm:内存管理代码
- net:网络管理代码,实现各种常见的网络协议
- scripts:用于配置内核的脚本文件,menuconfig啊应该都是从这里面执行脚本配置的
- sound:ALSA、OSS音频设备的驱动核心代码和常用设备驱动。奇怪为什么不在drivers目录下呢
- usr:实现用于打包和压缩的cpio等
Linux内核的组成部分
1:进程调度
睡眠分为可中断睡眠和不可中断睡眠
linux内核中,使用task_struct结构体来描述进程。该结构体中包含描述该进程内存资源、文件系统资源、文件资源、tty资源、信号处理等的指针
2:内存管理
内存管理作用是控制多个进程安全地共享主内存区域。当cpu提供内存管理单元(MMU)时,Linux内存管理对于每个进程完全从虚拟内存到物理内存的转换
我发现在arm64中并没有Kernel Features ->Memory split
书上说可以调整内核空间和用户空间的具体界限用的
3:虚拟文件系统
Linux虚拟文件系统隐藏了各种硬件的具体细节,为所有设备提供了统一的接口。它为上层提供了统一的read 和write接口,并调用具体底层文件系统或者设备驱动中实现的file operation结构体的成员函数
4:网络接口
5:进程间通信
主要包括信号量、共享内存、消息队列、管道、unix域套接字等
具体地还有dbus,之前分析mate-desktop的源代码的时候发现他是基于dbus通信的
6:linux只能通过系统调用或硬件中断完成从用户空间到内核空间的控制转移
7:linux内核编译
这一块主要是内核menuconfig的配置和Kconfig文件等的内容
报错怎么加新驱动的配置文件等
8:Linux内核的引导
对于arm来说,一般SoC内嵌了bootrom,上电时bootrom运行,对于CPU0,bootrom会去引导bootloader,而其他cpu则判断自己不是CPU0,进入WFI状态等待CPU0来
中断唤醒。