其实内核188空间与用户空间8146是程序执行的两1931种不同的状态,通过系统调用和硬件中断能够完成从用户空间到内核空间
转移。
下面来了解一下Linux内核架构:

从上图中可以看到内核架构是有七个子系统组成的。
1. 系统调用接口模块
2. 进程管理模块
3. 内存管理子系统
4. 体系结构相关的子系统(和CPU密切相关)
5. 虚拟文件系统
6. 网络协议栈子系统
7. 设备驱动程序模块
这七个部分就组成linux内核了
下载linux内核源代码: The Linux Kernel Archives
下面简要介绍linux内核源码下几个重要的目录文件:
arch目录:arch是architecture的缩写,内核所支持的每种cpu体系,在该目录下都有对应的子目录。每个CPU的子目录,有进一步分解为boot,mm,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等
documentation目录:内核的文档(比如一些驱动的使用方法,一些内核的更新记录等等都是放在这个目录里面)
drivers目录:设备驱动程序
include目录:内核所需要的头文件,与平台无关的头文件在include/linux子目录下,与平台相关的头文件则放在相应的子目录中
fs目录:存放各种文件系统的实现代码,每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统VFS
上面初步了解了linux内核的一些相关的概念之后!下面来体会一下如何把linux内核源码变成可以在开发板上运行的程序!这里就涉及到了内核的配置和编译部分了!

内核配置方法:
下载解压内核源码,在内核源码目录下,有两个命令可以配置内核
1. make config: 基于文本模式的交互式配置
2. make menuconfig: 基于文本模式的菜单型配置(这个配置方法更直观、简单、高效)这个进入菜单后如何配置自己查下资料每个选项的选中的符号所代表的意义,这个操作两次就会了。
这里简要介绍下三个选项所代表的意义:
<*>选择该功能,该功能会被编译进内核,运行在内存中
<M>选中该功能,内核模块,不编译进内核,会将相应的模块编译成.O文件,然后放到相应的目录下存放在硬盘里面,当要用到该功能时,内核会把该功能加载到内存中,不用的时候从内存中删除,这样可以节省内存,提高内存利用率
< >本次编译不选中该功能
内核配置的结果:内核配置通常是在一个已有的配置文件基础上,通过修改得到新的配置文件,linux内核提供了一系列可供参考的内核配置文件,位于Arch/$cpu/configs
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70033185/viewspace-2978166/ ,如需转载,请注明出处,否则将追究法律责任。