1. 区别和关系
MQX为加载设备驱动函数提供了专门的API-_io_dev_install,用于注册设备标识名、设备驱动函数及其数据结构。_io_dev_install 和 _io_dev_install_ext 是一样的,区别在于“Different from * _io_dev_install since this function also installs an uninstall function”。
在_io_dev_install函数内部,创建一个设备节点,传入的设备驱动信息填入后,将其添加到设备管理器的设备队列中去。 例如:当在系统启动过程中调用io_device_install(“decice:”)时,自定义名为“device:”的设备驱动就加载到系统中了。而其参数 io_device_open 当用户使用fopen打开设备时此函数被调用,是初始化设备驱动函数。
个人理解:这里的设备驱动的确是写死绑定在同一个结构中,不像linux。这样造成,即使当前已有适用的driver,却不能重复使用,仍需要重新开发device driver"设备驱动",导致浪费。
另外,其实如_io_spi_install 内部调用的就是_io_dev_install_ext。
选自: 嵌入式实时操作系统MQX应用框架研究
2.另外
关于fio.h 中的如fopen()
个人理解: MQX把c标准库中的一些库函数改为自己实现的实现了,相应的调用了MQX API系统调用,如_io_fopen。 这些自己实现的被称为MQX I/O库。 如何改的呢? 通过把如stdio.h中的 using std:: fopen 干掉, 而在fio.h 实现如 #define fopen _io_fopen。 显然,掉用 fopen() 就是调用 _io_fopen(), 调用 ioctrl() 就是调用 _io_ioctrl() 。
阅读(796) | 评论(0) | 转发(0) |