我正在为小型微控制器应用程序开发设备驱动程序 I/O 模型,使用 POSIX 作为接口设计的指南。我实现ioctl()
了一种控制驱动程序/硬件参数的方法——例如 UART 波特率、I2C 从机地址等。
我注意到 POSIX:2008 列出ioctl()
并<stropts.h>
作为obsolescent。与设备驱动程序通信的推荐替代机制是什么?
POSIX 只定义了一个非常有限的ioctl()
功能子集——与 STREAMS 相关的功能。由于 STREAMS 工具已过时,它的接口在 POSIX 中也已过时。
然而,ioctl()
自从“永远”以来,它一直是 Unix 的一部分(它肯定是 UNIX 的第 7 版,我可以肯定的是,即使在那时它也不是新的)。这是打开设备驱动程序后控制设备驱动程序的“方法”。唯一的问题是这些接口和控件没有标准化。
您可以查看<termios.h>
为控制终端编写的一组函数的文件。我希望典型的实现使用ioctl()
或其他类似的专用机制,但接口在标准化时是通用的(<termios.h>
接口与任何早期接口不同,无论是第 7 版还是 System III 或任何其他接口)。如果您愿意,您可以在ioctl()
界面上编写用户将使用的标准函数;您将实现这些功能以调用您的ioctl()
界面。
所以,ioctl()
不会消失;这是控制设备驱动程序的正确方法。POSIX 的议程略有不同,仅此而已。