Chinaunix首页 | 论坛 | 博客
  • 博客访问: 644302
  • 博文数量: 227
  • 博客积分: 8017
  • 博客等级: 中将
  • 技术积分: 2069
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-08 22:50
文章分类

全部博文(227)

文章存档

2011年(10)

2010年(55)

2009年(28)

2008年(134)

我的朋友

分类: LINUX

2008-06-09 14:55:12

今天在ubuntu7.04上编译内核linux2.6.25.4成功了。
新编译的内核给我的感觉是反应速度快了很多。(在编译的时候将Timer frequency由Feisty默认的250HZ该为1000Hz, 能不快多了吗?), 其他的bug暂时还没有发现。

1. 下载内核原代码:
    $cd ~/linux/package
    $wget -c
    $wget -c .sign
    从国内的镜像站下源码要比直接从kernel.org快。

2. 验证签名
   首先从pgp的服务器获取签名公匙, linux内核包的公匙编号是0x517D0F0E. 再利用sign文件来验证.bz2压缩包的签名. 如果输出中有类似gpg: Good signature from "Linux Kernel Archives Verification Key " 的内容, 说明该包是有效的. (注: GPG签名只是保证镜像网站提供的压缩包和kernel.org所提供的是相同的, 如果在kernel.org下载, 不需要验证签名.)
    $gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E
    $gpg --verify linux-2.6.25.4.tar.bz2.sign linux-2.6.25.4.tar.bz2

3. 解压缩kernel, (注意最好不要解压到/usr/src/中。因为其中有系统正在使用的kernel headers, 这样会导致混乱)
    $cd ~/linux/package;mkdir ~/linux/src
    $tar jxvf linux-2.6.25.4.tar.bz2 -C ~/linux/src

4. 构建编译环境,安装所有的源代码编译工具
    $sudo apt-get install build-essential kernel-package libncurses5-dev
    其中的
libncurses5-dev是进行make menuconfig 时必须的curse库.

5. 开始配置内核
    $cd ~/linux/src/linux-2.6.25.4
    $make mrproper  ##删除以前编译留下的信息
    $
cp /boot/config-`uname -r` .config ##当然这里你也可以用make defconfig生成默认的.config配置文件,这是linus的配置。
    $make menuconfig ##或者make xconfig, make gconfig...
    接着就是配置了。 配置中的具体选项可以参考内核自带的帮助, menuconfig时用?查看。 更多详细的可参考金步国先生的文章. 根据发行版本的.config,建议不要删减的还是不要乱删,否则出问题的可能性比较大。只是这样编译的过程会很慢。
   


6. 编译内核
   
$sudo make-kpkg clean

    $sudo make-kpkg -initrd --initrd --append-to-version=mykernel kernel_image 
    上面的mykernel可以用你喜欢的字符串代替
    等一段时间后(我的AMD 4200+用时是30多分钟),编译完成后会在你编译内核的上层目录生成文件(我的机子用了):linux-image-2.6.25.4mykernel_2.6.25.4mykernel-10.00.Custom_i386.deb

7. 安装内核
    $cd ..
    $sudo dpkg -i linux-image-2.6.25.4mykernel_2.6.25.4mykernel-10.00.Custom_i386.deb
    完成后可以去/boot目录下看看.多了4个文件:
    config-2.6.25.4mykernel
    initrd.img-2.6.25.4mykernel
    System.map-2.6.25.4mykernel
    vmlinuz-2.6.25.4mykernel

8. 关于NVIDIA显卡驱动的问题
    由于新内核不支持NVIDIA的驱动,因此需要打补丁。 我的是集成显卡Geforce 7025.
    显卡驱动可到NVIDIA官方网站去下载,我的是:
    $wget .run
    对应的补丁在这里:
   
文件:NVIDIA-patch.tar.gz
大小:6KB
下载:下载
    应用补丁:
    $sudo sh NVIDIA-Linux-x86-169.12-pkg1.run
--apply-patch NVIDIA_kernel-169.12-2286310.diff.txt
    这时会生成文件: NVIDIA-Linux-x86-169.12-pkg1-custom.run

9. 使用新内核
    $reboot
    在grub选在新内核
    这时需要驱动NVIDIA显卡才能进x server
    $sudo sh NVIDIA-Linux-x86-169.12-pkg1-custom.run --kernel-source-path=/home/itlanger/linux/src/linux-2.6.25.4

    这时不需要选择从官方下载内核头文件了。因为已经指定了kernel-source-path, 该目录就是编译内核的目录。


10,再次reboot, 选新内核, 一切OK!


11.关于再次编译:
    如果编译内核后,只希望重新修改某些内核选项,可以不需要整个重新编译:
    只要不执行make mrproper和make kpkg-clean就行。
    $make menuconfig 更改内核配置选项后,
   
$sudo make-kpkg -initrd --initrd --append-to-version=mykernel2 kernel_image
    整个命令需要和上面编译时一样, 这样make就会在原来编译的基础上,编译新选上的模块(如果有的话)构建内核,而不会全部重新编译. 会节省很多时间。


12. 查找内核配置时本机所需驱动的方法:
   
这里有一种查找本机驱动的方法(以网卡为例子):
  • $ ls /sys/class/net/
    eth0  lo
  • $ basename $(readlink /sys/class/net/eth0/device/driver/module)
    sky2
  • $ cd /home/itlanger/linux/src/linux-2.6.25.4/
  • $ cat Makefile | xargs grep sky2
       sky2./drivers/net/Makefile:obj-$(CONFIG_SKY2) += sky2.o
  • 上面的CONFIG_SKY2就是要我的网卡需要的内核配置选项 $make menuconfig
  • 在其中搜索 SKY2(就是去掉CONFIG前缀后剩下的部分),然后选上相应的驱动就可以了。
  • 当然,这样挨个找每个设备对应的模块会比较麻烦, 可以用一个脚本实现:
  • #!/bin/bash
    #find_all_modules.sh
    #
    for i in `find /sys/ -name modalias -exec cat {} \;`;do
        /sbin/modprobe --config /dev/null --show-depends $i;
    done | rev |cut -f 1 -d '/'| rev | sort -u
  • 我的机器上探测的结果如下(出现部分FATAL信息不用去理它, 因为有些设备没有相应的内核驱动):
    • agpgart.ko
      ahci.ko
      amd74xx.ko
      ata_generic.ko
      bluetooth.ko
      cdrom.ko
      ehci-hcd.ko
      evbug.ko
      evdev.ko
      generic.ko
      hid.ko
      i2c-algo-bit.ko
      i2c-core.ko
      ide-cd.ko
      joydev.ko
      k8temp.ko
      libata.ko
      nvidiafb.ko
      nvidia.ko
      ohci-hcd.ko
      pci_hotplug.ko
      pcspkr.ko
      sata_nv.ko
      scsi_mod.ko
      shpchp.ko
      sky2.ko
      snd-hda-codec.ko
      snd-hda-intel.ko
      snd.ko
      snd-page-alloc.ko
      snd-pcm.ko
      snd-timer.ko
      soundcore.ko
      tsdev.ko
      usbcore.ko
      usbhid.ko
      usbkbd.ko
      usbmouse.ko
      vesafb.ko
      xpad.ko 
  • 然后找相应的配置选项: cat Makefile | xargs grep modname ##例如modename=usbmouse


有一个参考内核配置比较好的网站:。 比较方面,可以比对各个版本内核的配置差异。

补充: 内核api的安装:
在kernel source的顶层目录,执行make installmandocs就可以将man 手册安装到 /usr/local/man/man9下面了。





阅读(1442) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~