CentOS5内核版本2.6.18升级至3.6.4
centos5.6 kernel版本:2.6.18-238.el5-i686
所编译的kernel版本:linux-3.6.4.tar.bz2
1.将新内核cp到/usr/src目录下,然后释放内核源代码:
#bzip2 -d linux-3.6.4.tar.bz2 -> linux-3.6.4.tar #tar -xvf linux-3.6.4.tar
2.开始设置内核编译模块及参数
make menuconfig
设置编译成模块或是否编译进内核或不选,这里增加了新内核对于虚拟化的支持模块,其他保持不变,保存退出。
make mrproper or make clean
删除安装过程中产生的大量临时文件
注意:如果直接跳过下面步骤,在make bzImage过程中会报以下错误:
In file included from /usr/include/sys/time.h:31, from /usr/include/linux/input.h:12, from samples/hidraw/hid-example.c:14: /usr/include/sys/select.h:78: 错误:与 ‘fd_set’ 类型冲突 /usr/include/linux/types.h:12: 错误:‘fd_set’ 的上一个声明在此 In file included from /usr/include/linux/input.h:14, from samples/hidraw/hid-example.c:14: /usr/include/sys/types.h:62: 错误:与 ‘dev_t’ 类型冲突 /usr/include/linux/types.h:13: 错误:‘dev_t’ 的上一个声明在此 /usr/include/sys/types.h:67: 错误:与 ‘gid_t’ 类型冲突 /usr/include/linux/types.h:27: 错误:‘gid_t’ 的上一个声明在此 /usr/include/sys/types.h:72: 错误:与 ‘mode_t’ 类型冲突 /usr/include/linux/types.h:15: 错误:‘mode_t’ 的上一个声明在此 /usr/include/sys/types.h:77: 错误:与 ‘nlink_t’ 类型冲突 /usr/include/linux/types.h:16: 错误:‘nlink_t’ 的上一个声明在此 /usr/include/sys/types.h:82: 错误:与 ‘uid_t’ 类型冲突 /usr/include/linux/types.h:26: 错误:‘uid_t’ 的上一个声明在此 In file included from /usr/include/sys/types.h:133, from /usr/include/linux/input.h:14, from samples/hidraw/hid-example.c:14: /usr/include/time.h:105: 错误:与 ‘timer_t’ 类型冲突 /usr/include/linux/types.h:22: 错误:‘timer_t’ 的上一个声明在此 In file included from /usr/include/linux/input.h:14, from samples/hidraw/hid-example.c:14: /usr/include/sys/types.h:235: 错误:与 ‘blkcnt_t’ 类型冲突 /usr/include/linux/types.h:114: 错误:‘blkcnt_t’ 的上一个声明在此 samples/hidraw/hid-example.c:15:26: 错误:linux/hidraw.h:没有那个文件或目录 samples/hidraw/hid-example.c: In function ‘main’: samples/hidraw/hid-example.c:48: 错误:‘rpt_desc’ 的存储大小未知 samples/hidraw/hid-example.c:49: 错误:‘info’ 的存储大小未知 samples/hidraw/hid-example.c:65: 错误:‘HIDIOCGRDESCSIZE’ 未声明 (在此函数内第一次使 用) samples/hidraw/hid-example.c:65: 错误:(即使在一个函数内多次出现,每个未声明的标识符 在其 samples/hidraw/hid-example.c:65: 错误:所在的函数内只报告一次。) samples/hidraw/hid-example.c:73: 错误:‘HIDIOCGRDESC’ 未声明 (在此函数内第一次使用) samples/hidraw/hid-example.c:84: 警告:隐式声明函数 ‘HIDIOCGRAWNAME’ samples/hidraw/hid-example.c:91: 警告:隐式声明函数 ‘HIDIOCGRAWPHYS’ samples/hidraw/hid-example.c:98: 错误:‘HIDIOCGRAWINFO’ 未声明 (在此函数内第一次使用) samples/hidraw/hid-example.c:49: 警告:未使用的变量 ‘info’ samples/hidraw/hid-example.c:48: 警告:未使用的变量 ‘rpt_desc’ samples/hidraw/hid-example.c: In function ‘bus_str’: samples/hidraw/hid-example.c:171: 错误:‘BUS_VIRTUAL’ 未声明 (在此函数内第一次使用) make[2]: *** [samples/hidraw/hid-example] 错误 1 make[1]: *** [samples/hidraw] 错误 2 make: *** [vmlinux] 错误 2
通过百度,找到如下解决方法,经实验证明可行。
vi samples/hidraw/hid-example.c
(参考:http://www.uplook.cn/index-Index-show-view157832.html
在Linux下编译程序有时会遇到这种问题,这貌似是一个Linux历史遗留问题: 把所有#include <sys/xxx.h>都提到最前面,把#include <linux/xxx.h>的包含放在其后,就可以编译通过了,之所以出现面的问题是存在循环引用所致。 )
将13-15行的如下3行移动到33行以后。 13 #include <linux/types.h> 14 #include <linux/input.h> 15 #include <linux/hidraw.h> 29 #include <sys/ioctl.h> 30 #include <sys/types.h> 31 #include <sys/stat.h> 32 #include <fcntl.h> 33 #include <unistd.h>
vi /usr/include/linux/input.h
line 647 #define BUS_PCI 0x01 #define BUS_ISAPNP 0x02 #define BUS_USB 0x03 #define BUS_HIL 0x04 #define BUS_BLUETOOTH 0x05 /*以下一行为新增*/ #define BUS_VIRTUAL 0x06 #define BUS_ISA 0x10 #define BUS_I8042 0x11 #define BUS_XTKBD 0x12 #define BUS_RS232 0x13 #define BUS_GAMEPORT 0x14 #define BUS_PARPORT 0x15 #define BUS_AMIGA 0x16 #define BUS_ADB 0x17 #define BUS_I2C 0x18 #define BUS_HOST 0x19 #define BUS_GSC 0x1A /*以下两行为新增*/ #define BUS_ATARI 0x1B #define BUS_SPI 0x1C
完成以上修改后,开始编译内核。
make bzImage
建立内核,通常在/usr/src/arch/x86/boot目录下
make modules
编译内核模块;(可选)
make modules_install
安装新内核模块,即把内核模块存放到相应的位置
make install
安装内核
#设置使用新内核启动。
# sed -i 's#default=1#default=0#g' grub.conf
# vi /boot/grub/grub.conf
/boot/grub/grub.conf内容如下(红色标识为对应的启用新内核):
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd-version.img #boot=/dev/sdadefault=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenutitle CentOS (3.6.4) root (hd0,0) kernel /vmlinuz-3.6.4 ro root=LABEL=/ initrd/initrd-3.6.4.img title CentOS (2.6.18-238.el5) root (hd0,0) kernel /vmlinuz-2.6.18-238.el5 ro root=LABEL=/ initrd /initrd-2.6.18-238.el5.img
重启系统
# reboot
验证内核版本
# uname -a
到此为止,内核成功升级到3.6.4。
none