1 FreeBSD 核心( 二 )


Machine "i386"
cpu "I386_CPU"
cpu "I486_CPU"
cpu "I586_CPU"
cpu "I686_COU"
ident GENERIC
maxusers 10
当作为server时候 , 应该把最大user设置大一点 , 以提高系统性能 。
下一步 , 指定options , 对于GENERIC
options MATH_EMULATE #support for x87 emulation
options INET #interNETworing
options FFS #Berkeley Fast Filesystem
options NFS #Network Filesystem
......
options指定的名字xxx等 , 如果在/usr/src/sys/conf/options或者在
/usr/src/sys/i386/conf/options.i386中记载的时候 , 应在对应的opt_XXX.h中写入
。没有的话 , 作为cc命令行的参数定义"-D"在Makefile里面追加 。对于XXX的格式应该

相对path名 optional xxx
下一步 , 对于config
config kernel root on wd0
(略)
配置文件剩下的部分应该是bus,i/o等一些硬件配置 , 一般有controller,device,
disk,tape四类 。例如
controller isa0
controller eisa0
controller pci0
等 。
第二层的device和controller , 记录了一些bus设备的连接 。ISA的情况是
device device_name at isa? 参数
controller controller_name at isa? 参数
EISA和PCI就相对简单一点:
device device_name
controller controller_name
device_name里指定的设备名是 , 串口 , 并口 , 网络等装置 。
第三层的disk和tape为
disk disk_name at 控制设备名 drive 号
tape tape_name at 控制设备名 drive 号
SCSI接口卡作为第二层的控制装置记录的同时
controller scbus0
作为通用的scsi控制设备 。因此 , 对于它的hard disk,tape,cd-rom,mo设备 , 有
device sd0
device st0
device cd0
device od0
等 , 它可以自动识别和分配号码 。
对于其他的scsi设备 , 有
device pt0 at scbus?
这些东西(bus,scsi,i/o) , 在生成的ioconf.c以及相应的include中有反映 。
configure的最后 , 不是一些物理设备 , 而是kernel内部的一些软设置
pseudo-device 理论设备名
首先 , 要考虑以下两个设备:
pseudo-device pty 16 #ttys - can go as high as 256
pseudo-device log #syslog interface (/dev/klog)
network使用的场合 , 应该有下面两个
pseudo-device loop
pseudo-device ether
这种情况下 , 最好有
pseudo-device bpfilter 4 #berkeley packet filter
pseudo-device tun 1 #Tunnel driver ( PPP)
想做floppy的时候 , 要
pseudo-device vn #Vnode driver ( turns a file into a device)
(代续)



FreeBSD核心探讨(翻译)2

1.3 FreeBSD boot之前的工作
1.3.1pc/at机器的boot顺序
hard disk的最前面的一个block(512byte),叫做master boot recorder(MBR).这
里有启动限定的program和分区的信息 。分区信息是指对于一个区是16byte长 , 最多
只能有4个区 。16byte的内容是 , 分区哪里开始 , 哪里结束 。哪种os , 能否启动等 。对
于freebsd , 安装的时候向MBR写入了boot easy.
磁盘的结构如下图表示:
block Number
#0 #1 #2 ... #14 #15 #16 #17
-------------------------------------------------------------
disk no used
label
-------------------------------------------------------------
<-boot->|<---------boot2-------------->| |<--unix file system--

FreeBSD用的block#0--#14的15个block里面 , 含有读入freebsd的程序 , bootease
只在block#0里面 , 在15个block中并没有 。它的作用
。读入mbr , 找freebsd的分区
。读入最初的15个block , 到物理内存中0x0001000
。跳转到相当于block#2的内存位置
然后 , 屏幕表示为:
。。。
。。。
boot:
(参数说明略)
它的source是/usr/src/sys/i386/boot/biosboot,make之后 , 生成两个文件:
boot1,boot2分别写入block#1 , block#2--#14中 。
一般 , 一个物理的unix分区理论上可以有8个 , 比如swap , unix system等 。

推荐阅读