Linux 2.6.34内核编译步骤

本文介绍了如何编译Linux 2.6.34内核,包括下载新版本内核源码,进行make,make modules_install及make install等关键步骤,适用于对Linux内核感兴趣的开发者。

  因为想使用26sec相关的东西,所以想下载个新版本的kernel玩玩。


  基础知识:
  uname -r
  2.6.18-164.e15xen
  [主版本].[次版本].[发布版本(release)]-[修改版本]
     2    .   6    .     18            - 164
  次版本为奇数是“测试性质的”如2.3, 2.5
  次版本为偶数的“稳定版本”如2.4,2.6

   基础设施:
   VMWare + CentOS 5.4 2.6.18-164.el5xen
   终端:AbsoluteTelnet(编译内核时还是不要用终端,直接进VMware编译,不然终端一挂,编译过程就中断)

   相同的主次版本表示使用的函数库差不多,可以直接升级到较高的发布版本。
   所以由2.6.18->2.6.34可直接升级。
 
  编译步骤:
  1,下载内核源码,最新貌似为2.6.38(2012-04-22),因为上不了网,还是上回下载的2.6.34,就使用34吧。
  2,tar -jxvf linux2.6.34.tar.bz2   (gz压缩格式使用-zxvf解压)
  3,make menuconfig 配置内核
     这次只关注Ipsec,所以在Networking里把Ipsec的所有选项以模块M的形式编进内核即可(默认已经是M)。
     *表示编进核心。
      其它选项没好好研究过,有空有需要了再看看吧。可以参考《鸟哥私房菜:基础学习》、《Linux内核修炼之道》
  4,编译内核,执行make -j2(听说可以加快编译速度)。前两年编过一回内核,大概得40多分钟,现在不知道要多长时间?(1个半小时……)
  5,安装内核模块,执行make modules_install
  6,安装内核,make install
     Linux所谓的安装即是拷贝下文件,修改下配置文件,rpm -ivh安装rpm包时也是同理,所以把相关配置文件和内核文件拷走放到其它2.6内核中即可。
     (1),复制内核映像到/boot,编译成功后生成的内核映像文件bzImage放在arch/x86/boot/中,该文件复制到
         /boot后重命名为vmlinuxz-<kernal-version>
     (2),生成initrd-<kernal-version>.img文件  
     (3),配置引导程序(一般是/boot/grub/grub.conf,还有一种LILO没遇见过)
  7,reboot进入新内核。

上面那些就依葫芦画瓢没什么难度,关键时编译和启动过程出现了问题:
1,ld: unrecognized option '--build-id'
 编译不过

  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
ld: unrecognized option '--build-id'
ld: use the --help option for usage information
make: *** [.tmp_vmlinux1] Error 1
[root@localhost linux-2.6.34]# ld --help
Usage: ld [options] file...

直接把Makefile中的--build-id注掉,不知道--build-id有什么,既然在我的宿主系统中无法链接,那先把它注掉。
重新make,之前编译好的就不重新编译了,一会就跳到刚才出错的地方,编译过了这步。

2,还是编译不过,不过是空间不足,删些东西吧。
CC      drivers/usb/atm/speedtch.mod.o
  LD [M]  drivers/usb/atm/speedtch.ko
ld: final link failed: No space left on device
make[1]: *** [drivers/usb/atm/speedtch.ko] Error 1
make: *** [modules] Error 2

[root@localhost linux-2.6.34]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      9.1G  9.1G     0 100% /
/dev/sda1              99M   20M   75M  21% /boot
tmpfs                 106M     0  106M   0% /dev/shm
/dev/hdc              3.8G  3.8G     0 100% /mnt
/dev/hdc              3.8G  3.8G     0 100% /opt

编译通过,reboot出的问题:
3,insmod /lib/dm-region-hash.ko -1 File exists
解决方法:
  971  cp /boot/initrd-2.6.34-ipsec.img .
  972  ls
  973  ls
  974  mkdir newinitrd
  975  cd newinitrd/
  976  ls
  977  zcat ../initrd-2.6.34-ipsec.img | cpio -i
  978  ls
  979  vim init
  980  ls
  981  find . | cpio -c -o > ../initrd-2.6.34-topsec
  982  cd ..
  983  ls
  985  gzip -9 < initrd-2.6.34-topsec > initrd-2.6.34-topsec.img
  986  ls
  987  ls -alh
  988  cp initrd-2.6.34-topsec.img /boot/
  989  cd /boot/
  990  ls
  991  vim grub/grub.conf
  992  cd grub/
  993  cp grub.conf{,_bak} -v
  994  vi grub.conf
  995  vim grub.conf
  996  cd /tmp/newinitrd/
  997  ls
  998  vim init
  999  reboot
以上操作内容:解开/boot/initrd-2.6.34-ipsec.img,编辑init后重新打包后放在/boot里替换之前的,
或者用一个新的名字,再编辑下/boot/grub/grup initrd文件的名字即可。
  init文件修改内容:
  init里echo "Loading dm-region-hash.ko module"
  insmod /lib/dm-region-hash.ko
  执行了两遍,删一条即可。
 
4,could not find filesystem /dev/root
解决方法:
    修改make menuconfig后生成的文件.config
    打开CONFIG_SYSFS_DEPRECATED=y

  重新make(这回就快了);make modules_install;make install

 当然再重复下第3步操作.


题外话:  
 一、怎样把当前编译好的新内核移到相同宿主的linux中?
    cd /boot
    把以下文件打包:
    vmlinuz-2.6.34-ipsec
    System.map-2.6.34-ipsec
    initrd-2.6.34-ipsec.img
    config-2.6.34-ipsec
    grub/grub.conf

    cd /lib/modules/
    把2.6.34-*打包。350Mb左右

  把以上两个包拷到对应的目录释放即可。做好备份工作。

 二、怎么让内核加载自带的Netkey或者加载openswan的klips

相关ko
  INSTALL net/ipv4/ah4.ko
  INSTALL net/ipv4/esp4.ko
  INSTALL net/ipv4/inet_diag.ko
  INSTALL net/ipv4/ip_gre.ko
  INSTALL net/ipv4/ipcomp.ko
  INSTALL net/ipv4/ipip.ko
  INSTALL net/ipv4/netfilter/arp_tables.ko
  INSTALL net/ipv4/netfilter/arpt_mangle.ko
  INSTALL net/ipv4/netfilter/arptable_filter.ko
  INSTALL net/ipv4/netfilter/ip_queue.ko
  INSTALL net/ipv4/netfilter/ip_tables.ko
  INSTALL net/ipv4/netfilter/ipt_ECN.ko
  INSTALL net/ipv4/netfilter/ipt_LOG.ko
  INSTALL net/ipv4/netfilter/ipt_REJECT.ko
  INSTALL net/ipv4/netfilter/ipt_ULOG.ko
  INSTALL net/ipv4/netfilter/ipt_addrtype.ko
  INSTALL net/ipv4/netfilter/ipt_ah.ko
  INSTALL net/ipv4/netfilter/ipt_ecn.ko
  INSTALL net/ipv4/netfilter/iptable_filter.ko
  INSTALL net/ipv4/netfilter/iptable_mangle.ko
  INSTALL net/ipv4/netfilter/iptable_raw.ko
  INSTALL net/ipv4/tcp_cubic.ko
  INSTALL net/ipv4/tcp_diag.ko
  INSTALL net/ipv4/tcp_highspeed.ko
  INSTALL net/ipv4/tcp_htcp.ko
  INSTALL net/ipv4/tcp_hybla.ko
  INSTALL net/ipv4/tcp_lp.ko
  INSTALL net/ipv4/tcp_scalable.ko
  INSTALL net/ipv4/tcp_vegas.ko
  INSTALL net/ipv4/tcp_veno.ko
  INSTALL net/ipv4/tcp_westwood.ko
  INSTALL net/ipv4/tunnel4.ko
  INSTALL net/ipv4/xfrm4_mode_transport.ko
  INSTALL net/ipv4/xfrm4_mode_tunnel.ko
  INSTALL net/ipv4/xfrm4_tunnel.ko
  INSTALL net/ipv6/ah6.ko
  INSTALL net/ipv6/esp6.ko
  INSTALL net/ipv6/ip6_tunnel.ko
  INSTALL net/ipv6/ipcomp6.ko
  INSTALL net/ipv6/ipv6.ko
  INSTALL net/ipv6/netfilter/ip6_queue.ko
  INSTALL net/ipv6/netfilter/ip6_tables.ko
  INSTALL net/ipv6/netfilter/ip6t_LOG.ko
  INSTALL net/ipv6/netfilter/ip6t_REJECT.ko
  INSTALL net/ipv6/netfilter/ip6t_ah.ko
  INSTALL net/ipv6/netfilter/ip6t_eui64.ko
  INSTALL net/ipv6/netfilter/ip6t_frag.ko
  INSTALL net/ipv6/netfilter/ip6t_hbh.ko
  INSTALL net/ipv6/netfilter/ip6t_ipv6header.ko
  INSTALL net/ipv6/netfilter/ip6t_rt.ko
  INSTALL net/ipv6/netfilter/ip6table_filter.ko
  INSTALL net/ipv6/netfilter/ip6table_mangle.ko
  INSTALL net/ipv6/netfilter/ip6table_raw.ko
  INSTALL net/ipv6/sit.ko
  INSTALL net/ipv6/tunnel6.ko
  INSTALL net/ipv6/xfrm6_mode_beet.ko
  INSTALL net/ipv6/xfrm6_mode_transport.ko
  INSTALL net/ipv6/xfrm6_mode_tunnel.ko
  INSTALL net/ipv6/xfrm6_tunnel.ko
  INSTALL net/key/af_key.ko
  INSTALL net/mac80211/mac80211.ko
  INSTALL net/netfilter/ipvs/ip_vs.ko
  INSTALL net/netfilter/ipvs/ip_vs_dh.ko
  INSTALL net/netfilter/ipvs/ip_vs_ftp.ko
  INSTALL net/netfilter/ipvs/ip_vs_lblc.ko
  INSTALL net/netfilter/ipvs/ip_vs_lblcr.ko
  INSTALL net/netfilter/ipvs/ip_vs_lc.ko
  INSTALL net/netfilter/ipvs/ip_vs_nq.ko
  INSTALL net/netfilter/ipvs/ip_vs_rr.ko
  INSTALL net/netfilter/ipvs/ip_vs_sed.ko
  INSTALL net/netfilter/ipvs/ip_vs_sh.ko
  INSTALL net/netfilter/ipvs/ip_vs_wlc.ko
  INSTALL net/netfilter/ipvs/ip_vs_wrr.ko
  INSTALL net/netfilter/nfnetlink.ko
  INSTALL net/netfilter/nfnetlink_log.ko
  INSTALL net/netfilter/nfnetlink_queue.ko
  INSTALL net/netfilter/x_tables.ko
  INSTALL net/netfilter/xt_CLASSIFY.ko
  INSTALL net/netfilter/xt_DSCP.ko
  INSTALL net/netfilter/xt_HL.ko
  INSTALL net/netfilter/xt_MARK.ko
  INSTALL net/netfilter/xt_NFQUEUE.ko
  INSTALL net/netfilter/xt_SECMARK.ko
  INSTALL net/netfilter/xt_comment.ko
  INSTALL net/netfilter/xt_dccp.ko
  INSTALL net/netfilter/xt_esp.ko
  INSTALL net/netfilter/xt_hl.ko
  INSTALL net/netfilter/xt_length.ko
  INSTALL net/netfilter/xt_limit.ko
  INSTALL net/netfilter/xt_mac.ko
  INSTALL net/netfilter/xt_mark.ko
  INSTALL net/netfilter/xt_multiport.ko
  INSTALL net/netfilter/xt_physdev.ko
  INSTALL net/netfilter/xt_pkttype.ko
  INSTALL net/netfilter/xt_policy.ko
  INSTALL net/netfilter/xt_quota.ko
  INSTALL net/netfilter/xt_realm.ko
  INSTALL net/netfilter/xt_sctp.ko
  INSTALL net/netfilter/xt_statistic.ko
  INSTALL net/netfilter/xt_string.ko
  INSTALL net/netfilter/xt_tcpmss.ko
  INSTALL net/netfilter/xt_tcpudp.ko
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值