Linux 版 (精华区)

发信人: tcpip (俺的昵称改了), 信区: Linux
标  题: FreeBSD核心探讨(翻译)1(转寄)
发信站: 哈工大紫丁香 (Tue Aug 24 16:38:19 1999), 转信

发信人: reden (Offer 快快来啊 ~!), 信区: FreeBSD       

标  题: FreeBSD核心探讨(翻译)1

发信站: BBS 水木清华站 (Mon Mar 29 19:43:12 1999)

标 题: FreeBSD核心探讨(翻译)1 

  

  作 者: liangvy (桃花岛主) 1999.03.15

  

  翻译    :Liangvy 

  

  E-mail  : liangvy@bigfoot.com 

  

  原著    :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) 

  

          (代续) 

  

  -- 

  

--

在江湖中,只要拿起了刀,就是一场无涯的梦。

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 159.226.21

.168]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.615毫秒