ubuntu 下 linux 2.6.18.tar.gz 内核编译,Linux内核编译与安装-基于linux-2.6.30.6内核

由于实验课需要的关系,最近研究了一下Linux内核的编译。

貌似不同版本的Linux内核的编译过程略有区别,时间精力有限,所以不做进一步探讨了。

这里仅展示一下基于linux-2.6.30.6内核的编译过程。实验环境是内核2.6.35-22-generic-pae的服务器版Ubuntu。

文章内容中涉及一些资料是从别人博客里Copy过来的,因为太杂太乱,所以没办法逐一帖上原帖链接,希望见谅。同时,其正确性也无法保证,仅供参考。

●下载内核压缩包

http://www.kernel.org/下载linux压缩包linux-2.6.30.6.tar.bz2

●解压缩内核压缩包

tar -jxvf linux-2.6.30.tar.gz

●检查源码(貌似该步不是必须)

$ cd /home/std/ linux-2.6.30.6

$ make mrproper

该步的作用是检查源码是否有.o文件和依赖问题,从全新的源码编译时不需要这一步。配合makeclean(主要清除.o文件)使用更好,make mrproper主要清除环境变量及配置文件,清除旧的编译过的文件。

●配置内核

$ make menuconfig

可以无需做任何改动直接退出。对于第一次编译内核的人,不推荐直接从内核默认配置开始,推荐使用发行版自带的配置文件,通常/boot下会有config-2.6.35-22-generic-pae的文件。选择Load an Alternate Configuration File,然后输入/boot下那个config文件的名字,载入即可。第一次编译最好还是不要随便修改配置了,如果失败的话,会留下心理阴影的。在配置里随便看看,如果有什么懂的也可以根据自己的需求改改,不明白的地方就不要动了吧。完了之后别忘了save,保存的时候文件名就填.config。

注意:如果出现找不到ncurses开发库可以使用命令sudo apt-get install ncurses-dev,然后重新运行上面的命令就可以了

●编译内核

$ make

为了加快编译的速度,可以使用-j参数,开启多线程。比如双核的cpu可以这样编译

$ make -j4

一般-jn的n为核数的两倍即可

●安装内核模块

$ make modules_install

将编译得到的内核模块复制到/lib/modules//目录下

●安装内核

$ make install

(启动配置文件grub.cfg是/boot/grub/grub.cfg(fedora是在menu.lst文件中))

此时只是把压缩的内核镜像vmlinuz拷贝到了/boot下,还没有生成initrd.img,如果此时在grub.cfg文件中增加新编译的内核镜像的话(将其他内核版本的img作为此内核的img),开机后出现:Could not load /lib/modules/.../modules.dep

●生成镜像文件initrd

$ sudo mkinitramfs -o /boot/initrd.img-2.6.30.6 2.6.30.6

完成后, 将在linux-source-2.6.30.6/目录下生成initrd.img-2.6.30.6文件。

关于mkinitramfs的其他参数,请参考man mkinitramfs。关于initrd的作用,请自己google搜索。

如果开机后还是出现:Could notload /lib/modules/.../modules.dep,提供了一个解决方案,就是使用initramfs-tools生成initrd.img,命令如下:update-initramfs-c -k 2.6.30.6之后会利用lib/modules下的文件生成initrd.img-2.6.30.6(位置在boot文件夹下),修改grub.cfg的img的路径。重新启动选择2.6.35.2,启动成功!参考http://www.linuxquestions.org/questions/debian-26/modprobe-fatal-could-not-load-lib-modules-modules-dep-335214/

●修改引导

使用grub的话,可以直接使用:

$ sudo update-grub

来更新引导文件,当然也可以自己编辑/boot/grub/menu.lst或者/boot/grub/grub.cfg文件。grub.cfg引导文件示例如下:

940c90459a6c933a8c95ac0399549ee2.png

●重启

重启之后可以通过以下命令确认你当前使用的是不是刚编译的内核:

$ uname -a

在启动的过程中发现,ubuntu默认启动下是看不到grub的启动菜单的(在多系统的机器上可以看到,但虚拟机中无法看到),因此需要修改grub.cfg中关于时间的控制即timeout,有两个地方:

if [ "${recordfail}" = 1 ]; then

set timeout=-1

else

set timeout=10

fi

if keystatus; then

if keystatus --shift; then

set timeout=-1

else

set timeout=0

fi

else

if sleep --interruptible 3 ; then

set timeout=0

fi

fi

fi

前者为系统失败或成功的等待时间,后者为启动时按住shift或不按shift的等待时间,在虚拟机中可以在启动时按住shift或者直接把后者的timeout全部改为10.参考资料:http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=323524

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值