fedora12编译内核

fedora12编译内核

 

正在看LDD3,为了搭建环境,需要自己编译内核,也就是搭建自己系统的内核源代码树.参考很多网上的文章,以及源代码树里的README文件,所后发现一个从没出现过的问题,最后自己解决了,积累了些经验,真是好不高兴.现在把过程记录下来,一来以供遇到同样问题的朋友参考,二来自己理顺一下,好记在脑子里. 建议,如果自己是第一次编译内核,那多参考一下网上人家写的经验,毕竟每个人的编译过程或多或少有些不一样,或多或少有些会出现问题.博众家所长,才能在出现问题时更有针对地去google.

1:获取内核源代码.两种方式:到内核源代码主页www.kernel.org去下载社区主线版本,或者到http://download.fedora.redhat.com/pub/fedora/linux/releases/12/Fedora/source/SRPMS/下载发行版本.注意,本来我也想获得fedora发行版本的内核源代码,可是我发现提供下载的源代码没有合适我目前内核版本的.我升级到了fedora12最新状态,目前的版本是:2.6.32.12-115.fc12.i686. linux-2.6.32.15.tar.bz2 2:在自己的home目录建立工作目录.一般都把源代码解压到/usr/src下,其实可以随便在哪个目录下都可以.要自己建立工作目录主要有两个考虑:其一 在自己home目录下工作不需要root用户就可以工作,而用root用户工作一般都会比较危险,原则上不得已的情况下我们才root.其二 内核编译的时候产生一些相当多的目标文件,到最后几乎有2-3G,而有些朋友是在虚拟机上玩linux的,这难免/或者/usr分区分的空间比较少.我在自己的home目录下建立这样目录: /home/birdb/kernel/biuld

cd ~ mkdir -p kernel/biuld cd kernel/biuld 把下载的源代码包复制过来. 3:解压源代码文件到工作目录下: tar -jxvf linux-2.6.32.15.tar.bz2 4:配置内核选项. 这个说真的对我来说复杂了,以致于我现在都还不会.那这样是不是不能进行下去了呢?呵呵,当然不是了. 我们可以把系统带有的配置拿过来用,在哪有?在/boot目录下就有一个,那是我们安装的系统带有的.把它复制过来并命名为.config。当执行make menuconfig时,首先寻找.config,如果找到就读取。否则进入arch目录里面寻找相应体系结构默认的配置文件.其实不管有没有都可以直接make menuconfig,这样最后也还是会生成.config. cp /boot/config-2.6.32.12-115.fc12.i686  .config make menuconfig 执行make menuconfig后就是眼花的地方,如果不懂得怎么做那直接退出就可以了,这样也会生成一个默认的.config文件.关于定制内核功能比较复杂,我也不懂,所以不能多说,请另外参考网上的文章. 5:编译.内核文档有说了,2.6以后的内核可以用一个make便可生成内核映像和模块了.make直接完成:make bzImage编译核心)make modules开始编译模块) make -j6 -jn参数可以加快编译完成,系统会生成多个进程同时进行编译工作,当然这要你的CPU是多内核才行. 6: 安装模块。安装模块到/lib/modules/ sudo make modules_install 7: 安装内核。把make 生成的vmlinuzSystem.map复制到/boot目录下同时修改grub /boot/grub/menu.lst. 修改menu.lst是自动完成的,不用手动修改。 sudo make install 这应该算是最后一步了,反正我看到网上的都是这样,但当我重启选择新编译的内核启动时,根本就没反应,后来发现,复制到/boot内的vmlinux没有执行权限,所以还得加上可执行权限. 8:如有必要,请添加执行权限. sudo chmod +x  vmlinuz-2.6XXXX 重新启动看看效果如何!! 没有反应?对了,我的就没有反应.后来google了许久,发现有和我情况一样的,但几乎没人解答.我想这应该是最新的fedora12才有的现象,这与它的新特性有关吧(因为虽然我是解决了,但我不解其中的原理,所以只能说是可能).总之是fedora12开始用了一个dracut的东西,有什么用,有什么影响我这样的菜鸟不懂,反正就是因为它的原因才会让我们的内核编译出现困境. 现在你到/boot下去 观察一下. ls -l  initramfs* 新生成的initramfs比原来的大好多呀,这就是问题所在,其实,从上面做下来我们的内核是可以启动的,重启选定新的内核启动,刚开始好像没反应,其实是有的,你等上半个小时左右,系统肯定能起得来,我想这是因为新生成的initramfs比较大的原因.那怎么解决呢?对了,fedora12新的特性:dracut.我们先讲解决的办法. 现在你进入到内核源代码目录下面,其他路径下也应该都可以,然后执行: dracut  initramfs-xxxxxx.img 注意:xxxx代表的东西视自己编译的内核版本而定,也就是说initramfs-xxxxxx.img就是要dracut生成的内核映像,也就是问题的那个.避免复杂化,直接让它和你现在boot下面的新的initramfs同名.执行上面的命令后,在当前目录下就会生成新的initramfsxxx.img,观察它的大小,是不是11M左右?这就对了,具体的dracut的用法,请用man查看.另外执行完后会有些提示,我不管它,你要深究,那你还是参考dracut的用法吧.好了,把新生成的东西复制过去吧. sudo cp initramfs-xxxxx.img /boot 再次注意,因为/boot下已经有一个同名的initarmfs,所以复制有什么提示记得不要惊慌,春哥还活着,她还在,呵呵.替换掉就行了,这样重新启动,选定新的内核启动吧.

 

如果你正在编译内核,并且出现了问题,找到了这里.虽然我表述得不是很通俗易懂,但如果你看了完全一头雾水那我还是建议你先不要玩什么内核编译了,多学些基础性的东西,如果一点基础都没有,我相信你根本看不懂我在说什么.哪些是基础?我也不懂,我现在也还是个菜鸟,可以建议你找<鸟哥私房菜>来看看.网上一大堆,自己找,俗话云:自己动手丰衣足食.不过如果你愿意和我交流的话,可以联系我.我愿意交天下同仁为已友.

posted @ 2012-11-22 22:05  追心  阅读(246)  评论(0编辑  收藏  举报