x86平台Linux内核配置编译和安装

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内的硬盘信息节点。

 


 

你可能感兴趣的:(Module,command,平台,deprecated,X86,linux内核)