1. 配置编译及安装
(1) 下载
http://www.kernel.org/pub/linux/kernel/v2.6/
首先从上面的地址下载内核源码
(2) 解压内核到当前目录
tar xjvf linux-2.6.37.tar.bz2
(3) 清理中间文件配置文件
cd linux-2.6.37
make distclean
(4) 使用正在运行的内核配置作为参考
cp /boot/config-2.6.xxx .config
(5) 配置内核
make menuconfig
(6) 环境变量问题
使用set查看所有本地定义的环境变量
CROSS_COMPILE=/usr/local/arm/3.4.1/bin/arm-linux
修改环境变量
vim /root/.bash_profile
用#注释掉 CROSS_COMPILE这一行
退出并重新登录
先exit再以root用户登录
如果不修改环境变量,执行make会报错
cc1: error unrecognized command line option-mregparm=3
cc1: error unregognized command line option -march=i686
如果不想修改环境变量,执行sudo make就没有问题
(7) 编译内核
make bzImage
编译好后位于arch/x86/boot目录下
(8) 编译内核模块
make modules
(9) 安装内核模块
make modules_install
(10) 建立要载入ramdisk的映像文件
mkinitrd -v --preload mptspi --preloaddm-mod initrd-2.6.37 2.6.37
必要参数:映像文件,内核版本
可选参数:
--builtin=<module>:跳过该模块,让mkinitrd 认为该模块已经是 builtin 的了,就不会再查找该模块了。
mkinitrd 可选参数:
--preload=<module>:添加某个模块到initrd image 中。同时该模块将在所有 scsi 模块被加载之前先被加载。
--with=<module> :添加某个模块到 initrd image 中。同时该模块将在所有 scsi 模块加载后被加载。
-v :verbose 模式
(11) 安装内核
cp arch/x86/boot/bzImage /boot/vmliuz-2.6.37
cp /lib/modules/initrd-2.6.37 /boot/
(12) 修改grub配置文件
vim /boot/grub/grub.conf
修改grub.conf文件
title Fedora (2.6.37)
root (hd0,0)
kernel /vmlinuz-2.6.37ro root=UUID=40d936f0-8ec1-42f4-9d68-1cbda2cc0e0b rhgb quiet
initrd /initrd-2.6.37
title Fedora (2.6.25-14.fc9.i686)
root(hd0,0)
kernel/vmlinuz-2.6.25-14.fc9.i686 ro root=UUID=40d936f0-8ec1-42f4-9d68-1cbda2cc0e0brhgb quiet
initrd/initrd-2.6.25-14.fc9.i686.img
2. 验证
(1) 重启
Reboot
(2) 查看内核版本
uname –r
3. 可能会遇到的问题
编译内核后重启显示
Reading all physical volumes. This maytake a while…
No volume groups found
Volume group"VolGroup00" not found
(1) 错误的原因
A:是由于无法加载磁盘硬件的模块驱动。
B: initrd是旧版本mkinitrd生成的。
(2) 解决办法
A问题的解决办法是建立要载入ramdisk的映像文件时,要加--preload mptspi --preload dm-mod 。
如果还有问题的话,下面的内容要选上,是M的要改为*
DeviceDrivers --->SCSI device support--->{*}SCSI device support
DeviceDrivers --->SCSI device support---><*>SCSI disk support
DeviceDrivers --->SCSI device support---><*>SCSI low-level drivers---> <*> BusLogic SCSI support
DeviceDrivers --->Multiple devices driversupport(RAID and LVM)---><*>Device mapper support
B问题的解决方法就是加入对旧版sysfs路径的支持,方法如下:
General setup
[*]enable deprecated sysfsfeatures to support old userspace tools
[*] enable deprecated sysfs features by default
或者在.config文件,添加:
CONFIG_SYSFS_DEPRECATED_V2=Y
修改这项是因为旧版的mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧版sysfs路 径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。