因为想使用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
本文介绍了如何编译Linux 2.6.34内核,包括下载新版本内核源码,进行make,make modules_install及make install等关键步骤,适用于对Linux内核感兴趣的开发者。


被折叠的 条评论
为什么被折叠?



