分享
 
 
 

自订 FreeBSD Kernel (系统核心)

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

Contributed by Jake Hamby .

6 October 1995. 这个略大的章节会讨论如何自订你的 FreeBSD kernel。

这个章节适合初学者以及经验丰富的管理者。

5.1. 为何要自订 kernel ?

5.2. 建⒁约鞍沧耙桓鲎远┑?nbsp;kernel

5.3. kernel 设定档

5.3.1. 一定要有的关键字

5.3.2. 一般的参数

5.3.3. 档案系统的参数

5.3.4. 基本控制卡以及介面卡

5.3.5. SCSI 装置支援

5.3.6. Console,滑鼠,及 X Server 支援

5.3.7. Serial 跟 Parallel Ports

5.3.8. 网路

5.3.9. 音效卡

5.3.10. 虚拟装置 (Pseudo-devices)

5.3.11. 摇杆、PC 喇叭及其他杂七杂八的

5.4. 建立 device nodes

5.5. 发生问题的解决方法

_________________________________________________________________

5.1. 为何要自订 kernel ?

建立一个自订的 kernel 是每个 UNIX 系统管理者所必须学习的重要课题。

这个过程虽然耗时,但是将会对你的 FreeBSD 系统带来许多好处。 一个自订的

kernel,只会包含支援你硬体的驱动程式, 而一个 GENERIC kernel

却包含大多数的硬体驱动程式以便在各种机器上执行。 自订的 kernel

将包含下列优点:

* 开机时只需要花较少的时间,因为 kernel 不需花额外的时间去侦测

你没有的硬体是否存在。

* 自订的 kernel 通常占较少的记忆体,这是很重要的。 因为 kernel

本身是一个常驻在记忆体中的程式,那些没有用到的 程式码 (如 GENERIC

kernel) 将会占去你其他程式执行时的记忆体空间。

因此,在一个记忆体较小的机器上,建立一个自订的 kernel

将是相当重要的。

* 最後,有你可以调整许多的 kernel 参数来符合你的需求, 以及奶J其他

(如音效卡的驱动程式) ,这些是 GENERIC kernel 所没有的。

_________________________________________________________________

5.2. 建立以及安装一个自订的 kernel

首先,我们先浏览一下编译 kernel 的目录。 所有的 kernel

原始程式都是放在 /usr/src/sys 以下的 (而通常我们会将 /sys 连结 (link)

到 /usr/src/sys)。 Kernel 原始程式有许多不同的目录,比方说

/sys/i386/conf, 你将会把你的 kernel 设定档放在此目录下; 还有例如

/sys/compile, 你将会在此编译你的 kernel。

注意: 如果你的系统中 没有 /usr/src/sys, 表示你尚未安装 kernel

原始程式,请参照系统安装过程来安装 kernel 原始程式。

接下来,进入 /sys/i386/conf 并且拷贝 GENERIC 档

成为你想要的档名。例如:

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

# cp GENERIC MYKERNEL

传统上这个档名都是用大写字母,如果你有许多的 FreeBSD 机器, 用大写的

hostname 来命名是区分不同机器设定的好方法。

注意: 你必须以 root 的身份执行所有的命令,否则你会得到 "permission

denied" 的错误。

现在,以你最习惯的编辑器编辑 MYKERNEL (如果你不知道用什麽好,

你可以试试 vi,虽然要解释如何使用它太过杂, 但是至少大部份的 书

都会提到它。 你必须修改或新增此档案中的设定以符合你系统的需求。

如果你曾经在 SunOS 或是其他的 BSD 系统上建立过 kernel,

那麽你将会对这个 kernel 设定档的内容十分熟悉。

如果你较熟悉其他的作业系统 (如 DOS),你可能会看不懂 kernel

设定档,麻烦你仔细阅读 kernel 设定档 。

注意: 如果你是从较旧版本的 FreeBSD 升级上来的, 你可能必须一更新

config(8)。如果你是从 FreeBSD 原始程式升级的, 你可以在

/usr/src/usr.sbin/config 中找到 config 的原始程式。

当你完成建立或修改 kernel 设定档时,执行以下命令来编译你的 kernel:

# /usr/sbin/config MYKERNEL

# cd ../../compile/MYKERNEL

# make depend

# make

# make install

:make depend; make; make install 可用 make depend all install 来替代

新编译好的 kernel 将会被安装到根目录去 (名为 /kernel), 旧的 kernel

将会被更名为 /kernel.old。 现在,关闭 (shutdown) 你的系统并重新开机

(reboot)。 如果重新开机後出了什麽问题,请阅读本文最後的

发生问题的解决方法 。 请记得阅读 以免你的 kernel 无法开机 。

注意: 如果你增s的硬体 (如音效卡), 你必须建立一些 device nodes

到你的 /dev 下。

_________________________________________________________________

5.3. kernel 设定档

这个档案的内容相当的简单。每一行都包含了一个关键字以及它的参数。

任何以 # 开头的行都被视为解而忽略。 接下来会介绍 GENERIC

(一般设定档) 中所含有的关键字。 另一个设定档 LINT

中包含绝大多数的详细关键字,LINT 中并有详细说明,

如果你有任何的疑问可以参考 LINT。

传统上 kernel 设定档中的关键字会以 -D 的方式由 CFLAGS

传递给编译器,但是这样做所有的档案都有可能被影响。

现在我们有了新的方法。config 这个程式会将那些关键字分门别类的放到

opt_foo.h,这样只有相关的原始程式才会参考到这些设定档。

5.3.1. 一定要有的关键字

5.3.2. 一般的参数

5.3.3. 档案系统的参数

5.3.4. 基本控制卡以及介面卡

5.3.5. SCSI 装置支援

5.3.6. Console,滑鼠,及 X Server 支援

5.3.7. Serial 跟 Parallel Ports

5.3.8. 网路

5.3.9. 音效卡

5.3.10. 虚拟装置 (Pseudo-devices)

5.3.11. 摇杆、PC 喇叭及其他杂七杂八的

_________________________________________________________________

5.3.1. 一定要有的关键字

以下是你的 kernel 设定档中一定要有的关键字。

machine ``i386''

第一个关键字是 machine,因为 FreeBSD 现在只能在 386 以上的 PC

执行,理所当然参数是 i386。

注意: 任何包含数字的关键字都必须用引号匡起来 (如 "i386"), 否则

config 可能会误以为你的意思是数字 386 (三百八十六)。

cpu ``cpu_type''

第二个关键字是 cpu, 这些是指你的 kernel 即将支援的 CPU 种类。

它的参数 cpu_type 有:

+ I386_CPU

+ I486_CPU

+ I586_CPU

+ I686_CPU

设定档中可以有一行以上的 cpu "cpu_type" 以支援各种的 CPU, 就像

GENERIC 档案一样。如果你的硬体是固定的,只要包含你用的 CPU

种类就好了。 如果你使用 Intel Pentium,那你只要有 cpu

"I586_CPU" 就好了。

ident machine_name

接下来是 ident, 这是用来区别不同 kernel 用的。 你可以使用

GENERIC 这个字或是其他你喜欢的字 (如 MYKERNEL)。

你可以在开机的时候看到这个字。 你可以替试验性的 kernel

取不同的名字藉以区别其它的 kernel。 要注意的是,这个字将会以

CFLAGS 的方式传给 C 编译器, 请勿使用到特殊的关键字如

DEBUG,以免发生不可预期的事。 如果你不知道要用那个字,你可以用

GENERIC 这个字。

maxusers number

这个数字将会决定你的 kernel 中一些资料结构的大小。

例如你的系统中可以同时载入的程序 (process) 数目等於 20 + 16 *

maxusers。 对於一个使用者的环境来说,设定 maxusers = 4

大概可以符合一般需求。 然而,如果你得到 "proc table full"

的错误讯息, 你必须增?maxuser 的值。如果你想执行

X-Windows,你可能需要 maxuser = 16A更大的值是必须的。

注意: 这个数字并 不是 代表你的系统

可以同时上线的人数,它只是决定你的 kernel 中一些资料结构的大小。

真正影响上线人数的是 pseudo-device pty 16 。

config kernel_name root on root_device

这行指定 kernel 的名称及位置。传统上来说,kernel 的命名为

vmunix, 但是 FreeBSD 称它为 kernel。你一定要用 kernel 当作

kernel_name,因为许多程式都会去参考 /kernel 这个档案。

这行的第二个参数 root_device 指定你的 root partition 跟 kernel

放在哪颗硬碟上。 一般来说,用 SCSI 硬碟的系统使用 sd0,用 IDE

硬碟的使用 wd0。

_________________________________________________________________

5.3.2. 一般的参数

这些参数提供档案系统及其它的功能支援。

options MATH_EMULATE

这个参数让 kernel 用软体的方式模拟浮点运算,如果你的 CPU

不含浮点运算器 (或没有 387),你就必须打开此参数。

注意: FreeBSD 所提供的一般浮点模拟器并没有十分准确,

如果你没有浮点运算器却又需要最好的准确度,你可以是用

GPL_MATH_EMULATE 来使用较优秀的 GNU 浮点模拟。 因为 GNU

版权的关,因此不以它来当作内定的模拟器。

options ``COMPAT_43''

提供 4.3BSD

的相容模式,有些程式需要这个参数,所以请一定要打开。

options BOUNCE_BUFFERS

ISA 以及以 ISA 相容模式运作的 EISA 介面卡只能对 16MB

以下的记忆体做 DMA(Direct Memory

Access)。这个参数用缓区的方式使得这些介面卡 可以 DMA 存取

16MB 以上的记忆体。 通常使用 ISA SCSI 卡又有超过 16MB

的人才需要此参数, 打开此参数会使得系统稍微慢一点。

options UCONSOLE

允许使用者?ampcirc;取 console,对 X Windows 是很有用的。

举例来说,你可以用 xterm -C来?ampcirc;取传到 console 上的 talk

、write 以及 system log 的讯息。

options SYSVSHM

这个参数提供 System V 共享记忆体 (shared memory) 的支援。

最常使用 SYSVSHM 的是 X Windows 的 XSHM 功能 (如使用 xanim,

Linux DOOM 等),因为他可以提高执行速度。如果你使用 X Windows

或是电子告栏 (BBS),你一定要打开此参数。

options SYSVSEM

提供 System V semaphores 的支援,虽然不常用到,但是它只占一点点

kernel 的空间。

options SYSVMSG

提供 System V messages 的支援,虽然不常用到,但是它只占一点点

kernel 的空间。

注意: ipcs(1) 这个命令会列出正在使用以上三种 SYSV 的功能 的程序

(process)。

_________________________________________________________________

5.3.3. 档案系统的参数

这些参数提供各种档案系统的支援,你一定要包含一种以上的档案系统

以便开机所需。 如果你是从硬碟开机,你必须包含 FFS; 如果你用 diskless

开机 (网路开机),你必须包含 NFS。

此外,你还可以将常用到的档案系统包含进去 (如 MSDOS)。

但是你可以将这些非开机必备的档案系统拿掉,FreeBSD 会利用动态载入模组

(Loadable Kernel Module) 在你用到档案系统时,自动将档案系统模组从 /lkm

载入使用。

options FFS

最基本的档案系统支援,如果你是从硬碟开机的,你一定需要它。

options NFS

网路档案系统(Network Filesystem?ampcirc;,除非你想要经由网路存取

(mount)其他工作站的档案,否则你不需要它。

options MSDOSFS

MS-DOS 档案系统。除非你每次开机都要使用 MSDOS 档案系统,

不然你可以将他拿掉,系统会在你使用到 MSDOS 档案系统时, 自动用

LKM 将 MSDOS 档案系统支援载入。 除此之外,你也可以使用

mtools来存取 DOS 的软碟, 这并不需要有 MSDOS 档案系统的支援。

options ``CD9660''

ISO 9660 是 CD-ROM 的档案系统,如果你只是偶尔用到 CD-ROM,

你可以将它拿掉,系统会在使用到 CD-ROM 时自动以 LKM 载入。

此外,用 CD-ROM 听 Audio CD 不需要 CD9660 的支援。

options PROCFS

Process 档案系统。这是一个对映记忆体中执行程序的虚拟档案系统,

许多系统工具如 ps 需要 PROCFS。

options MFS

记忆体映对档案系统 (Memory-mapped Filesystem)。

这基本上是一个为了达到快速暂存用的 RAM disk, 当你有许多 swap

空间的时候是很有用的。 一个挂上 (mount) MFS 的好地方是 /tmp,

因为许多程式会利用 /tmp 建立暂时档案。 以下是将 MFS 挂上 /tmp

的方法: 在 /etc/fstab 中奶J以下这行并重新开机或键入 mount

/tmp。

/dev/wd1s2b /tmp mfs rw 0 0

注意: 将 /dev/wd1s2b 替换成你的 swap partition, 你的 swap partition

在 /etc/fstab 中看起来是这样的:

/dev/wd1s2b none swap sw 0 0

注意: 再来,MFS 无法以 LKM 载入, 一定要将它连结在 kernel 中。

options QUOTA

奶J quota 的支援,可以藉以限制使用者能用的硬碟空间。 请参阅

quota(1) 的说明 (man quota)。

_________________________________________________________________

5.3.4. 基本控制卡以及介面卡

这些章节讨论 FreeBSD 的硬碟、磁带机、CD-ROM 的支援。 对於 SCSI 卡 跟

网路卡 我们将在另一章节讨论。

controller isa0

所有的 PC 都应该奶J ISA 的支援。如果你的系统是 IBM PS/2 (Micro

Channel Architecture),很抱歉现在 FreeBSD 并不支援。

controller pci0

奶J PCI (含 PCI Plug) 的支援。

controller fdc0

软碟控制卡: fd0 是 ``A:'' 磁碟,fd1 是 ``B:'' 磁碟。 ft0

是接在软碟控制卡上的 QIC-80 磁带机。

注意: QIC-80 磁带机需要 ft(8) 程式的支援。

controller wdc0

这是主要 (primary) IDE 控制卡的支援。 wd0 跟 wd1 是第一台

(primary) 跟第二台 (slave) 硬碟。 wdc1 是次要 (secondary) IDE

控制卡, 提供第三台及第四台硬碟 (或者是 IDE ATAPI CD-ROM)

的支援。

controller wcd0

提供 IDE ATAPI CD-ROM 的支援,需要 wdc0 或 wdc1

的支援。此外,你还需要 options ATAPI, ATAPI_STATIC 的参数。

device npx0 at isa? port ``IO_NPX'' irq 13 vector npxintr

npx0 是 FreeBSD 浮点运算的呼叫介面,不管你有没有

浮点运算器,这个参数都是 必要 的。

device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr

Wangtek 跟 Archive QIC-02/QIC-36 磁带机的支援。

专属介面 CD-ROM 的支援

以下这些是所谓的 专属介面 CD-ROM。

他们使用专属的控制卡或是音效卡,他们 不是 IDE 或 SCSI 的

CD-ROM。他们大多数是单倍速或双倍速的老机种。

device mcd0 at isa? port 0x300 bio irq 10 vector mcdintr

Mitsumi CD-ROM (LU002, LU005,

[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- 王朝網路 版權所有