我已经开始学习ioctl
我有这个例子
http://tldp.org/LDP/lkmpg/2.6/html/x892.html
我得到了 ioctal 的全部工作,但我不明白为什么以及在哪里需要为我们的驱动程序定义 ioctal。?
对于那个例子
而不是打电话
ioctl(file_desc, IOCTL_SET_MSG, message);
为什么我们不能直接使用
device_write(file, message, size, 0);
我已经开始学习ioctl
我有这个例子
http://tldp.org/LDP/lkmpg/2.6/html/x892.html
我得到了 ioctal 的全部工作,但我不明白为什么以及在哪里需要为我们的驱动程序定义 ioctal。?
对于那个例子
而不是打电话
ioctl(file_desc, IOCTL_SET_MSG, message);
为什么我们不能直接使用
device_write(file, message, size, 0);
我很确定这只是因为它的教程性质。它试图向您展示如何使用ioctl
. 实际上,ioctl
将用于配置设备驱动程序或它背后的设备,并且您将使用“正常”方法(可能write
)写入数据。
而且,事实上,这就是您提供的链接中的代码所做的事情,它只是将信息传递给内核在将您的数据复制到内核空间后device_write
所做的事情。
关键是 ioctl 可以从用户空间调用,但 device_write 只能从内核内部调用。
ioctl
主要用于设置或获取有关设备的特定参数或标志,例如读取或写入设备寄存器。
想象一下你有一个旧的软盘驱动器。它有特殊的寄存器来控制“打开或关闭电机”、“每个扇区的位数”等。要设置这些寄存器,您可以使用该ioctl
功能。要写入您使用的实际磁盘,例如device_write
.