linux kernel定制(五)

5 获得驱动模块的脚本
转载请注明出处[By SELinux+]

linux kernel定制(四)

4 内核选项
内核选项这里我们主要说明驱动的选择:

如果你想了解更多的内核选项,可以参考kernel-options文件。

linux kernel定制(三)

3 定制内核
转载请注明出处[By SELinux+]
我们在选择驱动中找到的2个驱动,这次我们要去实验一下。
实验环境:kernel-2.6.40.fc15内核,kernel-2.6.40是f15最新的内核。为了更好的方便使用,我们不使用前面示例中的kernel-2.6.38的内核,其框架基本一致。
1 以太网网卡驱动e1000e
2 CDROM驱动 BLK_DEV_SR
首先我们定制内核配置选项
1加载e1000e,去掉其他的网卡驱动。
2 取消CDROM驱动
下图为我们取消网卡的其他选项,仅选择Ethernet(1000Mbit)


下图为取消CDROM 支持

保存配置,进行编译

编译安装后的效果如下:

我们发现sr的设备不存在了。而网络可以正常使用

linux kernel定制(二)

2.2寻找磁盘控制器
转载请注明出处 [By SELinux+]
本节为来实验效果,我们将进行稍微的去掉某个驱动,以达到设备无法运行的测试效果。
所有的块设备都显示在/sys/block和/sys/class/block中

和之前的网络设备一样,我们这里寻找sr设备,该设备是一个cdrom,本节我们要卸载cdrom驱动。

我们现在沿着sysfs中的设备进行寻找这个设备驱动

我们看到这个scsi磁盘控制器控制着该设备,因此scsi设备是我们必须要加到我们内核配置里面的,因为scsi控制着scsi总线上的所有磁盘设备。我们主要目标是找到控制该设备的硬件驱动
接着我们继续寻找硬件的驱动
在sysfs链接中返回上一级目录,继续寻找,试着找出控制硬件的驱动

该目录下没有driver的链接,我们继续返回上一级目录

该目录下仍没有driver的链接,我们继续返回上一级目录

该目录下我们看到了为的驱动程序了。该驱动为 driver -> ../../../bus/pci/drivers/ahci
achi便是我们要寻找的驱动,但是achi驱动是inter芯片组的驱动,对我们来说这个驱动不是我们真正想要的,我们要分析我们的设备,cdrom是在scsi设备上的,我们要找到scsi的接口。接下来,我们继续寻找最终的驱动

我们回到上一层driver -> ../../../../../../bus/scsi/drivers/sr
我们看到我们的驱动指向的是sr

我们猜想上图的sr_mod.o应该是我们所要寻找的驱动。
那么他指向的驱动为CONFIG_BLK_DEV_SR

如上图所示:我们看到来scsi CDROM 支持的选项。
当然了,寻找驱动很麻烦,我给大家准备了一个脚本,可以轻易的获得驱动。以上仅是对其分析的方法进行说明

linux kernel定制(一)

概述
本文主要内容涉及为:寻找设备驱动,定制内核配置选项以及选项说明。
1.1 天下文章一大抄
为什么文档的开始列出一个天下文章一大抄呢?天下文章一大抄,古人曾经戏谑的说“天下文章一大抄”用来形容那些文抄们,这句话听起来难听,但仔细品味,天下文章有很多是基于古人的基础而写来的,有的人在抄别人的基础上写写点评和自己的见解,有些则是东拼西凑的组成一个文章,可谓是我中有你,你中有我的境界了。
很少有技术文章或论文来自原创,在写文章的时候难免会引用别人的文章。本系列文章也会引用别人的文章和图片。
2 选择驱动
构建内核最困难的就是确定让计算机正常工作需要哪些驱动和内核选项,本章节将从怎么判别设备的驱动开始说起。
这里我们将提供两个例子来说明寻找驱动的过程。寻找网卡和磁盘设备
2 .1确定网络设备驱动
网卡在计算机系统中是最常见的和最重要的设备之一,我们要为我们的计算机配置正确的网卡驱动来让网卡为我们的计算机进行服务
首先我们查看一下我们的网卡设备

Lo 设备代表回环设备
首先我们找到我们关心的设备em1

根据这张图我们可以得出em1设备是正在工作的设备,便是我们需要的以太网设备
为了使em1设备能在新的内核中工作,我们需要为其寻找驱动文件,在sysfs文件系统中跟踪链接是很简单的:

该表输出表明e1000e正在控制我们的em1设备
这个跟踪过程是怎么实现的呢?
Basename命令将完成以下工作:
1 跟踪链接符号/sys/class/net/em1/device进入em1设备信息文件的/sys/device目录下:

进入device目录内

2 在该目录下我们看到一个绑定到这个设备驱动的符号链接driver。我们进入driver目录下:

3我们看到有一个包含这个设备驱动的符号链接module,我们要的便是这个链接目标,可以通过readlink命令得到它:

4 由于我们只关心他的模块名称,所以对readlink获得多余的路径我们并不关心。所以我们便可以取得模块名

所以

便是我们想要的结果.
现在我们已经得到模块的名称了,还需要得到控制它的内核配置选项,我们可以获得这个选项
通过Makefile文件获得

我们在内核的配置文件里搜寻到我们要找的模块e1000e(这里你需要换成自己想要找的驱动),在输出结果中我们便可以看到CONFIG_开始的模块名。如上表格CONFIG_E1000E便是我们要找的配置选项
有了配置选项我们需要找到内核中所需要的模块,然后找到该选项,进行启用该选项

在启动的界面下:

然后按下”/”键(这会启动搜索)并键入要配置的项,去掉CONFIG_部分。

点击OK,内核配置系统便会告诉你那里选择启动这个模块

我们进入内核配置系统进行配置,配置的路径如上:

取消多余的模块,选择我们仅需要的Ethernet(1000Mbit)模块
编译便可加载该模块