linux 定制内核,Linux 内核定制-准备工作

收集信息

首先,大部分过程可以使用正常的非特权系统用户来执行。直到我们真正安装最终的内核时才需要root权限。无论如何,这个用户必须能访问系统。如果一个用户被限制到它的home目录将不行(如web虚拟主机上提供的shell帐户就不行)。

我们将在终端里敲入命令,可以是tty登陆或xterm或类似的GUI终端程序登陆到本地机器或远程机器(如ssh)

让我们假设已经登陆到一台我们并不了解的机器上。首先要做的事情是弄清楚它上面安装的哪个linux发行版。通常,在/etc目录下有一个文本文件来标明你的发行版的信息。它可能叫做release,issue,redhat-release,slackware-version等,/etc/issue这个文件通常被用来显示欢迎信息,当你登陆到系统时你就会看到它。然后我们要知道正在运行的内核版本。

你可以看到我在$符号后敲入的命令(bash shell环境):

a4c26d1e5885305701be709a3d33442f.png

我们查看文件/etc/issue后看到我们正在运行的是Redhat Linux

7.2。uname命令给出了内核版本,它是普通的,redhat提供的2.4.18单处理器内核。

检查启动信息将得到丰富的有关当前运行内核的信息。这个信息可以使用dmesg命令的输出来方便地收集。

a4c26d1e5885305701be709a3d33442f.png

它将让你看到当前运行的内核的特征和硬件初始化信息,如IDE控制器。

a4c26d1e5885305701be709a3d33442f.png

dmesg输出的第一行向我们展示了内核的版本号,编译人和编译主机,当它被编译后。编译人编译后将它发布。让人非常好奇的是,这台Redhat

7.2服务器当前运行的内核是在Redhat

7.3上编译的。那仅仅意味着那个人已经安装了一个新版本的二进制内核包。下面的几行,我们可以看到这台机器有1G内存。(这意味着我们将可以在内核中开启HIGHMEM支持)

在你的机器上检验dmesg命令的输出。当我们配置新内核时会用到其中一些信息。

检查/proc虚拟文件系统下的许多文件也可以收集到丰富的信息,/proc文件系统是由内核提供与可变内核数据结构关联的接口。

要找到关于处理器的详细信息,我们用cat命令查看/proc/cpuinfo。

a4c26d1e5885305701be709a3d33442f.png

我们已经从dmesg命令输出中清楚了我们是一个单处理器系统(不是一个SMP架构多处理器系统),并且我们有一颗运行在接近2GHz的Pentium4处理器,我们也可以看到处理器支持的标志信息(如指令)

接下来,我们要知道芯片组和PCI总线设备类型,可以使用不加参数的lspci命令来获取到一个简单的信息。

a4c26d1e5885305701be709a3d33442f.png

好,现在我们知道了是Intel 845芯片组,ICH2

IDE控制器和主板集成的AC’97声卡和Nvidia显示控制器。

如果要知道更多的细节信息,请使用lspci –v命令。

如果你当前运行的内核是向后兼容的话—“legacy /proc/pci

support”,用cat查看/proc/pci可以看到更详细的信息。

a4c26d1e5885305701be709a3d33442f.png

这当中大部分信息没什么意义,如其中的Intel

82801BA/BAM/CA/CAM以太网控制器,我们猜测它可能是一个主板集成的设备,幸运的是,我们已经从dmesg的输出中弄清楚了。

a4c26d1e5885305701be709a3d33442f.png

我们知道这是使用Intel EtherExpress Pro驱动,主板集成的以太网控制器。

好,这是一个Intel系统,它与AMD系统有什么不同之处?这儿有几个例子。第一个例子,lspci命令的输出告诉我们是VIA芯片组,假如这是我们工作的机器,在配置内核的时候,这个信息非常重要。

a4c26d1e5885305701be709a3d33442f.png

下面是一些相关的dmesg输出摘录

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

注意IDE控制器的不同之处,请与上面的Intel配置比较。

现在回到Intel Pentium

4架构,即我们将要用它工作的机器,在开始内核代码编译前,我们还有许多事情需要考察。

我们可以看到当前运行内核加载了哪些模块,使用lsmod命令就可以,注意如果不是root用户,你可能需要输入命令的的全路径才行。

a4c26d1e5885305701be709a3d33442f.png

普通输出没什么信息,注意这里有部分驱动不是作为模块加载的,为了让我们定制的内核在没有initrd的情况仍然可以启动,类似ext3文件系统和磁盘控制器驱动都必须包含进内核。我们可以将网卡驱动编译为一个模块。

我们需要查看文件系统的布局,同时也要关注我们使用的分区设备和文件系统类型。我们已经可以从dmesg输出看到一些信息,但我们也可以用df命令的输出来查看。-h和-T参数的含义分别是“容易读的”和“显示类型”。

a4c26d1e5885305701be709a3d33442f.png

这是一个非常漂亮的安装,一个小的启动分区存放内核和启动加载器,一个大的根分区放在第一块IDE硬盘上,/dev/hda。这里没有scsi磁盘分区,如果有它将显示为/dev/sda1,sda2,sdb1等。此处的文件系统使用的是ext3。temfs被挂载(/dev/shm文件系统),它与ramdisk类似,但它更具动态性。没有内存被真正使用,直到有一些内容复制到那里和当被移除的时候,它存在于页面缓存或swap中。

我们必须查看/etc/fstab文件,这是系统在初始化时加载你文件系统的文件系统表,有一些非常重要的内容需要接受检查。注意在fstab中空格是不重要的,只要在参数之间至少有一个空白或tab就可以了。

a4c26d1e5885305701be709a3d33442f.png

看最前面以LABEL=开头的2行,卷标的内容提示支持ext3文件系统,在Redhat系统中,默认情况下,分区通过卷标来挂载,使得切换磁盘驱动器变得很容易。

在redhat内核上需要安装一些补丁,如果我们建立一个标准的内核,系统启动脚本不能加载我们的文件系统,系统将不能启动。

注意:当你打上补丁后,通过卷标加载成为可能,假如你要使用initrd,你可以不用改变它。

因此我们建议使用一个文本编辑器编辑fstab,使用真实的分区设备,做起来并不困难,因为我们已经从df

–hT输出知道了/文件系统挂载在/dev/hda2,/boot挂载在/dev/hda1,因此改变LABEL=语句,像下面这样:

a4c26d1e5885305701be709a3d33442f.png

为你的系统在fstab中使用真实的分区设备,同时你也应确定在启动加载配置文件中没有类似root=’label=/’或内核甚至不能加载root文件系统的语句,本文稍后将会提及到。

在编辑类似fstab的配置文件时请小心,如果你破坏了它们,你可能需要一张紧急救援磁盘来修复它们,在编辑前创建一个备份是非常不错的注意,当你需要恢复时只要重新命名即可。

现在我们已经收集到足够的信息,可以开始了,下面的任务是解压缩内核代码包,开始阅读那些文档文本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值