上一页
OpenBSD3.5安装指南
OpenBSD FAQ 第五章:建立你自己的内核
下一页
网络


5.4-建立你自己的内核

建立你自己的内核的完整说明在afterboot的man 页中。

从CD-ROM编译你的内核,你首先需要有源代码。官方cd(disk 3)和FTP站点上都有。下面的例子假设CD3挂载于/mnt下。
#cd /usr/src
#tar xzvf /mnt/src.tar.gz

注意:假如你从FTP站下载,你会发现两个文件,src.tar.gz和sys.tar.gz.第一个是"用户岛"(userland)----有everything但是没有kernel.第二个是内核源代码。以上两文件都下载并解压,因为对大多数人来说,两个都需要。在CD-ROM上,他们被合并到一个文件。

建立你自己的内核最简单的方法是从GENERIC内核开始。它位于/usr/src/sys/arch/$ARCH/conf/GENERIC,$ARCH就是你的体系。该目录下还有其他一些样板文件。这里有编译内核的两个例子。第一个例子是在只读source tree下编译内核。第二个位于可写的source tree.
#cd /somewhere
#cp /usr/src/sys/arch/$ARCH/conf/SOMEFILE .
#vi SOMEFILE (进行一些修改)
#config -s /usr/src/sys -b .SOMEFILE



接下来是:
#make depend或者#make clean
#make


对source tree做了任何修改(包括升级和patch),就必须运行"make depend"(换句话说,几乎总是要这样,除非你需要运行make clean).

如果修改了内核配置文件选项,并且/或者对source tree做了大的改动,你应该使用"make clean"代替上面的"make depend"。注意,使用"make clean"总是安全的,尽管它将花费更多的编译时间,因为有许多需要rebuilt.

在可写的source tree下编译内核,如下:
# cd sys/arch/$ARCH/conf
# vi SOMEFILE (to make any changes you want)
# config SOMEFILE (read more about it here: config(8))
# cd ../compile/SOMEFILE
# make



$ARCH就是你所用的系统体系(比如i386)。你也可以运行make depend为下次编译内核建立一些dependecies.

将内核移到正确的位置:
# cp /bsd /bsd.old
# cp /sys/arch/$ARCH/compile/SOMEFILE/bsd /bsd



在启动时,如果要恢复使用老的内核,需要:
 

boot> bsd.old
那么将会载入老的内核来代替/bsd.

有时,当你建立了一个新的内核,你需要安装新的bootblocks.为此请看FAQ14,Installing Bootblocks,它将让你了解使用OpenBSD bootloader的大概。
5.5-Boot-Time配置

有时,在启动系统时你会发现内核找到了你的设备但是却可能处于错误的IRQ.可能你马上就要用到此设备。不用编译内核,你可以使用OpenBSD的启动时(boot time)内核配置。这只能纠正你的错误一次。重启后,你还会面临此问题。所以,这里的配置只是临时性的解决办法,你应该通过调整和重编译内核来解决此问题。进行此配置,你的内核中需要有BOOT_CONFIG项,GENERIC默认有。

本文档的大部分可以在boot_config(8)的man 中找到。

要进入User Kernel Config,或者UKC,在启动时使用-c 选项: boot> boot hd0a:/bsd -c

内核可以是你想启动的任意一个。这样你将调出UKC提示符。在此,你可以直接发送命令给内核指定你想修改的或者禁用甚至启用的设备。

下面就是在UKC中常用的一些命令:
* add device - 通过复制其他的设备增加一个设备
* change devno | device - 修改一个或多个设备
* disable devno | device - 禁用一个或多个设备
* enable devno | device - 启用一个或多个设备
* find devno | device - 搜索一个或多个设备
* help - 这些命令的摘要
* list - 列出所有已知设备。
* exit/quit - 继续启动
* show [attr [val]] -通过指定的参数值,显示设备的属性。

配置好设备后,用quit退出继续启动。这样之后,你就修正了你的内核配置并且编译了一个新的内核。参考编译你自己的内核来获得帮助。

5.6-在启动时获得更详细的输出

得到更详细的输出对启动时调试问题很有帮助。如果你的启动软盘不能启动且想得到更多信息,简单的重启,当你得到"boot>"提示符时,用-c启动带你进入UKC>,接着:
UKC> verbose
autoconf verbose enabled
UKC> quit


现在你就可以在启动时得到非常详细的输出信息了。

5.7-使用config(8)修改内核

config(8)的-e-u选项非常有用并且节省编译时间。 -e参数允许你在一个已运行的系统上进入UKC。这个更改将在下次重启时生效。参数-u用于在启动时查看是否对当前内核做过修改,意思是说你用boot -c在系统启动时进入UKC后所做的修改。

下面的例子显示如何在内核中禁用ep*设备。为了安全的目的,你必须使用-o选项,保存修改到指定文件。例如:config -e -o bsd.new /bsd将把修改写入文件bsd.new.下面的例子没有使用-o参数,因此,修改被忽略,不会写入到内核二进制文件中。关于错误和警告信息,请看config(8)的man页。

$ sudo config -e /bsd
OpenBSD 3.4 (GENERIC) #18: Wed Sep 17 03:34:47 MST 2003
deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
warning: no output file specified
Enter 'help' for information
ukc> ?
help Command help list
add dev Add a device
base 8|10|16 Base on large numbers
change devno|dev Change device
disable attr val|devno|dev Disable device
enable attr val|devno|dev Enable device
find devno|dev Find device
list List configuration
lines count # of lines per page
show [attr [val]] Show attribute
exit Exit, without saving changes
quit Quit, saving current changes
timezone [mins [dst]] Show/change timezone
nmbclust [number] Show/change NMBCLUSTERS
cachepct [number] Show/change BUFCACHEPERCENT
nkmempg [number] Show/change NKMEMPAGES
shmseg [number] Show/change SHMSEG
shmmaxpgs [number] Show/change SHMMAXPGS
ukc> list
0 audio* at sb0|sb*|gus0|pas0|sp0|ess*|wss0|wss*|ym*|eap*|eso*|sv*|neo*|cmpci*
|clcs*|clct*|auich*|autri*|auvia*|fms*|uaudio*|maestro*|esa*|yds*|emu* flags 0x0
1 midi* at sb0|sb*|opl*|opl*|opl*|opl*|ym*|mpu*|autri* flags 0x0
2 nsphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
3 nsphyter* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|
vr*|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep
*|ep*|ep* phy -1 flags 0x0
4 qsphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
5 inphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
6 iophy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
7 eephy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
8 exphy* at aue*|xe*|ef*|gx*|stge*|bge*|nge*|sk*|ste*|sis*|sf*|wb*|tx*|tl*|vr*
|ne0|ne1|ne2|ne*|ne*|ne*|dc*|dc*|rl*|fxp*|fxp*|xl*|xl*|ep0|ep0|ep0|ep*|ep*|ep*|e
p*|ep* phy -1 flags 0x0
ukc> disable ep
67 ep0 disabled
68 ep* disabled
69 ep* disabled
155 ep0 disabled
156 ep0 disabled
157 ep* disabled
158 ep* disabled
210 ep* disabled
ukc> quit
not forced


上例中,所有的ep*设备都在内核中被禁用并且不会被检测。有时,在启动时通过boot -c进入UKC,你希望这些改变永远有效。这样的话,你要用到-u选项。在下例中,计算机启动到UKC并且wi(4)设备被禁用。因为boot -c后所做的修改不能永久生效,所以所做的修改必须保存。此例将boot -c下的改动写入一个新的内核二进制文件bsd.new
$ sudo config -e -u -o bsd.new /bsd
OpenBSD 3.4 (GENERIC) #18: Wed Sep 17 03:34:47 MST 2003
deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Processing history...
105 wi* disabled
106 wi* disabled
Enter 'help' for information
ukc> quit


5.8编译、建立内核时的常见问题

5.8.1-biuld中止,错误信息为"Signal 11"

从源码Building OpenBSD或者其他程序是一个非常猛烈的使用硬件的任务,很耗CPU,磁盘和内存资源。所以,假如你的某硬件有问题,此问题一般都会在build 时出现。signal 11错误是典型的由硬件问题产生的错误。通常是内存问题,也很可能是CPU主板或者发热(heat)的问题。你的系统也许还比较稳定,但是不能用于编译程序。

你会发现修理或者更换产生错误的组件是最好的解决办法,因为此问题在将来可能还会以其他形式出现。如果你确实还想使用它而又不想有问题产生,请安装snapshot或者release版。

查看 Signal 11 FAQ获取更多信息。

5.8.2-“make build”因"cannot open output file snake:is a directory"而失败

此问题可能是由以下两个问题产生的:
*你没有正确的下载或者升级你的CVS树:按照anoncvs guide,upgrade-minifaq和FAQ是说明,当进行CVS校核时,你必须使用"-P"参数,当你 用CVS升级你的source tree时,必须在cvs中使用"-Pd"参数。这些参数能确保按照OpenBSD的发展,已从tree中增加或者删除新的目录。
*在build前,你没有正确的创建obj目录。不支持没有/usr/obj目录而去building tree。获得并升级你的源代码并且building你的树时按照说明是非常重要的。

上一页
OpenBSD3.5安装指南
目录
下一页
网络