分享
 
 
 

FreeBSD handbook中文版 9 配制FreeBSD 的内核

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

目录

9 配制FreeBSD 的内核

9.1 概要

第3 页9.2 为什么要定制一个内核?

9.3 建立和安装一个定制的内核

9.4 配置文件

9.5 建立设备的节点

9.6 如果出现问题怎么办

=============================================================

(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com)

9.1 概要

时你需要重新配置和编译你的内核。

.

.

.

.

.

.

9.2 为什么要定制一个的内核?

带来很多好处。不象GENERIC 内核,它需要支持很广泛的硬件设备,而定制的内核将只支持

你机器的硬件设备,这样会带来很多好处:

FreeBSD 使用手册

第9章配置FreeBSD 的内核

内核是FreeBSD 的核心。它用来管理内存,执行安全控制,网络,磁盘访问等等。而有

读完这章,你将了解到:

为什么需要建构一个定制的内核。

如何写一个内核配置文件,或修改已存在的配置文件。

如何使用内核配置文件创建和建构一个新的内核。

如何安装一个新内核。

如何在/dev 中创建设备文件的入口。

如何解决一些常见的问题。

定制内核基本上是每一个UNIX 用户必须经历的一关。这样做将会对你的FreeBSD 系统

1. 快速启动。既然系统内核只检测你机器上的硬件,那它所花费的启动时间将大大减

少。

2. 较少的内存使用。一个定制的内核会比GENERIC 内核使用较少的内存。这一点非常

重要,因为内核在处理时必须经常使用内存。所以,一个定制的内核对于内存较少的机

器来说是非常有用的。

3. 额外的硬件支持。一个定制的内核允许你加入象声卡之类设备的支持,而这恰恰是

GENERIC 内核所做不到的。

第1 页FreeBSD 使用手册

9.3 建立并安装一个定制的内核

首先,让我们先来看一下建立内核的目录。所有提到的目录都在/usr/src/sys 中,也

可以通过/sys 访问。有许多子目录充当了内核的不同部分。但最重要的是/arch/conf,你

可以在这儿配置内核,然后进行编译。这里的arch 也可能是i386,alpha,pc98。在一个特

殊的架构目录内,所有的东西都是为这个架构服务的;其它部分的代码是与所有平台共享的。

注意一下这个目录的逻辑结构,所有支持的硬件驱动程序、文件系统、参数选项,都放在各

自的目录下。另外,所有放在i386 目录下的是只跟PC 硬件有关的,而i386 目录之外的其

它目录,则是FreeBSD 可能移植到的平台会共享到的部分。

注意:如果你的系统没有这个/usr/src/sys 目录,那么内核源代码就没有被安装。最

快速的安装方式是以root 登陆, 然后运行/stand/sysinstall , 选择

configure Distributions src sys。

接着,切换到arch/conf 目录,拷贝GENERIC 配置文件,并给这个文件起一个容易辨认的名

称,它就是你的内核名称。例如:

# cd /usr/src/sys/i386/conf

# cp GENERIC MYKERNEL

通常,这个名称是大写的,如果正维护着多台不同硬件的FreeBSD 机器,以你机器的域

名来命名是非常好的主意。我们把它命名为MYKERNEL 就是这个原因。

注意:你必须以root 帐户登陆再执行下面的命令,否则你会没有权限,而导致错误。

现在,用你喜欢的文本编辑器编辑MYKERNEL。如果你是初学者,那唯一能用的编辑器

可能就是vi,它由于太复杂而不在这儿介绍了,但在参考书目中有许多书会介绍到它。然

而,FreeBSD 中最容易的编辑器是ee,如果你是一个工程师,它是一个非常好的选择。你可

以很自由地改变注释行来反映你的配置情况,或你在GERNERIC 中已经做的变化。如果你在

Sunos 或其它BSD 系统下定制过内核,那这个文件中的绝大部分将对你非常熟悉。如果你使

用的是诸如DOS 这样的系统,那GENERIC 配置文件就看起来非常困难,所以在下面的配置文

件章节将慢慢地、仔细地进行介绍。

注意:确信经常检查/usr/src/UPDATING,在你执行任何修改之前,记得要用最新发布

的源代码来同步你的源代码树。在这个文件中所有重要的升级都要记下来。

/sur/src/UPDATING 总是符合你的FreeBSD 源代码版本,而且总是比手册所说的信息更加精

确。

当你完成以上步骤之后,如果你使用的FreeBSD 是4.0 之前的版本的话,就执行下面的

第2 页FreeBSD 使用手册

命令进行编译和安装内核;如果你使用的是4.0 版或是之后的版本,你的/usr/src/目录可

能已经包含了sys/子目录了。

注意:如果你设法从一个旧版本的FreeBSD 升级你的内核,你可能必须从你得到新内核

源代码的地方,找到新版的配制文件,重建并安装它。

# /usr/sbin/config MYKERNEL

# cd ../../compile/MYKERNEL

# make depend

# make

# make install

如果你刚升级到一个比较新的版本,确信你已经重建了整个系统,然后运行下面的命令:

# cd /usr/src

# make buildkernel KERNCONF=MYKERNEL

# make installkernel KERNCONF=MYKERNEL

如果你还没有升级你的源代码树,那你应当按顺序执行:

config,make depend,make,make install

警告:如果你已经升级了你的源代码,你必须使用make buildkernel 方法来定制你的

内核。否则,用旧的工具来定制内核,可能会引起错误。如果你已经升级了源代码,不要

使用config/make 来定制内核。

新的内核将会被拷贝到/kernel 目录下,而旧的内核将会被移到/kernel.old。现在,

关闭系统,然后重新用你的内核启动系统。如果发生错误,在这章结尾会有一些故障的解决

办法。一旦你的新内核不能启动,请务必读一下有关如何恢复的章节。

注意:如果你已经加入了新的设备(如声卡),你可能在使用之前,要先在你的/dev 目

录下加入这些设备节点。

9.4 配置文件

内核设置的格式是很简单的,每一行包含了一个关键词(keyword)与一个或多个参数,

而大多数的设置都只包含一个参数。#号之后的文字都是注释,会被程序忽略掉。下面的每

个小节,将依次介绍每个列在GENERIC 中的参数,虽然各相关主题(如网络)的关键词会放在

同一小节,但是这些关键词可能位于GENERIC 的很多地方。详细地列出各个选项(option),

而LINT 列出了绝大部分的选项(options),比起在同一目录下的GENERIC,有更详细的解释。

第3 页FreeBSD 使用手册

如果你不能确定某一行设定的目的是否必要,请先看看LINT。

目前内核在处理各个选项上正转到一个比较好的模式。一般地,设置文件中的各个选项

都转换到内核程序的Makefile 中,属于CFLAGS 的一个-D 参数。时间一长,就造成了一个

选项处理机制的问题,没有人知道在哪个文件中参考使用了那个选项。

在新的机制中,使用#ifdef 来参考选项的程序代码是存放在由执行config 时所产生的

opt_foo.h。由config 所产生的有效的选项清单存储在两个文件里:独立于系统架构的选项

放在/sys/conf/options,与系统架构有关的选项则放在/sys/arch/conf/options.arch,其

中arch 的一个例子便是i386。

数字的引号限制(Quoting numbers): 目前所有FreeBSD 版本,包括3-stable

版,其内核设置文件中如果有任何属于文字形式的数字(如i386),必须用双引号引

起来,不然执行config 时会出错。

如果数字是表示数目、个数,如maxuser 64 这个设置,则不要加双引号。目

前FreeBSD CURRENT 版本已经去掉上述限制,不论是哪种形式的数字都不需要加双

引号。本章的例子,在文字形式的数字前后仍加了双引号(“”),如果你使用FreeBSD

CURRENT,请自动去除双引号。

下面是一个带有很多额外注释的GENERIC 内核配置文件的例子。这个例子与

/usr/src/sys/i386/conf/GENERIC 非常相似。有关内核配置的最详细的选项,请参

看/usr/src/sys/i386/conf/LINT。

#

# GENERIC -- Generic kernel configuration file for FreeBSD/i386

#

# For more information on this file, please read the handbook section on

# Kernel Configuration Files:

#

# http://www.FreeBSD.org/handbook/kernelconfig-config.html

#

# The handbook is also available locally in /usr/share/doc/handbook

# if you've installed the doc distribution, otherwise always see the

# FreeBSD World Wide Web server (http://www.FreeBSD.ORG/) for the

第4 页FreeBSD 使用手册

# latest information.

#

# An exhaustive list of options and more detailed explanations of the

# device lines is also present in the ./LINT configuration file. If you are

# in doubt as to the purpose or necessity of a line, check first in LINT.

#

# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246 2000/03/09 16:32:55 jlemon Exp

$

下面这个选项在每个内核中都要有:

machine i386

上面的选项指出了在你的系统中所用的CPU 类型。你可以使用多个CPU 类型(例如,你

不确信你使用的是I586_CPU 还是I686_CPU),然而,对于一个定制的内核,最好是只指定

你所拥有的CPU 类型。如果你不能确定你的CPU 类型,你可以使用dmesg 命令来看看你的启

动信息。

Alpha 结构的机器使用下面的选项:

cpu EV4

cpu EV5

如果你正使用一台Alpha 机器,你应当使用上面的CPU 类型。

ident GENERIC

ident 是一个内核的标识符。你应该自己命名一个容易辨认的名称,以有别于GENERIC

的名称─GENERIC。放在ident 后的参数,将在你用这个内核启动时显示在屏幕上。如果你

同时设置了几个内核,采用不同的名称是个不错的主意。

注意,象machine 与cpu 这两个设置。如果你的内核名称包含数字,请记得用双引号把

它括起来。内核名称将会使用-D 参数传给编译器,所以不要用像DEBUG 或是其它可能干扰

编译器的机器、CPU 名称,如vax。

maxusers 32

这个设置的大小值定义了重要的system tables。这个数值粗略地假设你的机器同时会

有多少使用者。然而,在一般情况下,你最少要设置4 个以上,特别是你要执行X Window

或是编译程序。原因是maxusers 值决定了系统同时可有多少个进程( processes),其算法

是20 + 16 * maxusers。如果你设置maxusers 值是1,则你的系统只能同时存在36 个

第5 页FreeBSD 使用手册

processes,包括18 个(或更多)系统启动要占去的processes;如果你执行了X Window,则

又要用掉15 个以上。甚至阅读一个man page 也会使用九个processes 来过滤、解压缩、然

后显示文件。设置maxusers=4,则系统可以同时有84 个processes,对任何人应该都是足

够的。当你执行程序时,得到像是“proc table full”这样的错误信息,或者你要建一个

同时会有很多人来访问的网站(如Walnut Creek CDROM 的FTP)时,你就要增加这个设置的

值,然后重新编译内核。

注意: maxuser 这个参数并不限制可以登陆你系统的用户的数目。它只是系统中使用者

可以最多执行的程序的个数。有一个关键词的值则真的限制了可以同时远程连接(remote

logins)的人数:pseudo-device pty 16。

# Floating point support - do not disable.

device npx0 at nexus? port IO_NPX irq 13

npx0 是连接FreeBSD 中浮点运算处理器的一个接口。不论你有硬件的浮点运算处理器

还是使用软件仿真,都需要这个设置。这个设置并不是可有可无的。

# Pseudo devices - the number indicates how many units to allocate.

pseudo-device loop # Network loopback

loop 是一个通用的TCP/IP 接口。如果你用telnet 或ftp 连到localhost(等同于

127.0.0.1),则该连接会通过这个虚拟设备连回来。这是一定要有的设置,请不要去掉。

#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols

options MATH_EMULATE #Support for x87 emulation

如果你的计算机没有浮点运算处理器(386 或486SX),你可以加入这行,使得内核提供

软件仿真的浮点运算处理器。如果你用的是486DX 或是386SX、486SX(还加装了387、487

芯片)或更高的(Pentium、Pentium II 等)则不需要这行设置。

注意: 这个仿真的浮点运算处理器并不是很精确。如果你没有浮点运算器,还需要较

高的精度,你可以改用GPL_MATH_EMULATE 参数,这将会使用GNU 的浮点运算仿真器。至于

为什么这个仿真器不是系统默认值,是因为GNU 使用许可的关系。

options INET #InterNETworking

提供网络支持。就算你不打算连上网络,你还是要留着这个选项。对于绝大部分的程序,

这个选项是一定要有的。

第6 页FreeBSD 使用手册

options INET6 #IPv6 communications protocols

这个启用IPv6 通讯协议。

options FFS #Berkeley Fast Filesystem

options FFS_ROOT #FFS usable as root device [keep this!]

最基本的硬盘文件系统。如果你要从硬盘启动,就留着。

options MFS #Memory Filesystem

options MD_ROOT #MD is a potential root device

Memory-mapped 文件系统。提供RAM disk,以供需要快速访问的资料或是暂存资料用。

如果你分了很大的swap 空间,使用这个选项可以给你不少好处。把/tmp 挂到MFS 分区是一

个相当好的想法,因为不少程序都会在此暂存资料。要把/tmp 挂到MFS RAM disk,可以修

改/etc/fstab,加入以下一行:

/dev/ad1s2b /tmp mfs rw 0 0

现在重启动,或是键入mount /tmp 命令:

options NFS #Network Filesystem

options NFS_ROOT #NFS usable as root device, NFS required

网络文件系统(Network Filesystem, NFS),除非你要从网络上的其它机器加载目录,

不然你可以用# 号注释掉这行设置。

options MSDOSFS #MSDOS Filesystem

MS-DOS 文件系统。除非你要在启动时挂上一个DOS 格式的硬盘,不然你可以放心地把

这行注释掉。如前所述,在你第一次挂上一个DOS 分区时,内核将会自动加载模块来支持它。

此外,mtools 是个相当不错的软件(可在ports 里面找到),可以让你在访问DOS 磁盘时,

不需要挂入或卸载软盘(而且也不需要MSDOSFS 的支持)。

options CD9660 #ISO 9660 Filesystem

options CD9660_ROOT #CD-ROM usable as root, CD9660 required

CD-ROM 使用的ISO 9660 文件系统。如果你没有光驱,或是很少用光驱,可以注释掉这

一行(内核会在第一次挂入时动态加载模块以支持它)。音乐CD 则不会用到这个文件系统。

options PROCFS #Process filesystem

第7 页FreeBSD 使用手册

Process filesystem。这是一个虚拟的文件系统,挂在/proc 下,允许一些程序,像ps

来读取资料,提供你正在执行的processes 的信息。

options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]

使系统兼容4.3BSD。不要去掉这一行,不然有些程序将无法正常运行。

options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI

这行设置告诉内核等待15 秒钟,以供SCSI 控制器扫描你计算机上的SCSI 设备。如果

你只有IDE 硬盘,你可以不理会这个设置,不然你可能会想要降低这个值,也许会降到五秒,

以增加启动的速度。如果你发现降低后,FreeBSD 无法正确辨认你的SCSI 设备,那么你该

提高这个值,延长等待时间。

options UCONSOLE #Allow users to grab the console

允许使用者找到console 信息,对X Window 很有用。举例来说,你可以输入xterm -C

来打开一个console xterm,这个窗口将显示任何write、talk 等命令的信息,以及你发出

去的信息。当然,kernel 产生的信息也会在这里出现。

options USERCONFIG #boot -c editor

这个选项允许你从启动菜单启动配置编辑器。

options VISUAL_USERCONFIG #visual boot -c editor

这个选项允许你从启动菜单启动虚拟配置编辑器。

options KTRACE #ktrace support

这个选项启用内核进程跟踪,在调试时很有用。

options SYSVSHM #SYSV-style shared memory

提供System V Shared memory(SHM)的支持,最常

[1] [2] [3] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有