您的位置:首页 > 其它

ubuntu 9.10 重新编译内核

2010-03-16 10:48 288 查看
第一步

安装必要的工具

首先要安装必要的包。

包有:
libncurses5-dev

menuconfig
需要的)和
essential

sudo apt-get install build-essential kernel-package(内核打包deb的可以不用装手动安装)

sudo apt-get install make

sudo apt-get install gcc

另外,查看系统是否有这样的两个命令

mkinitramfs mkisofs

这两个工具在编译内核时用来生成
*.img
文件的。如果没有就需安装。

第二步

下载内核


www.kernel.org
下载新内核到
/usr/src

我下载的是
linux-2.6.30.tar.gz

解压
linux-2.6.30.tar.gz

linux-2.6.30

cd /usr/src

sudo tar zxvf linux-2.6.30.tar

cd linux-2.6.30/

第四步

开始编译

以下所有的工作都在
/usr/src/linux-2.6.30
下完成

sudo make menuconfig //

menuconfig
的话还需要
Ncurses
,或者用

sudo make xconfig

sudo make menuconfig //
一般是用
menuconfig

配置完以后保存(系统中保存的一份内核配置文件是在
/usr/src/linux-2.6.30
下名为
.config,
你也可以自己在别的地方另存一份)

不会配置,就选用默认配置可能也能用(就是make menuconfig 后直接退出)

sudo make dep //
也许系统会提示现在不必要进行
make dep
,那就下一步
2.6.30
的我编译就没有使用过。

sudo make clean //
清除旧数据

,新解压的内核源码就不需要这一步了

sudo make –j4
// -jn 参数指要衍生的作业数,一般每个处理器2个作业,所以,双核可以选择-j4

sudo make bzImage //
编译内核,将保存到
/usr/src/linux-2.6.30/arch/i386/boot/


sudo make modules //
编译模块

sudo make modules_install //
安装模块

把编译好的模块安装到系统的/lib/modules下

sudo mkinitramfs -o /boot/initrd-2.6.30.img 2.6.30
#根据安装好的模块做镜像后面的参数号是指你的版本号,也就是modules下你安装的文件夹名

此时可能提示找不到这样的一个文件夹“
/lib/firmware/2.6.30
”,你需要手工创建一个这样的文件夹。

sudo mkdir /lib/firmware/2.6.30

sudo make install //
安装内核

#以上的几个步骤不能乱来要搞清楚各个步骤的实质内容 编译(包括内核和模块)->安装模块->做模块镜像->安装内核顺序不能乱

经过以上几步,内核就编译安装好了。然后就是修改grub,能够引导我们自己的新内核。如果对grub如何修改不是很了解,请看另一篇我转载的文章 《ubuntu9.10之grub.cfg详解》我就是添加了

menuentry “Ubuntu, Linux 2.6.30″ {

insmod ext2

set root=(hd0,8)

search –no-floppy –fs-uuid –set f255285a-5ad4-4eb8-93f5-4f767190d3b3

linux /boot/vmlinuz-2.6.30 root=UUID=f255285a-5ad4-4eb8-93f5-4f767190d3b3 ro quite splash

initrd /boot/initrd.img-2.6.30

}

修改完grub重启后出现了出现

warning:can't open directory /lib/modules/2.6.30-rc8-bfs311t5250,no such directory,估计没有配置好内核。

后来根据如下命令启发,修改后成功新内核。

######################################

cd /boot

cp initrd.img-2.6.29.4 initrd-2.6.29.4.old (Just making a backup)

depmod -a

update-initramfs -k 2.6.29.4 -c

cd /tmp

gzip -dc /boot/initrd.img-2.6.29.4| cpio -id

touch lib/modules/2.6.29.4/modules.dep

find ./ | cpio -H newc -o > /boot/initrd.img-2.6.29.4.new

gzip /boot/initrd.img-2.6.29.4.new

cd /boot

mv initrd.img-2.6.29.4.new.gz initrd.img-2.6.29.4

######################################

补充:

make 包括 内核部件和模块部件一起编译

make bzImage 只编译内核#可以在menuconfig后就使用 只编译内核 但是接着要编译 模块不能省

make modules 只编译模块

make modules_install 把编译好的内核安装到/lib/modules/X.x.x下面 XX是你自己定义的版本号

sudo mkinitramfs -o /boot/initrd-2.6.24.img 2.6.24就对
/lib/modules/XX。X下面的模块库进行的一个镜像快照当内核需要没有被编入内核的模块是会去initrd.img找如果启动过程中需要的部
分都在内核中。就不会访问该文件!

内核安装过程中,实际做了三件事:

1.安装modules到/lib/modules下面。

2.复制内核vmlinuz和模块镜像initrd.img到/boot/下

3.在/下面创建vmlinux和initrd两个链接。是方便没法指明路径的引导程序直接到/目录下找到/boot/的启动文件!(grub可以设定路径,不用做链接也可以)

4.在grub里面加入新内核的引导路径!

完!

出现这个错误了
Re: FATAL: modprobe: Could not load /lib/modules/.../module.deb
删掉了之前生成的/boot/initrd.img-2.6.28,执行

#cd /usr/src/linux

#update-initramfs –c –k 2.6.28

这样,重新在/boot下创建initrd.img-2.6.28,
sudo update-grub
重启后,进入了新内核,内核编译升级成功。
在Ubuntuserver9.10下测试成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: