X86linux内核编译

1.配置编译及安装

注意:
编译内核版本为linux2.6.29
运行系统内核为linux2.6.32
在使用版本差距过大的内核进行编译时工具会出现很多问题;

(1) 下载

http://www.kernel.org/pub/linux/kernel/v2.6/

首先从上面的地址下载内核源码

(2) 将压缩包放到/usr/src解压
如果是.tar.bz2:

tar xjvf linux-2.6.29.tar.bz2 

如果是.tar.gz:

tar zxvf linux-2.6.29.tar.gz

(3) 清理中间文件配置文件

cd linux-2.6.29
make distclean

(4) 使用正在运行的内核配置作为参考

cp /boot/config-2.6.xxx     .config

(5) 配置内核
如果不需要对内核进行裁剪保存退出即可

make menuconfig

注意:
1.将窗口全屏,窗口太小会报错
2.缺少一个n开头的文件,打不开menuconfig界面可以下载安装即可
3.需要保存退出来更新.config文件

(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的映像文件
(/lib/modules/下必须有内核版本)会产生initrd-2.6.29

mkinitrd initrd-2.6.29 2.6.29

mkinitrd -v --preload mptspi --preloaddm-mod initrd-2.6.37 2.6.37

必要参数:映像文件,内核版本

可选参数:

–builtin=:跳过该模块,让mkinitrd 认为该模块已经是 builtin 的了,就不会再查找该模块了。

mkinitrd 可选参数:

–preload=:添加某个模块到initrd image 中。同时该模块将在所有 scsi 模块被加载之前先被加载。

–with= :添加某个模块到 initrd image 中。同时该模块将在所有 scsi 模块加载后被加载。

-v :verbose 模式

(11) 安装内核
将生成的两个文件挂载到/boot/下面
bzImage–>vmliuz-2.6.29
inintrd-2.6.29–>inintrd-2.6.29

cp arch/x86/boot/bzImage /boot/vmliuz-2.6.29

cp /lib/modules/initrd-2.6.29 /boot/

(12) 修改grub配置文件
修改grub.conf文件,修改之前最好对虚拟机进行备份快照防止重启死机

vim /boot/grub/grub.conf

(可以复制一下补充在下面,这样进入系统可以对系统选择启动这两处改为复制到/boot/下的新系统的名字)
Grub.conf文件介绍https://www.cnblogs.com/sunada2005/p/3416820.html)

title Fedora (2.6.29)

       root (hd0,0)

       kernel /vmlinuz-2.6xxx ro root=UUID=40d936f0-8ec1-42f4-9d68-1cbda2cc0e0b rhgb quiet       

initrd /initrd-2.6.xxx

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值