当前位置: 首页>>技术教程>>正文


关于Linux内核配置的In-depth HOWTO

, ,

虽然我们之前谈到内核编译和配置,我们专注于总体思路。这次,我们想更深入地了解配置部分,为您提供定制内核以使其完全匹配您的硬件时所需的有用建议。
其背后的主要思想是,您将需要非常了解您的硬件,以便为其专门构建内核。首先,我们将介绍编译内核所需的内容,然后,我们将进行Linux内核的配置,编译和安装。请注意,这一次,如果您编译香草内核或发行版内核,不是很重要。但是,我们建议您使用”modus operandi”,这当然并不意味着您必须遵循。阅读本指南后,您将可以决定最适合您的方法。我们希望您对Linux系统内部知识和开发工具有一定的了解。

您将需要什么

从现在开始,如前所述,我们将向您展示我们如何做到这一点,因此,除非另有说明,否则您将阅读的所有内容都是特定于我们的系统的。在我们的内核源代码树中键入’du -h’将显示1.1G。这是在我们键入’make clean’之后。简而言之,我们最好为内核树提供至少2.5G的可用空间,因为代码会不断添加,并且目标文件会占用一些空间。另外,/lib /modules /会随着时间的流逝使用大量磁盘,并且,如果您有单独的/boot分区,那么这也可能会变得拥挤。

当然,在配置内核之后,您将需要对其进行编译,因此必须存在通常的疑问:make,git,gcc,menuconfig的readline库…说到git,您可能听说过最新的中断kernel.org,因此,如果您尝试克隆通常的位置或尝试拉出,则会得到

$  git pull
fatal: Unable to look up git.kernel.org (port 9418) (Name or service not known) 

您可以做的是使用Linus Torvalds宣布的git树的新临时位置:

 $ git pull git://github.com/torvalds/linux.git 



(adsbygoogle = window.adsbygoogle || [])。push({});


当然,如果要设置新的Linux内核源代码树,请用clone替换pull。有些人仍然建议将源树存储在/usr /src中,但是我们和许多其他人反对:使用您的主文件夹并以root身份发出命令只要需要的时候。

即使我们在本教程中将内核缩小,但仍需要一些功能才能在适当的时间进行编译。因此,在现代的multi-core系统上,大约需要15分钟,而在较早,较慢的系统上,则可能需要一天左右的时间。编译大型项目给计算机特别是内存带来了很大压力。如果您每次尝试都看到随机的Signal 11错误出现在代码的不同位置,请re-seat内存,清洁插槽或更换RAM。如今,它非常便宜,而且如果主板支持的话,您可能会获得比以前更快的内存。

让我们进入“了解您的硬件”部分。如果您已经确信自己知道计算机内幕的内容,则可以跳过此部分。如果没有,或有任何疑问,请继续阅读。花点时间来学习这部分,因为这对于为您的计算机特别是制作内核至关重要。在我们的Debian盒子上,运行

 # lspci -vv > lspcioutput

创建一个名为’lspcioutput’的文件(当然,可以根据需要更改名称),并用命令lspci的信息填充它,详细地运行以获取更多详细信息。使用您喜欢的编辑器打开创建的文件,并将其放在手边。阅读所有内容,以获取有关硬件组件的一般想法。继续我们的示例,这是在以太网控制器部分的lspci输出中出现的内容:

00:06.0 Ethernet controller: nVidia Corporation MCP65 Ethernet (rev a3)
        Subsystem: Giga-byte Technology Device e000
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- 
SERR- FastB2B- DisINTx+
         Status: Cap+ 66MHz+ UDF- 
FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0 (250ns min, 5000ns max)
Interrupt: pin A routed to IRQ 42
Region 0: Memory at f6007000 (32-bit, non-prefetchable) [size=4K]
Region 1: I/O ports at c800 [size=8]
Capabilities: [44] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable+ DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable+ Count=1/8 Maskable+ 64bit+
Address: 00000000fee0300c Data: 4171
Masking: 000000fe Pending: 00000000
Capabilities: [6c] HyperTransport: MSI Mapping Enable- Fixed+
Kernel driver in use: forcedeth

如您所见,您会获得许多有关硬件的信息,我们可能需要对这些信息进行排序才能获得所需的信息。在这种情况下,我们需要的是名称(nVidia以太网MCP65)和使用的驱动程序,即forceeth。如果要找出需要在内核配置中启用哪些选项才能获取Forcedeth模块,请使用Google的“ forcedeth kernel config”,您将发现我们正在寻找的是CONFIG_FORCEDETH。简单。

顾名思义,lspci不是one-stop商店。通常,/proc和/sys将为您提供有关硬件的大量信息。例如,在lspci输出中找不到的是CPU信息。 /proc /cpuinfo可以准确帮助您提供所需的信息。如果您要支持外部USB-connected设备,则lsusb是您的伙伴。如果您不确定某个特定的硬件需要什么驱动程序,而Google无法帮助您,请尝试启用所有似乎相关的选项。开销将是微不足道的,在您获得一些经验之后,您将更好地了解保持启用状态和禁用状态。别指望从一开始就获得完美的内核,实践就是完美的。

当您认为已涵盖所有基础之后,请坐下来再三考虑:您将如何做?可能将来需要吗?外部读卡器?一个iPod?启用驱动程序,您将避免将来因缺少硬件支持而出现问题。我们建议您使用经典的笔和纸来写下硬件配置的列表,详细列出所用的内核模块等。文件来来往往,硬盘也一样,但是将纸贴在盒子上会有所帮助您和其他人。您如何使用计算机?您是否使用虚拟化?启用Xen和/或KVM支持。您的发行版是否执行SELinux或Tomoyo或其他安全框架?你需要它吗?启用各个部分。

现在我们已经设置好了,让我们进入配置部分。



(adsbygoogle = window.adsbygoogle || [])。push({});


组态

前面我们说过,我们将描述我们的方法:好,就在这里。我们使用发行版的配置,当然,如果我们看到它可以与我们的硬件一起使用,这通常会发生,因为我们没有任何异国情调。

 $ cp /boot/config-$version $location_of_kernel_source_tree/.config 

使用与您要编译的内核尽可能接近version-wise的版本。因此,您将确保不会遇到兼容性问题。如果您只想按原样使用配置文件,请发出

 $ make oldconfig 

然后继续进行编译。但是,我们不想要那样,所以我们只会做

 $ make menuconfig 

我们将看到一个基于curses的易于使用的菜单。转到“加载备用配置文件”,然后输入配置文件的名称(在我们的示例中为.config,建议使用)。现在,您可以继续更改选项并最后保存配置文件。

在”General setup”中,我们通常保持原样,但您当然可以自由更改任何您喜欢的东西。通常会出现警告:请勿更改您不知道的内容。请记住,这种类型的配置是基于依赖项的:如果禁用/启用某个项目,则依赖于该项目的那些项目也会受到影响。因此,例如,如果禁用网络,则所有network-related选项也将自动被禁用。必须更改“处理器类型和功能”以反映您的目标处理器:我们有一个基于AMD K8的CPU,因此我们选择了“处理器家族-> Opteron /Athlon64 /Hammer /K8”。在”Networking support”中,由于这是具有简单以太网连接的台式机/工作站,因此我们禁用了业余无线电,红外,蓝牙,无线和其他不适用的选项。当然,您的里程可能会并且会有所不同。请记住,每个项目都有一个相关的“帮助”菜单,可通过屏幕底部的”Help”按钮进行访问,您将找到驱动程序的作用,其硬件覆盖范围等。进一步了解”Device drivers”,在这里您可以可能要禁用很多,因为这是Linux支持的大部分硬件驱动程序。请随时准备好硬件配置表,并做出明智的选择。如果一开始您的新内核没有启动,请启动一个工作内核(将启动加载程序的超时设置为10秒左右,以便您有时间选择),然后看看出了什么问题。使用in-tree文档和Internet。

进一步讲”Kernel hacking”,如果您想成为(内核)开发人员,可以在这里找到一些选项来帮助您隔离和记录错误。否则,请按原样保留这些内容,因为调试选项可能会使系统膨胀并减慢系统速度。完成操作后,选择“保存备用配置文件”并输入’.config'(再次推荐),然后Ëxit。现在您可以编译内核了。不过,最后的建议是:从安全起见,然后逐渐消除不需要的驱动程序,直到获得苗条且可以正常工作的内核。从大变小比从其他方法变容易。



(adsbygoogle = window.adsbygoogle || [])。push({});


建造和安装

在较早的文章中,我们描述了在基于Debian的系统上构建和安装内核。实际上,任何系统上的构建都是相同的:

 $ make 

将构建您稍后安装的内核映像。您可以使用-jñ作为争论,ñ将是您系统中的CPU核心数+ 1,以便启用并行构建,这当然会加快处理速度。下一步,

 # make modules_install

也是普遍的。不同发行版之间的区别是:Fedora,OpenSUSE,Mandriva,Slackware和Debian(还有其他)也需要’make install’。例如,Arch并不需要您通过良好的cp手动安装内核。老实说,我们并没有尝试所有发行版,但是其中一些最受欢迎。我们希望我们的经验能对您有所帮助。您将找到每种发行版的在线安装自定义内核的方法,或者您想要创建一个内核软件包并仅使用常规的软件包管理工具进行安装。但是请记住,此处的发行版文档优先。

再次提及我们Debian /Ubuntu内核文章,此处描述的安装步骤也适用于基于RPM的发行版,只有一些细微差别,例如bootloader config update命令。我们建议您创建一个程序包,以便您更有条理。如果您选择不这样做,并且想要删除内核,请转至/boot并以root身份删除config- $ version,initrd.img- $ version(如果适用),System.map- $ version和vmlinuz- $ version,以及/lib /modules /$ version /。

现在…您已经安装了新内核,让我们对其进行测试!重新引导并选择新的内核进行引导。如果它是普通内核,并且您发现了错误(例如,糟糕或死机),请阅读文档(内核树根目录中的REPORTING-BUGS)并尽可能彻底地记录您的错误。当然,如果它是distro-patched内核,请使用该发行版的错误报告工具,维护人员将与上游联系以解决问题。始终随身携带一个运行良好的内核和配置文件,以节省一些时间和精力。一个好的自定义内核通常会为您提供一个响应速度更快的系统,尤其是如果您使用的通用发行版中包含几乎所有可能的内核驱动程序。祝好运。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11292.html,未经允许,请勿转载。