FreeBSD 系统结构手册
上一页 | 第14章 　Newbus | 下一页

# 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设备驱动程序 位于这个目录。FreeBSD`4.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 driver`。 `driver`结构是一类 `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;

上一页 | 起始页 | 下一页
Newbus概览 | 上一级 | 声音子系统

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

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.