身为一个新手,昨天晚上突然想去编译内核,就找了一些相关的教程。但是网上的五花八门,各有各的说法,各有各的命令。其实ubuntu wiki上就有一个教程,简洁明了。
链接如下:https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
编译、安装内核的过程中,遇到几个问题,值得注意,记录如下:
1、上述链接的教程,会启用menuconfig来配置。menuconfig要求安装libncurse,在终端里输入:sudo apt-get install libncurses5-dev即可
2、ubuntu wiki的教程中,fakeroot debian/rules editconfigs命令会询问是否配置amd64、i386和arm的config文件,根据自己的实际情况配置。比如我是32位的ubuntu13.10,则amd64和arm的那几项输入n,i386的输入y。要是你都输入了y,那你哭吧,好几个界面菜单要你配置。配置一个都够呛了,如果非要自虐,请全部输入y。
3、在菜单中配置选项时,可参照金步国先生翻译的资料。链接:http://lamp.linux.gov.cn/Linux/kernel_options.html。本新手在这步配置得久了些,没办法,有强迫症。应当注意的是,金步国先生翻译的资料是2.6版本的内核,13.10系统的内核比较新,像本新手的是3.11.0-13,所以有一些选项已经不存在或者位置变动了。如果想查找某个选项所在的位置,可按下/键,然后在弹出的文本框中输出关键字,没错就跟vim的搜索功能一样。诸位可与本新手一样,自虐一番,多找找,多看看帮助文档。如果对菜单中的某个配置项不清楚,再按shift + /查询,看完之后还是不确定的,一般帮助文档里有类似这样的话:If unsure, choose N.就按照文档里的建议吧。
4、配置之前,可以先在终端里用lspci命令查看自己的硬件配置,以便在device driver中尽量精简掉一些多余的driver。比如Ethernet card driver(记得是这名字)那里,本新手就狂删,基本上只留下两个网卡的驱动。Input device support那里,可以删掉一些什么游戏手柄啊,触摸屏之类的。如果要用到的话是另一回事。关于其他一些配置的,可参考此链接:http://forum.ubuntu.org.cn/viewtopic.php?t=134404
但是安装方法就不要参考了,还是按ubuntu wiki上面的来。因为那个教程里,有一些命令我的系统里是找不到的,apt-get安装时也提示找不到包。5、在Enable the block layer这一选项中,金步国先生的翻译资料里有这样四行:
Support for Large Block Devices
仅在使用大于2TB的块设备时需要
Support for Large Single Files
仅在可能使用大于2TB的文件时需要
当然这两行其实在本新手的配置菜单中只有一行,Support for large (2TB+) block devices and files type。
本新手一开始想着,反正也不会出现大于2TB的文件,也没有大于2TB的磁盘,移动硬盘之类的,所以就取消了该项。
悲剧来了,编译内核,安装上去之后,重启进入该内核,结果root文件系统都挂载不了。就一个黑乎乎的窗口提示没有CONFIG_LBDAF选项,挂载不了。其实就是上面那个选项,在配置菜单里一搜索即知。
没办法,在tty1登录root之后,reboot重启,在grub中进入一个旧的内核(3.11.0-12),然后进入桌面后,在终端里重新编译3.11.0-13的内核,然后再安装,重启。结果就正常了。
千万不要取消这一项,除非你很久没哭过了,故意想失败,然后好好哭一下。
6、在执行教程中的这一条命令时fakeroot debian/rules binary-headers binary-generic, 好不容易编译完了,最后有个older modules checking的过程。结果提示Missing modules (start begging for mercy)。好吧,最后的最后失败了。于是去google一下,在以下链接中:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/899957
最后一楼的大神如是回复:
应该是配置的过程中,有一些module被本新手disable了。于是又点开了个新的链接,按照里面的第一个方法,在命令的后面加上skipmodule=true,好了,编译无误了。
安装内核,重启,进入,enjoy!