前言
- Linux集成套件包括多种内核,能够处理各种机器。通过编译内核,选择符合硬件类型的驱动等,可以调整Linux系统,使其更合理地安装到计算机中。
- 重新编译内核以便实现一些新功能,如将Linux系统设置为一个临时路由器。
- 使得全世界内核设计者提供的各种为改进性能而设计的内核得到充分利用。
Linux内核文件组织结构
Linux内核文件说明
- arch:包含了所有和体系结构相关的核心代码,它的每一个子目录都代表一种被支持的体系结构。
- include:包含编译核心所需要的大部分头文件,与平台无关的头文件放在 include/linux子目录中。
- init:包含核心的初始化代码。
- mm:包含所有独立于CPU体系结构的内存管理代码。
- kernel:主要的核心代码,实现大多数Linux系统的内核函数,包括进程调度、系统调用等
- drivers:系统所有的设备驱动程序,每种驱动程序各占用一个子目录。
- 其它:lib放置核心的库代码;net放置核心与网络相关的代码;lpc包含核心的进程间通信的代码;fs包含文件系统代码;scripts包含用于配置核心的脚本文件。
Linux内核的makefile文件
- 源代码树的每个子目录下都有一个makefile文件。
- 在源代码树的根目录下执行make,则调用顶层makefile文件,它定义了随后要输出到其他makefile的变量,以及向子目录中的每个makefile发出make调用。
- Script/makefile.build中定义了makefile向下级子目录递归并编译的规则。
Make命令
内核源代码的获取方式
-
- 原Linux发行版提供的内核源代码文件
-
- 获取最新的稳定版内核源代码
内核官网: http://www.kernel.org/
清华大学镜像:https://mirrors.tuna.Tsinghua.edu.cn/kernel
-
- 保留原本设置:利用patch升级内核源代码
编译内核过程
第1步,预处理
- Linux内核源文件缺省位置:/usr/src/
从Internet下载最新版本到你创建的主目录。
如~wxdh - 清除以前试图建立内核过程遗留下的多余文件。
make mrproper
第2步,配置内核
- make config:手工逐项配置
- make menuconfig:菜单选项配置
- make xconfig: XWindow配置
- 修改配置文件/linux/.config
- 注意,make mrproper命令要删除这个文件,可以从/linux/arch/i386/defconfig拷贝复制一个。
第3步,生成内核
- 1、make dep:生成相关性
例如:如果激活“Set Version Information For All Symbols On Modules”选项,那么它为所建立的模块确定其版本信息。 - 2、make clean:清除一些目录中现有文件,将存储创建的新文件。
- 3、make bzImage:编译内核本身,花费时间长。对于新内核规模小,可以使用make zImage,如果不确定,最好还是使用bzImage。
建立/linux/arch/i386/boot/bzImage
第4步,安装内核
- 有些集成套件使用LILO作为引导装入程序。
- /etc/lilo.conf文件中的“image=”
- su命令超级用户登录,把刚创建的bzImage拷贝到/boot中。
- cp ~wxdh/linux/arch/i386/boot/bzImage /boot/vmLinuz
- 修改lilo.conf文件中“image”行。
- 告诉LILO更新其配置信息:/sbin/lilo
第5步,建立模块
- 配置Linux内核时,可将许多选项配置为模块而不是直接放进内核。
- 每个模块可以分别装入和卸载。
- /linux目录下
make modules:创建在配置过程中要求的模块,但是并不安装。
Make modules_install:将已经完成的模块拷贝到对应该内核版本的/lib/modules/子目录中。
管理多内核
- 不同的情况使用不同的内核,lilo.conf文件:
……
delay=15 #15-second delay
……
image=/boot/vnlinux
label=Linux
……
image=/home/wxdh/bzImage
Label=TestKernel
最后,执行/sbin/lilo
Added Linux * (表示Linux标记为缺省内核)
Added TestKernel(表示添加新内核)
第6步 配置grub引导和测试
- 配置grub引导程序
/boot/grub/grub.cfg
设置默认从新内核镜像启动系统 - 测试
系统重启,测试当前的内核版本
uname -a
总结
构建Linux内核
Linux内核文件组织结构
Linux内核文件说明
Linux内核的makefile文件
Make命令
内核源代码的获取方式
编译内核过程
第1步,预处理
第2步,配置内核
第3步,生成内核
第4步,安装内核
第5步,建立模块
管理多内核
第6步 配置grub引导和测试