Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760293
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: LINUX

2006-04-22 17:41:11

  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) |
给主人留下些什么吧!~~