14.3 Newbus API

  由于Newbus API非常庞大,本节努力将它文档化。本文档的下一版本会 带来更多信息。

14.3.1 源代码目录树中的重要位置

  src/sys/[arch]/[arch] - 特定机器结构的 内核代码位于这个目录。例如i386结构或 SPARC64结构。

  src/sys/dev/[bus] - 支持特定 [bus]的设备位于这个目录。

  src/sys/dev/pci - PCI总线支持代码位于 这个目录。

  src/sys/[isa|pci] - PCI/ISA设备驱动程序 位于这个目录。FreeBSD4.0版本中,PCI/ISA支持代码 过去存在于这个目录中。

14.3.2 重要结构和类型定义

  devclass_t - 这是指向 struct devclass的指针的类型定义。

  device_method_t - 与 kobj_method_t相同(参看 src/sys/kobj.h)。

  device_t - 这是指向 struct device的指针的类型定义。 device_t 表示系统中的设备。它是内核对象。 实现细节参看src/sys/sys/bus_private.h

  driver_t - 这是一个类型定义,它引用 struct driverdriver结构是一类 device(设备)内核对象;它也保存着驱动程序的私有数据。

图 14-1. driver_t实现

     struct driver {
            KOBJ_CLASS_FIELDS;
            void    *priv;          /* 驱动程序私有数据 */
      };
   

  device_state_t是一个枚举类型,即 device_state。它包含Newbus设备在自动配置前后 可能的状态。

图 14-2. 设备状态device_state_t

     /*
       * src/sys/sys/bus.h
       */
      typedef enum device_state {
        DS_NOTPRESENT,  /* 未探测或探测失败 */
            DS_ALIVE,       /* 探测成功 */
            DS_ATTACHED,    /* 调用了连接方法 */
            DS_BUSY         /* 设备已打开 */
      } device_state_t;
   

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<[email protected]>.
关于本文档的问题请发信联系 <[email protected]>.