前言
最近在笔记本物理机装了Ubuntu系统,虽然不是并第一次实体机装Linux,但这是第一次认真配置了系统环境并在Linux下开发和学习。目前同时也在学习计算机操作系统的课程,因此尝试编译Linux内核,同时为以后学习Linux内核分析裁剪做准备。第一次踩了不少坑也查了不少资料,在此记录一下Linux内核编译的过程。
下载内核源码并解压
The Linux Kernel :Kernel
这里我选择的是:Linux-3.16.49
通过httpie代替wget下载:
http https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.16.49.tar.xz --download
解压Linux内核源码:
xz -d linux-3.16.49.tar.xz
tar xvf linux-3.16.49.tar
cd linux-3.16.49
配置内核
make menuconfig
make menuconfig 图形化的内核配置make mrproper -----删除不必要的文件和目录.
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
目的都是生成一个.config文件,这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,你就用这个好了,这个比较方便,也好设置。如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了。 选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
运行失败有可能是缺少依赖库libncurses5-dev
,也可能是终端窗口太小无法显示配置界面
sudo apt-get install libncurses5-dev
编译内核
大概花了10分钟
make all
make modules
创建初始化文件
cd arch/x86/boot
mkinitramfs -o initrd.img
使用qemu运行内核
qemu-system-x86_64 -kernel bzImage -initrd initrd.img -m 512M
运行成功
使用tmpfs和-j8参数加速编译
经测试使用tmpfs和-j8参数多线程编译使整体编译时间缩短到2分钟以内
测试环境:
- CPU:i7-4720HQ
- MEM:12GiB 1600MHz
sudo mount tmpfs ~/ramdisk -t tmpfs -o size=3G
make all -j8