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有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.