Linux内核架构及内核裁剪
Linux系统分为内核空间和用户空间;
用户空间主要包括:用户应用程序和基本的库文件
内核空间主要包括:
系统调用接口SCI:系统封装给用户空间的应用函数调用接口
进程管理PM:管理进程调度
虚拟文件系统VFS:针对各种文件系统封装的统一调用接口层
内存管理MM :与CPU无关的内存管理代码,与CPU相关的在ARCH路径下
网络协议栈NS:网口多层协议栈相关代码
设备驱动程序DD:设备驱动程序
CPU相关代码ARCH :
内核源代码目录结构:
arch:内核支持代码各种cpu架构。
block:块驱动程序
crypto:加密压缩CRC加密算法
documention:内核文档
driver:设备驱动程序
fs:各种文件系统实现代码,每个子目录一种文件系统
include:内核需要的头文件
lib:库文件
mm:内存管理与CPU无关
net:网络协议栈
内核裁剪:
1.清除临时文件
make clean 删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
make distclean mrproper删除的文件, 加上编辑备份文件和一些补丁文件。
make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件。
2.分析系统硬件结构和软件需求;得出内核需求模块
3.生成配置文件
make config:基于文本模式,挨个配置选择y/n
make menuconfig:基于菜单模式,复选框都会有默认选项。
make oldconfig:使用已有的配置文件
make xconfig:需要安装图形化系统
得到系统源文件下的config 文件。
4.生成镜像
make iImage :是vmlinux经过objcopy gzip压缩后的文件, objcopy实现由vmlinux的elf文件拷贝成纯二进制数据文件。
make bzImage :bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
如果编译过程中出现宏定义错误,可以进入到相关的报错目录下将宏定义添加到EXTRA_CFLAGS后面。
initrd 是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。一般情况下都在生成 vmlinux 后,再对内核进行压缩成为 zImage,压缩的目录是 kernel/arch/arm/boot。
ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。
制作ramdisk:makeitrd initrd_2.6.29 2.6.29
5.安装
修改/etc/grub.config文件参照现有的系统 添加需要安装的系统ramdisk
将镜像放到/boot/下
重启,即可启动自己制作的系统。
————————————————
版权声明:本文为CSDN博主「弯弯的丝瓜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。