从www.kernel.org下载所需版本的内核文件:下面以文件linux-3.19.3.tar.xz为例
使用xshell连接linux主机,或登录linux主机
使用rz命令上传内核文件
使用xz -dk linux-3.19.3.tar.xz解压内核文件
如果提示xz not found,请帮yum换源,再用yum install xz安装
使用tar xvf linux-3.19.3.tar解压,得到文件夹:linux-3.19.3
进入文件夹: cd linux-3.19.3
使用yum安装编译需要的编译环境:yum install -y gcc make bison ncurses-devel rpm-build
复制现有内核编译的配置文件:cp /boot/config-`uname -r` .config
如果想使用旧内核配置,并自动接收每个新增选项的默认设置:sh -c ‘yes "" | make oldconfig‘
进入菜单配置:make menuconfig
根据需求,设置选项“[ ] 64-bit kernel" 是否选择,按‘y’选择,‘n’取消
进入General setup, 勾选 "Enable deprected sysfs features to support old userspace tools"
生成内核文件,通常生成在/usr/src/arch/x86/boot目录下: make bzImage
编译内核模块:make modules
安装新内核模块,即把它们放到响应的位置:make modules_install
也可以写成这样:make bzImage && make modules && make modules_install
安装内核:make install
设置系统引导管理器,以便从新的内核启动:vi /etc/grub.conf 将default=1改为default=0,保存退出
重启系统:reboot
验证内核版本:uname -a
以上任一编译过程出现错误需重新编译!
先执行!清除安装过程中的临时文件:make mrproper 或 make clean
再重复编译步骤。
如果在编译过程中出现以下错误:
错误一:
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
解决方法:
# cp include/linux/hidraw.h /usr/include/linux/
# cp include/linux/hid.h /usr/include/linux/
vi samples/hidraw/hid-example.c
将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
定位到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 menuconfig
进入选项"kernel hacking"
取消勾选:"sameple kernel code"
因为它默认引用了include的头文件,不编译即可!
错误二:
错误提示:编译错误,未知存储大小
解决办法:这两个头文件可以把错误与警告消除
vi samples/hidraw/hid-example.c
#include <arpa/inet.h>
#include <netinet/in.h>
错误三:
错误提示:Kernel panic—not syncing :vfs:unable to mount root fs on unkown—block (0,0)
错误分析:initrd-*.*.img文件有问题;未能成功挂载真正的根文件系统。
解决方法:请你确认执行了make install 命令
错误四:
错误提示:Create root device mkrootdev: label / not found
Mountingrootfilesystem
mount :error2 mounting ext3
mount :error 2mountingnone
switch root mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted to kill init .
错误分析:
1、根文件系统找不到挂载点 ,修改grub.conf文件为 root=/dev/ *
2、硬盘驱动未能找到,请看看你机器的硬盘是都是 SATA盘,是的话同样恭喜你本文对你有帮助。
错误解决:
1.、修改grub.conf文件试试,具体修改点
root=/dev/*
* 指的是原系统中/分区的挂载点。修改后,重启进入新内核系统,估计十有八九又会遇到如下错误提示:
Mounting root filesystem
mount :error6 mounting ext3
mount :error 2 mountingnone
switchroot mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted tokil linit .
如果不幸被我言中,请接着往下看。
2、硬盘驱动未能成功找到,SCSI驱动有问题。
我在内核编译升级中遇到这个问题,对内核选项选了又选,方法试了很多种,错误依旧。
最终让我无意中选正确选项,成功升级内核。
具体选项是:
Device Drivers--------SCSI
device support------SCSI
low-level drivers----Serial ATA(SATA)support 选为 M,
然后再选择相应的子选项,我选择了Intel PIIX/ICH SATA support (new)后机器就成功启动了。
错误五:
错误提示:Enforcing mode requested but no policy loaded. Halting now.
kernel panic - not syncing: Attenpted to kill init!
错误分析:原内核中启用了selinux,新内核未选择selinux的选项,不能成功启动。
解决方法:修改grub.conf文件,在root=LABEL=/ 后加入 enforcing=0
错误六:
编译完重启后出现:
switchroot: mount failed: 22
umount /initrd/dev failed: 2
kernel panic - not symcing: Attempted to kill init!
的错误,
解决办法:
重新make menuconfig, 使CONFIG_SYSFS_DEPRECATED_V2=y
也可以打开文件.config做修改和验证;
再执行:
# make bzImage
# make modules
# make modules_install
# make install
# shutdown -r "now"