颜色注记:文件名,重要文档的内容 命令名/终端返回
这里是编译Linux内核的笔记。希望能整理出一份易学易用的手册。
ps 现在还没编译成功……
1,下载Linux内核源码,命令如下
2,应该是用root吧(没测试),登录root,拷贝到某个文件夹中
据Linus说不是一定要把源代码拷贝到/usr/src/kernel里的,这里还是保留在timi的家目录里
然后解压,刷屏之后,解压好了
进入目录,ls一下
3,有文档说,可以将/lib/modules/`uname -r`/build/.config拷贝至当前目录,但是我的CentOS6.4没有编译过源代码,所以/里没有,于是暂时不考虑这个
4,执行make mrproper把之前编译产生的垃圾清除掉
提示没有安装gcc,所以应该安装个gcc:yum install gcc安装后,执行成功
5,拷贝现有的配置文件到.config ,这个文件位于/boot/config-2.6.32-358.e16.x86_64
6,执行make menuconfig,进行配置,但是提示某个组件没有安装
执行yum install ncurses-devel(注意不是yum install ncurses,因为系统已经安装了这个组件了),安装完毕后,进入配置Menu
7,保存(好像步骤冲突了,有待考证)
8,执行make bzImage
ps:在make的时候,我仍然用了之前从/boot目录拷贝的.config文件,因为我认为那个才是比较准确的吧?当然了,make之后,会有一大堆提示,我都给yes掉了。现在正在编译,一会儿看结果。
9,经过压缩后的内核编译好了(如下图)
10,编译模块 make modules
11,编译好之后的内核路径是
12,安装模块
make modules_install
安装后,模块的位置如上图(在/lib/modules/2.6.32.65里)
13,制作ramdisk
上面的命令中,2.6.32.65是12步骤中,模块安装好之后的目录名,在/lib/modules里
14,将bzImage拷贝到/boot目录
完成13和14步之后,/boot目录的ls结果如下
15,修改/boor/grub/menu.lst
如下:
在文档的后面加入:
title linux_xxx
root( hd,0,0)
kernel /vmlinuz-xxxx ro root= LABEL=\ rhgb quiet
initrd /initrd-xxxx
上面的vmlinuz-xxxx和/initrd-xxxx就是/boot下面的文件,经测试不用添加/boot否则提示找不到文件
16,init 6 重启
17,重启后遇到了问题:
不知道什么原因,猜测与步骤8中被我PS掉的那些信息有关。这个问题没有解决,我删掉了所有东西之后重新编译内核了。
18,重新编译内核后,还是遇到了这个问题。
19,最后的解决方法:在最后一步执行make install,虽然有若干个报错,如下
但是重启之后,仍然能成功进入内核,如下
查看/boot/grub/menu/lst,如下
然后做了一个实验
将make install命令自动生成的title CentOS(2.6.32.65Timi)中的kernel和initrd改成我们一开始生成的那两个(注意kernel文件已经被自动加了个.old,挺人性化的)
然后启动成功,如下图
可见:编译出来的内核,还有ramfs应该是没问题的,关键在于其他的配置。