#高级主题和提示
本文档是[Driver Development Kit教程](ddk-tutorial.md)文档的一部分。
##需要很长时间才能初始化
如果您的设备需要很长时间才能初始化,该怎么办? 当我们讨论上面的** null_bind()**函数时,我们成功返回告诉设备管理器驱动程序现在与设备关联了。 我们不能在bind函数上花费很多时间;我们基本上应该初始化我们的设备,发布它,并完成。
但您的设备可能需要执行冗长的初始化操作,例如:
*枚举硬件点 *加载固件 *协商协议
等等,这可能需要很长时间才能完成。
您可以使用`DEVICE_ADD_INVISIBLE`标志将设备发布为“不可见”。 这符合绑定功能的要求,但没有人能够使用你的设备(因为没有人知道它,因为它不可见)。 现在,您的设备可以通过后台线程执行长时间操作。
当您的设备准备好为客户端请求提供服务时,请调用** device_make_visible()**,这将导致它出现在路径名空间中。
###省电
您的设备为了支持电源或其他资源节约功能可以使用两个标注** suspend()**和** resume()**。
两者都采用设备上下文指针和flags参数,但flags参数是仅用于suspend案例。
flags |含义 ------------------------------------ | ------------------------------------------------------------ `DEVICE_SUSPEND_FLAG_REBOOT` |驱动程序应自行关闭以准备重启或关闭机器 `DEVICE_SUSPEND_FLAG_REBOOT_BOOTLOADER` | ? `DEVICE_SUSPEND_FLAG_REBOOT_RECOVERY` | ? `DEVICE_SUSPEND_FLAG_POWEROFF` |驱动应该自行关闭以准备断电 `DEVICE_SUSPEND_FLAG_MEXEC` | @@@几乎没有人使用它除了图形控制器,它做什么? @@@ `DEVICE_SUSPEND_FLAG_SUSPEND_RAM` | 驱动程序应该做好安排,以便可以从RAM重新启动它
> @@@是的,我只是猜测flags;它们用得那么少......
出于文档目的,我应该写什么? 他们只是提示,或者你必须*因为给定的flags而做某事,或者......?
##参考:支持函数
本节列出了供驱动程序使用的支持函数。
### Accessor功能
作为驱动程序协议函数的第一个参数传递的上下文块是一种不透明的数据结构。 这意味着为了访问数据元素,您需要调用一个访问器函数:
Function |目的 ------------------------ | ------------------------- ------------------ ** device_get_name()** |检索设备的名称 ** device_get_parent()** |检索设备的父设备
###管理职能
以下功能用于管理设备:
Function |目的 ---------------------------- | --------------------- ---------------------- ** device_add()** |将设备添加到父设备 ** device_make_visible()** |使设备可见 ** device_remove()** |从父级中删除设备
###信号
以下函数用于设置设备的状态:
Function |目的 ------------------------ | ------------------------- ------------------ ** device_state_set()** |设置设备上的给定信号 ** device_state_clr()** |清除设备上的给定信号
我们在上面的`/dev/misc/demo-fifo`处理程序中看到了这些。
@@@Notes only@@@
这部分非常适合open_at(),讨论缓冲区管理,线程,最佳实践,device_add()的高级选项等。 我认为它可以介于手册页之间(“printf用于打印字符串并采用以下参数“)和应用笔记—我想看看如何使用函数的例子,参数意味着什么,各种设计决定的影响是什么,那种事。