发信人: liangvy()
整理人: hahalee(1999-03-17 20:30:07), 站内信件
|
翻译 :Liangvy E-mail : [email protected] 原著 :FreeBSD核心入门(日文版) 大木敦雄
1。1概述 FreeBSD可以在PC/AT兼容机器上运行。CPU是i386,i486,Pentium, Pentium Pro以及其兼容芯片等。 1。1。1(略) 1,理论地址: 2个13 bit 长+32 bit 长 2,线形地址:32 bit 长的空间 3,物理地址:32 bit 长的空间 1。1。2进程的虚拟空间 1,text部分 这部分是执行文件的的text领域,也就是机器语言部分,对于这个 部分的空间在机器上的物理内存页是共有的,还有,这部分最后的变量 地址是etext。 2,data和bss部分 执行文件的data部分,也就是初始化的数据段和执行文件指定的内 存变量。内存变量在开始的时候以0填充。这一段空间可以读写。它的 边界也是以edata和end的地址做结尾。进程的malloc()等内存分配的 操作的时候,地址的增加方向向bss空间进行。 3,stack部分 也就是进程执行的时候的stack空间,这部分空间(从地址的最高位 开始可以伸缩),其对于物理内存,伸缩程度由核心自动执行。 1。2kernel的configure freebsd的kernel构成文件在/usr/src/sys的目录下面。下面的子目录做一个 介绍。 compile 编译核心的目录。 conf configure的目录。 ddb 核心调试的sounre code的目录。 dev 一部分的drivers的source code的目录。 gnu 浮点运算的仿真以及ex2fs文件系统的source code目录。 i386 依赖于pc/at机器的目录,以下介绍它的字目录。 apm suspend一些节电程序。 boot 不是kernel本身的东西,只是一些怎么从开机到读入kernel 的boot program的source code。 conf config的一些依赖data。 isa isa bus的驱动程序类的source code。 eisa eisa bus的驱动程序类的source code。 include 对pc/at的一些include files i386 对pc/at的一些核心code ibcs2,linux 使各类的os的执行文件在freebsd上执行的code isofs/cd9660 cd-rom在unix文件系统上操作的的有关code kern 核心code libkern 核心库的source code miscfs 实现unix文件系统的code msdosfs 在unix上操作ms-dos文件系统的有关code net 实现network功能的基本部分code netatalk 实现appletalk network功能code netinet 实现internet network功能的code netipx 实现ipx功能的code netns 实现ns network的code netkey 实现网络加密部分的功能的code nfs 实现nfs服务 pc98 对于pc98的支持 pccard 对pcmcia的支持 pci 对pci bus的驱动程序的source code scsi 对cd-rom,hard disk,tape 等的scsi驱动程序的source code sys 独立于机器体系结构的一部分code ufs unix file system 的支持code vm 虚拟内存管理的部分 1。2。1配置的操作----config command 在root权限下,config,make实行后,可以得到简单的kernel。 *configure file 移动到/usr/src/sys/i386/config看看。 GENERIC 从cd-rom等安装freebsd的时候对应于defaule kernel 的配置file LINT kernel组合功能的网罗的的配置file 下面4个是对配置很有必要的的依赖data file Makefile.386 config生成的Makefile file的template. devices.i386 对于unix filesystem可能的block型的device 名字和major号的对照表 files.i386 记录kernel功能组合的基础上,依赖于pc/at 机器的功能名称和各种功能实现的source code file的名字表。 options.i386 记录配置项目的表。 还有,majors.i386是记录对应驱动器的I/O表和major号的一个文件。 于核心配置没关系。 对于新的i/o设备,如果要做device driver,对pc/at,要在files.i386(没 有的话在/usr/src/sys/conf/files)追加相应的行,不然就不能把它加入 到核心里面。 追加的格式为 相对path名 optional device-name device-driver
对于配置文件,首先,要设置cpu,bus,i/o设备,多少用户等。例如对于GENERIC 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) (代续)
-- ※ 修改:.hahalee 于 Mar 15 09:50:20 修改本文.[FROM: 202.100.219.8] ※ 来源:.网易 BBS bbs.netease.com.[FROM: www2.dt.sanyo.co.jp]
|
|