Fedora环境下编译运行带SATA硬盘的内核

硬件环境说明

HP dc7600台式机,x86系统,硬盘为SATA接口,主板自带intel 82801(ICH7芯片组) SATA控制器

软件环境说明

Fedora 6,内核版本2.6.18,该内核是为fc6发行版定制,可能与通用版本(www.kernel.org)略有不同(配置方面),具体情况不知。

编译安装过程

1.获取内核源代码

对于Fedora 6,获取源代码的方式有以下3种:

1) 安装光盘

直接从光盘查找**.src.rpm包,但并不是所有的安装光盘都肯定含有内核源代码,笔者的安装光盘就没有。

2) 官方网站

网址:http://download.fedora.redhat.com/pub/fedora/linux/core/

从官方地址可以获取当前比较新的fedora发行版的源码,但目前为止fc6及以下版本的代码都已经不提供了。

3) google

网上存在着很多各发行版的rpm包,fc6的源代码包名为kernel-2.6.18-1.2798.fc6.src.rpm

2.安装源码包

源码包一般需放在目录/usr/src下,运行rpm指令就能安装代码包。

rpm –ivh kernel-2.6.18-1.2798.fc6.src.rpm

安装过程会出现许多warning,最多的是以下2个,可以不用理睬。

warning: user brewbuilder does not exist - using root

warning: group brewbuilder does not exist - using root

安装完成后,源代码是以linux.2.4.18.tar.bz2压缩包形式存在于目录/usr/src/redhat/SOURCE/下,该目录下同时还包括了很多patch及针对不同CPUconfigure文件。

这里有必要介绍一下/usr/src目录,该目录作用就是存放源代码。在Fedora系统中,一般有2个子目录kernelredhat,默认情况下这两个目录在都不包含真正的源代码,kernel放置了编译代码的Makefileconfigure文件,redhat下面分成SOURCE, RPMS, SRPMS, BUILD, SPECS五个空目录。只有在rpm源码包后,才会在SOURCE中出现文件,同时还会在SPECS目录下出现一个kernel-2.6.spec文件,运行这个文件

rpmbuild -bp kernel-2.6.spec

可以帮助我们自动解包,编译内核源代码,但实际情况下这个文件有时不好用,因为它所标示的地址或者文件名可能有一定误差(如版本写法,内核包压缩格式),我们可以参考其命令,自己手动的进行编译,当然你也可以修改这个spec文件完成自动编译。

3.编译前的准备

    以下工作都是按照kernel-2.6.spec描述的意图,手工完成。

编译一般放在/root/rpmbuild下进行,因此

cd ~

cp -a /usr/src/redhat/ rpmbuild

   

    在用解压工具将/root/rpmbuild/SOURCE/linux.2.6.18.tar.bz2解至/root/rpmbuild/BUILD/,此时源代码树全部展开了!

    因为我们是要编译安装发行版本的内核,因此可以根据自己硬件选择/root/rpmbuild/SOURCE/xxxx.config文件(该目录下的config文件都针对发行版),将文件拷至源代码根目录下并改名替换原有的.config文件。

4.编译内核

    编译在源码根目录下进行,编译的顺序是:  

make menuconfig  //内核剪裁

make     //内核编译

make install    //安装到发行版(fedora 6)

1)     make menuconfig

该命令用于选择及裁减内核,最后保存退出后生成定制的.config文件。针对作为启动盘的SATA硬盘,必须作一些必要配置,否则无法启动。详细情况请参见后文介绍。

 

2)     make

用于生成真正的内核文件bzImage,可以在下面目录找到这个文件。

./arch/i386/boot/bzImage

 

3)     make install

自动化地关联各模块,并安装到启动项。当前fedora采用了grub引导程序,因此将会自动拷贝bzImage到目录/etc/grub/并修改该目录下的grub.conf文件,添加新的启动项。Make install不覆盖原有发行版的启动项是因为即便是在新内核不工作情况下还能通过原内核启动fedora后修改新内核。

接下来,重新启动计算机,在grub选择新生成的启动项就好了。

 

内核剪裁 ----针对SATA硬盘

对于SATA硬盘,内核剪裁时与之相关的主要有以下几个选项:

Device Drivers à ATA/ATAPI/MFM/RLL Support à []support for SATA(depreated: conflicts with libata driver)

Device Drivers à SCSI device support à <> SCSI device support

Device Drivers à SCSI device support à <> SCSI disk support

Device Drivers à SCSI device support à SCSI low-level drivers à <>SATA support

Device Drivers à SCSI device support à SCSI low-level drivers à<> Intel PIIX/ICH SATA support

其中第一条选项与后面四条是存在冲突的,因此或者选后面的,或者选第一条。关于这两种SATA的选择,可参考以下信息:

来自于网站http://cateee.net/lkddb/web-lkddb/BLK_DEV_IDE_SATA.html

There are two drivers for Serial ATA controllers.

The main driver, "libata", uses the SCSI subsystem and supports most modern SATA controllers. In order to use it you may take a look at "Serial ATA (prod) and Parallel ATA (experimental) drivers".

The IDE driver (which you are currently configuring) supports a few first-generation SATA controllers.

In order to eliminate conflicts between the two subsystems, this config option enables the IDE driver's SATA support. Normally this is disabled, as it is preferred that libata supports SATA controllers, and this (IDE) driver supports PATA controllers.

If unsure, say N.

 

本系统显然应选择后者。如果SATA硬盘作为第二块硬盘,则可以将其驱动设置为<M>模块加载方式,在系统检测到SATA硬盘时,能自动加载驱动。但如果是作为启动硬盘,则必须将上述所有选项都直接编入内核加载,否则计算机在启动时根本认不出硬盘,从而无法挂载操作系统。出现如下所示错误:

No volume groups found

Volume group “VolGroup00” not found

Unable to access resume device (/dev/VolGroup00/logVol01)

Mount:Could not find filesystem '/dev/root'

setuproot: mounting /dev failed: No Such file or directory

setuproot: error mounting /proc: No Such file or directory

setuproot: error mounting /sys: No Such file or directory

switchroot: mount failed: No Such file or directory

Kernel panic-not syncing:Attempted to kill init!

    选择完毕后,保存退出,就可以重新编译内核了。

       进一步的解释

    内核2.4.xx普遍对SATA支持不好,而内核2.6.xx一般都已经加入了对多数SATA控制器的支持。SATA接口涉及到一个非常重要的内核库libata,它提供了对SATA主控制器的通用API接口,而每一种SATA控制器都拥有自己的驱动程序,例如intel ICH芯片组提供的SATA控制器PIIX,结合这两者,使得内核能非常完善地支持SATA设备。

    SATA硬盘在启动的时候直接就使能了DMA模式,可以通过dmesg命令看到。而目前为止的SATA接口不具备切换到PIO模式工作的功能(实际上也没必要,因为DMA肯定比PIO工作更快且减轻CPU负担),在采用以下命令使能DMA时,会提示没有对应的ioctl操作,这是不同于IDE接口的地方。

#hdparm –d1 /dev/sda

==========显示============

/dev/sda:

setting using_dma to 1 (on)

HDIO_SET_DMA failed: Inappropriate ioctl for device

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值