一、内核简介
1、linux系统分为用户空间与内核空间,用户空间包括应用程序和C库,内核空间包括系统调用接口(sci)、狭义内核、体系结构相关内核代码( Architecture-Dependent Kernel Code)
2、划分为用户空间和内核空间的原因是:CPU有不同的工作模式,linux利用这个特性,使操作系统本身得到保护;;应用程序运行在用户模式。
3、通过系统调用和硬件中断可以完成从用户空间到内核空间的转换
3、内核的构成:系统调用接口(SCI)、进程管理(PM)、内存管理(MM)、虚拟文件系统(VFS)、网络协议栈(Network Stark)、设备驱动(DD)、体系结构相关代码(Arch)
二、内核源代码结构
1、目录结构
arch 内核所支持的CPU体系在该目录下都有对应的子目录
documentation 内核文档 :主要是阅读,功能介绍等
drivers 设备驱动程序
include 头文件;与平台无关的头文件放在include/linux子目录下,与平台相关的代码则放在相应的子目录
fs 文件系统的实现代码
net 网络协议的实现代码
三、linux内核的配置与编译
1、安装到开发板的三个文件bootloader、内核映像文件(2M左右)、文件系统的映像
2、内核映像文件的产生:配置、编译、安装、清理
3、配置: make menuconfig(菜单)
常用配置菜单项:处理器类型;网络协议支持;设备驱动;文件系统;
4、配置结果文件放在内核文件下的隐藏文件.config文件。。。。内核配置结果的参考文件可以去arch/arm/configs目录下获取
5、内核的编译 :分为编译内核;编译内核模块;打包,制作ramdisk
6、编译内核:make bzImage(注意大小写),编译好的内核位于arch/<CPU>/boot/目录下
7、①编译内核模块: make modules ②把散落的内核模块集中移动到/lib/modules: make modules_install
8、打包,制作init ramdisk: mkinitrd 打包的名字-版本 打包的目录
9、安装内核:把编译好的内核与ramdisk复制到/boot/目录下面
10、清理:配置中产生/config文件 编译中产生了.o中间文件 :make clean //make distclean
四、内核模块的开发
1、内核模块特点:不编译进bzImage 内核运行期间动态安装和卸载