1. 安装相关软件包
# yum install ncurses-devel gcc gcc-c++
2. 解压源码包
# cd /usr/src/kernels/
# tar -xvf linux-3.5.4.tar.xz
3. 设定编译选项
# cd linux-3.5.4
# cp /boot/config-3.3.4-5.fc17.x86_64 .config
所以这里需要大家了解一下make menuconfig与make oldconfig的区别,他们都是针对.config这个文件来讲的。
(1). 如果.config不存在,运行make menuconfig时的缺省设置由固化在各个Kconfig文件中各项目的缺省值决定。
(2). 如果.config存在,运行make menuconfig时的缺省设置即是当前.config的设置,若对设置进行了修改,.config将被更新。
(3). arch/arm/defconfig是一个缺省的配置文件,make defconfig时会根据这个文件生成当前的.config。
(4). arch/arm/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。
(5). make oldconfig的作用是备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config。
所以说,根据上面的内容,可以得出这样一个结论。为了使用新的内核功能,当然是用make menuconfig根据新内核默认的配置。如果说,你是在原来内核基础上,增加内核的某个功能的话,就可以用make oldconfig来进行局部的配置了。
# make mrproper (删除上次编译产生文件,第一次编译不需要执行)
# make menuconfig
# make -j4
4. 安装模块
# make modules_install
5. 更新/boot目录并自动修改grub.conf
# make install
主要文件包括:
vmlinuz-3.5.4
System.map-3.5.4
initramfs-3.5.4.img
config-3.5.4
6. 重启
Tips:
1. 内核中的编译选项基本没几个知道的,这个算是第二次编译吧,所以把/boot下的config给拷贝过来了,这样参数不用改就行了,当然这样只是保险起见,熟悉编译选项还是很重要的。
2. 内核编译选项中的Maximum number of CPUs不知道如何选,最后看到 Linux Kernel部分选项意义 的方法:
cat /proc/cpuinfo | awk ‘/cpu cores/ {a=a+$4;};END{print a}’
所以我就填了8
3. 自己主要就去掉了一些debug选项,和极少部分无用的功能,翻译无能,好多看不懂。
4. fedora17的grub变成grub.cfg了,只能基本看懂了,幸好人家有命令直接生成
# grub2-mkconfig > /boot/grub2/grub.cfg
5. 顺便吐嘈下尝试的另一种方法就是直接编译成RPM安装包倒是成功了,就是安装时提示生成grub失败,估计自己的mkspec代码有问题
6. 如何卸载编译安装内核:
# rm -f /boot/3.5.4相关文件
# rm -f /usr/lib/modules/3.5.4相关文件夹
# grub2-mkconfig > /boot/grub2/grub.cfg
参考:
[1] Linux 2.6.36内核优化指南
[2] Linux Kernel部分选项意义
[3] 秀脱linux实战笔记linux-kernel-3.0.3实战片