ubuntu内核和主线内核_ubuntu编译内核及刷内核

ubuntu编译内核 (2008-10-10 23:22)

下载The latest stable version of the Linux kernel is: 2.6.25.7,点后面的“F”按钮下载

2.在终端su root命令切换到root权限,然后把linux-2.6.25.7.tar.bz2文件复制到/usr/src/目录下。在ubuntu中不能以root身份登录界面,很奇怪

3. cd到/usr/src/目录下, 执行 tar -jxvf linux-2.6.25.7.tar.bz2命令解压源代码包。就会解压到

/usr/src/ linux-2.6.25.7,我又把它复制到/usr/src/ linux-2.6.25.7-widebrihgt目录下了,/usr/src/

linux-2.6.25.7-widebrihgt挂载了一个8G的盘。

4.root用户,cd到/usr/src/ linux-2.6.25.7-widebright目录下# make mrproper (该命令可确保源代码目录下没有不正确的.o文件.config文件等)

内核配置工具(1)make config(纯字符提示模式)(2)# make menuconfig(配置内核各选项,居于ncurse的菜单选择模式)需要ncurse库的支持,ubuntu中默认没有安装需要安装一下# apt-get install libncurses5-dev

(3)# make xconfig(X窗口的图形界面,配置内核各选项)xconfig基于X11,使用qt库,在Ubuntu中先安装qt库:

# apt-get install libqt3-headers libqt3-mt-dev

我是安装libncurses5-dev之后用menuconfig来配置的,都是用他默认配置,除了General setup --->

() Local version - append to kernel release ()这个可以在内核版本后面加上个性字符串,我输入了widebrighgt然后选最后一条,保存配置文件就行了,他会在/usr/src/ linux-2.6.25.7-widebright生成.config文件

5.编译内核只需要运行make就行了#make

执行之前可以先运行make clean清空生成的内核文件,或者编译中间有问题了,想重新编译,可以用这

个先清空已经生成的内核文件

我在VirtualBox虚拟机的ubuntu8.04系统里面执行make命令, 结果make一次花的编译时间应该在两个

小时以上。注意/usr/src/ linux-2.6.25.7-widebright的剩余空间要在2.5G以上,我一开始mount到一个

2G的盘,结果编译时候提示没有空间。后来重试了几次,花了很多时间,最后mount了一个8G的盘,终

于编译成功了。 看他完成后,占用的控件大概在1.8G左右。

这个make相当于,手工执行了一下两步:# make bzImage

# make modules(编译可加载模块)

其中make bzImage将在/usr/src/ linux-2.6.25.7-widebrihgt/arch/i386/boot目录下生成一个名字为

bzImage的内核镜像文件。make zImage命令其实可以生成内核镜像的,bzImage的区别就是它是压

缩的。

make modules则是生产大量的*.ko内核文件,就是模块化的内核驱动等等吧,你不把它编译进去

bzImage里面去的都会另外单独生成的一个ko文件了,以后需要的时候再由内核加载这个ko模块。

6.安装内核

(1)执行 make install命令我运行了这一步后,提示需要在GRUB menu.lst配置文件中把 入口 点指向/boot/vmlinuz-

2.6.25.7widebright文件。 应该是已经把上面一步生成的bzImage复制到系统的/boot目录去了,ls

-l看一下/boot目录,可以已经把vmlinuz文件链接到vmlinuz-2.6.25.7widebright文件System.map

文件链接到System.map-2.6.25.7widebright文件,config文件链接到config-2.6.25.7widebright文

件。

(2)没有看到模块的配置信息输出,所以我又执行了一下 make modules_install命令,这个是安装模块的。这个会安装很多ko文件,最后输出DEPMOD 2.6.25.7widebright。不懂这个流程是什么样子的。不过

在/lib/modules/目录下面生成了一个2.6.25.7widebright的目录,下面目录就是上面make modules生

成的那些ko内核模块文件。

(3)我上面的编译过程好像没有生成initrd镜像文件,不知道怎么回事,只好手工来了。什么是initrd镜

像请看最后附的那篇文章生成initrd镜像文件,redhat系统下面用new-kernel-pkg命令应该就可以了,后面那篇文章说的mkinitrd

命令不知道是什么系统。ubuntu系统下面在网上搜索了一下,应该是用mkinittramfs命令来生成的。

运行一下"mkinitramfs -o initrd.img-2.6.25.7widebrihgt   2.6.25.7widebrihgt" ,将在当前目录下生成

一个名字为initrd.img-2.6.25.7widebrihgt大小7.1M左右的initrd镜像文件。最后我把它移到/boot/目

录里面去。注意:最后那个参数“2.6.25.7widebrihgt”是version,指定 内核版本,就是/lib/modules/目录下相应的

文件夹名字。这个一定要指定的,不然他默认使用的是正在运行的系统的版本,最后系统就不能引导成

功。

(4)检查一下grub的配置文件cat /boot/grub/menu.lst, 看来make install命令没有自动把新编译的内核的配置写到grub的配置文

件里面。修改timeout属性 为10,让等待的时间长一点,然后仿造原有的配置新建一项放在最前面,因为一开始的default的值设置为0的,默认是第一项。增加的内容如下

title        Ubuntu 8.04, kernel 2.6.25-7-widebright

root        (hd0,0)

kernel        /boot/vmlinuz-2.6.25.7widebright root=UUID=a082d103-894e-443a-bf58-8b128c7e5dd1 ro quiet splash locale=zh_CN

initrd        /boot/initrd.img-2.6.25.7widebright

quiet

注意其中的kernel和initrd都指向自己的镜像文件。root的UUID可能没个人都不一样的,可以参考GRUB的配置文件说明。

做完上面步骤之后,重启系统,等到系统提示按ESC键的时候,可以选择和进入GRUB的菜单。可以看到自己的内核版本已经显示出来了。

选择进入之后,一切正常。

使用uname -a命令查看,可以看到当前内核已经被更新了

widebright@widebright-desktop:~$ uname -r

2.6.25.7widebright

widebright@widebright-desktop:~$ uname -a

Linux widebright-desktop 2.6.25.7widebright #1 SMP Sat Jun 21 05:37:09 CST 2008 i686 GNU/Linux

widebright@widebright-desktop:~$

=======另附一篇initrd镜像相关文章==============================================

initrd镜像文件的作用与制作

我们在安装新内核的时候,通常都会编辑lilo.conf和grub.conf文件。里面有一段“initrd=/boot/initrd-

***.img”(其中的***表示内核的版本号)的我们都很少会注意到,有时候还会发现这一行不要也可以

正常开机。那这个initrd***.img究竟是用来干什么的呢?

其实initrd***.img是一个镜像文件,类似ramdisk,把一段程序打包到img里,然后在开机的时候在内存

里开辟一段区域,一般是2m,释 放到那里运行,都是一些初始化的程序,比如sisc_mod、ext3、

sd_mod等模块和insmod、nash等命令。不同内核,初始化的img可 以相同,也可以不同,如果没有,

可以在grub.conf里加上no initrd,它就跳过initrd的检测和执行了,以前好像就没有,后来才有的。

它的作用是在没有mount /分区以前,系统要执行一些操作,比如挂载scsi驱动,它就把initrd释放到内

存里,作一个虚拟的/,然后执行其根目录下的一个脚本“linuxrc”,运行insmod和nash命令挂装模块。

为什么有的时候我们在lilo或grub的配置文件中不加入该行都可以正常开机呢?这是因 为我们一般的PC

机都没有使用scsi硬盘等需要先加载其驱动的设备,所以就算没有initrd***.img也可以正常开机。但是

如果我们要在服务器上 为其编译新内核那就一定不要忘记也为其新建一个initrd文件呀!

好,下面来看看如何查看initrd***.img里面的内容和如何为你的新内核创建一个新的initrd.img文件。

查看initrd.img:initrd***.img虽然后缀是“img”,但其实它是一个gz格式的文件,我们可以先把它解压,然后载挂装到

目录下:1、cp initrd.img initrd.gz

2、guzip initrd.gz

3、mount -o loop initrd /mnt/floppy进入/mnt/floppy目录,我们就可以看到initrd***.img文件的庐山真面目了。

制作initrd文件当我们编译了一个新的内核,也不要忘了为我们的scsi设备做一个新的initrd镜像:

语法:mkinitrd文件名 内核的目录名

示例:mkinitrd initrd-2.4.19.img 2.4.19

initrd-2.4.19.img文件是自己任意取的,但最好对应自己的内核版本号。2.4.19是在/lib/modules中的目录名,对应内核的版本。

当然,我们也可以在挂装了initrd***.img文件后直接添加模块到/lib目录中,然后修改linuxrc脚本让其开

机进行挂装。但必须具备一定的shell脚本的能力才行。

附:

一次帮朋友装好系统后运行sudo,出现下列错误,记录在这了

更改时间为正确时间后,没有重启,重新进入终端时出现:

"sudo: timestamp too far in the future: Feb 26 06:54:27 2008"

1、先把时间更改为 大于<sudo: timestamp too far in the future:>后面出现的时间(Feb 26 06:54:27 2008)。

2、在终端使用命令:sudo -k。

3、把时间调整正确。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值