精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>FreeBSD 核心探讨 (cool!)>>FreeBSD核心探讨(翻译)1

主题:FreeBSD核心探讨(翻译)1
发信人: 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]

[关闭][返回]