Ubuntu内核编译
首先,介绍一下编译内核的经典模式,这个可能都看过了。
#make mrproper
[说明]该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
#make dep
[说明]读取配置过程生成的配置文件,创建对应于配置的依赖关系树,从而决定哪些需要编译,哪些不需要。
#make clean
[说明]删除前面步骤留下的文件,以避免出现一些错误。
#make bzImage (或#make zImage)
[说明]完全编译内核。二者生成的内核都是使用gzip格式压缩的,区别在于编译后的文件大小。
#make modules
[说明]生成相应的模块。
#make modules_install
[说明]把模块拷贝到需要的目录中。
#depmod -a
[说明]生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
#cp /usr/src/linux/System.map /boot/System.map-2.4.x
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.x
[说明]把内核文件复制到/boot。
#rm -f /boot/System.map /boot/vmlinuz
#ln -s /boot/vmlinuz-2.4.x /boot/vmlinuz
#ln -s /boot/System.map-2.4.x /boot/System.map
[说明]更新软链接vmlinuz和System.map。
#shutdown -r now
[说明]重启。
由于我的测试环境是Ubuntu5.10,它是基于Debain的。
它的内核的升级是通过网络来进行的,要进行手工升级内核,但是它没有mkinitrd这个命令。
这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。
mkinitrd的有无与一些发行版有关。
在Ubuntu下进行编译内核需要一些包的支持(这可以参照Ubuntu的官方文档):
当然,首先得装上编译工具,默认是没有的,装上就是了
建议安装libncurese-dev和libqt3-dev包,第一个是menuconfig所需要的,第二个用于xconfig,安装他们中的一个是很小的
对于2.6.的内核安装步骤,
make menuconfig
make
make modules_install
make install
2.6.的内核安装,make install应该会自动的检查系统中的引导程序,将其加入到lilo或者是grub中。但是ubuntu5.10没有自动的加入。所以需要手工加入menu.list。
initrd.img的解决方案:
1、安照Ubuntu官方网站的方法,进行,下载fakeroot和kernel-package
fakeroot make-kpkg --append-to-version=.181004 kernel_image --initrd binary
dpkg -i kernel-image-x.y.z.yy.mm.dd_10.00.Custom_i386.deb
2、下载initrd-tools,安装的mkinitrd的包,
Ubuntu下还缺少一个库,cramfsprogs,下载安装这个库。
mkinitrd -o initrd.img-2.6.15 /lib/modules/2.6.15/
或者是:
mkinitrd -o initrd.img-2.6.15 2.6.15
接着,修改一下grub的menu.list文件就可以了
另外,还有一种方法,需要内核的支持。在编译内核的时候,选上
File system-->Pseudo filesystems-->Automatically munt at boot(2.4内核上有,但是2.6内核上没有这个选项)
这样就可以不用initrd.img文件了。
由于Ubuntu是基于Debain的,所以可以采用Debain的经典方式进行内核编译:
在 Debian 系统中用源码编译自定义内核要特别小心。用 make-kpkg 的 --append_to_version 选项来创建多重内核镜像比较安全。
# apt-get install debhelper modutils kernel-package libncurses5-dev
# apt-get install kernel-source-2.4.18 # 使用最新版本
# apt-get install fakeroot
# vi /etc/kernel-pkg.conf # 输入我的名字和 email
$ cd /usr/src # 创建目录
$ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
$ cd kernel-source-2.4.18 # 如果这是你的内核源码
$ cp /boot/config-2.4.18-386 .config # 将当前配置设定为默认配置
$ make menuconfig # 按自己的喜好来定制
$ make-kpkg clean # 必须执行这步(per: man make-kpkg)
$ fakeroot make-kpkg --append_to_version -486 --initrd \
--revision=rev.01 kernel_image \
modules_image # modules_image 可以是 pcmcia-cs* 等。
$ cd ..
# dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安装
make-kpkg kernel_image 实际上执行了 make oldconfig 和 make dep。如果没使用 initrd 就不要使用 --initrd 选项。
这正如上面的Ubuntu编译方法,需要fakeroot和make-kpkg的支持。
阅读(2349) | 评论(0) | 转发(0) |