从源代码编译和安装Linux kernel 2.6内核,及Linux源码目录结构
环境
主机:MacBook Pro (Retina, 13-inch, Early 2015) 10.14.3
虚拟机软件:VMware fusion 11
虚拟机里安装:Ubuntu 10.04
内核版本:Linux Kernel 2.6.32.1
备注
1、为什么选择 2.6.32.1 版本?
大多数书籍讲的是2.6版本,便于学习。我尝试编译2.6.11版本,遇到一些编译错误不能解决,最后选择和Ubuntu相近的版本。
2、为什么使用Ubuntu 10.04版本?
Ubuntu10.04使用的是3.6.32.38-generic版本,比较接近学习的内核版本,编译环境接近,省去很多配置编译环境的麻烦,我尝试过Ubuntu14.04和Ubuntu18.04来编译,在编译或者安装中遇到一些问题,没能解决。
3、为什么要使用虚拟机?
虚拟机可以快照,遇到无法进入系统时可以快速恢复,记得在很重要的步骤前进行快照,比如更新grub时。
步骤
1、下载Ubuntu历史版本(http://old-releases.ubuntu.com/releases/10.04.0/),选择下载64-bit PC(AMD64)desktop CD,并安装进虚拟机。
2、下载Linux Kernel (https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/),保存并且解压到 Ubuntu 中,我保存在桌面上。
3、配置编译选项
编译前必须先配置编译选项,内核提供了很多功能,可以编译决定哪些功能编译进内核。建议你使用cp命令复制现有的配置文件。
$ cd linux-2.6.32.1
$ cp -v /boot/config-$(uname -r) .config
## 验证和更新配置 ##
$ make oldconfig
4、编译
$ make
或者通过 -j 指定核心数,加快编译速度,我在虚拟机分配了两个核心。
## 使用2个核心 ##
$ make -j 2
## 使用 nproc 命令获取核心数 ##
$ make -j $(nproc)
5、安装内核模块
$ sudo make modules_install
6、安装内核
$ sudo make install
7、更新grub,更新前用虚拟机先快照一下,可能会重启进不了系统。
## 没有这步会导致重启黑屏 ##
$ sudo update-initramfs -c -k 2.6.32.1
$ sudo update-grub
8、重启,重启前可以执行第9步看一下当前内核版本。
# reboot
9、验证内核是否安装成功
$ uname -a
参考:
https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
http://manpages.ubuntu.com/manpages/cosmic/en/man8/live-update-initramfs.8.html
Linux源码目录结构
目录 | 描述 |
---|---|
arch | 特定体系结构的源码 |
block | 块设备I/O层 |
crypto | 加密API |
Documentation | 内核源码文档 |
drivers | 设备驱动程序 |
firmware | 使用某些驱动程序而需要的设备固件VFS和各种文件系统 |
include | 内核头文件 |
init | 内核引导和初始化 |
ipc | 进程间通信代码 |
kernel | 像调度程序这样的核心子系统 |
lib | 通用内核函数 |
mm | 内存管理子系统和VM |
net | 网络子系统 |
samples | 示例,示范代码 |
scripts | 编译内核所用的脚本 |
security | Linux安全模块 |
sound | 语音子系统 |
usr | 早期用户空间代码(所谓的initramfs) |
tools | 在Linux开发中有用的工具 |
virt | 虚拟化基础结构 |