6

我正在为小型微控制器应用程序开发设备驱动程序 I/O 模型,使用 POSIX 作为接口设计的指南。我实现ioctl()了一种控制驱动程序/硬件参数的方法——例如 UART 波特率、I2C 从机地址等。

我注意到 POSIX:2008 列出ioctl()<stropts.h>作为obsolescent。与设备驱动程序通信的推荐替代机制是什么?

4

1 回答 1

8

POSIX 只定义了一个非常有限的ioctl()功能子集——与 STREAMS 相关的功能。由于 STREAMS 工具已过时,它的接口在 POSIX 中也已过时。

然而,ioctl()自从“永远”以来,它一直是 Unix 的一部分(它肯定是 UNIX 的第 7 版,我可以肯定的是,即使在那时它也不是新的)。这是打开设备驱动程序后控制设备驱动程序的“方法”。唯一的问题是这些接口和控件没有标准化。

您可以查看<termios.h>为控制终端编写的一组函数的文件。我希望典型的实现使用ioctl()或其他类似的专用机制,但接口在标准化时是通用的(<termios.h>接口与任何早期接口不同,无论是第 7 版还是 System III 或任何其他接口)。如果您愿意,您可以在ioctl()界面上编写用户将使用的标准函数;您将实现这些功能以调用您的ioctl()界面。

所以,ioctl()不会消失;这是控制设备驱动程序的正确方法。POSIX 的议程略有不同,仅此而已。

于 2011-09-03T17:51:43.760 回答