Chinaunix首页 | 论坛 | 博客
  • 博客访问: 601067
  • 博文数量: 83
  • 博客积分: 5453
  • 博客等级: 大校
  • 技术积分: 894
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-10 13:51
文章分类

全部博文(83)

文章存档

2015年(2)

2014年(1)

2013年(1)

2012年(3)

2011年(14)

2010年(7)

2009年(7)

2008年(12)

2007年(17)

2006年(19)

我的朋友

分类: LINUX

2006-08-22 11:27:46

本着为大家提供编译内核的通用方法论,小孙结合个人实践,记载了一点愚见。

1.基本常识部分:
通用配置文件有很多用不到的设备,编译时间很长,对频繁自己动手升级内核的人而言不利。

很多驱动是开机就加载的,例如发行版的配置文件module.conf里罗列的。
还有部分是内核开启了自动加载机制,而按需加载的。

如果你的系统没有某种设备,那么相应的内核模块是不能加载上去的。
所以,不论哪种情况,我们都可以研究现有的系统来编译自己的内核。

M v.s. Y:
module灵活性高,驱动开发必选。

三大类推荐编译为可加载模块:1设备驱动;2文件系统;3网络

2.内核通用配置部分:
该部分内容很少,而且不同机器基本通用。
自己完全可以逐项看完。按需选择吧。


3.硬件驱动部分:
熟悉计算机组成原理

知道自己的机器的组成,尤其是主板的芯片组的情况。
启动盘的驱动一定到编译进内核,not module。
SMP支持一定选择,即使机器是单核心,性能的影响微乎其微,只是启动阶段多几条指令。
(单核心+不选择SMP,某些体系结构会认为cpu数目为0而不能boot)

小技巧:

lspci或者gnome下的Device Mangager,了解硬件的型号芯片组。

lsmod,了解kernel已经加载的模块,这些模块一般是要保留的。
小孙当初记下了所有默认加载的内核模块,并排好了调用关系,
2.4内核用了一张白纸,2.6内核用了两张。

如果安装了modconfsudo modconf,熟悉mod在内核menuconf的菜单对应。
内容很多,只看需要看的。


4.文件系统部分:
Root文件系统对应的模块必须编译进kernel,not module
只选能用到的
尽量编译为module
第0级的: 分区类型、语言支持
第一级的:本机硬盘的文件系统、Filesystem in USERSPACE、Pseudo
第二级的:CDROM/DVD、DOS/FAT、NFS
第三级的:个人一般不需要。

注意:如果硬盘文件系统编译进内核,而且使用自动加载模块,
那么内核启动时会输出一大堆找不到文件系统的警告。


如果你在前三个月内没有使用某种文件系统,那么就不要考虑了。

5.网络部分:
相当复杂的部分。
尽量编译为module
原则一,凡是内核说明里提示“unsure, yes”的全部选择。

原则二,优先加入熟悉的内容。

原则三,三个月内没有使用的协议不加入内核。

涉及到路由和iptable,ipfilter的内容请阅读的相关部分。


6.其他部分,安全,加密等:

内容很少,按需加入。不确定的,优先考虑它的说明文档。
“unsure,yes"的一定要选择。


7.小孙归纳的内核编译方法论的要点

0)耐心,“由简到繁,由陌生到熟悉”逐步修改。

1)与boot相关的硬件驱动编译进内核,特别是CPU和启动盘。

2)最好先在他人以修改好的“.config文件”上修改,可以省去网络配置的复杂。
修改重点是
cpu,显卡,声卡,主板。小孙认为这是学习如何配置的最好方法。
显卡,声卡,主板,自动加载的就是最符合系统的驱动。

为了节省再次编译的时间,去掉其他芯片的驱动。

3无线网络部分涉及intel固件版权,编译为模块。
iptables,ipfilter的相关推荐编译为模块。

4)字符设备内容较多且涉及主板芯片组,要小心对待。

5nv和ati新显卡都有linux下的驱动。如果没有,那你就需要了解显卡的芯片组,使用内核里的驱动。


6)
其他小项编译为模块,如加密算法等。

reference:
linux loadable kernel module howto
linux network administrators guide
阅读(2074) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~