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