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);
4

3 回答 3

1

我很确定这只是因为它的教程性质。它试图向您展示如何使用ioctl. 实际上,ioctl将用于配置设备驱动程序或它背后的设备,并且您将使用“正常”方法(可能write)写入数据。

而且,事实上,这就是您提供的链接中的代码所做的事情,它只是将信息传递给内核在将您的数据复制到内核空间device_write所做的事情。

于 2012-09-04T06:15:28.563 回答
1

关键是 ioctl 可以从用户空间调用,但 device_write 只能从内核内部调用。

于 2012-09-04T06:17:16.110 回答
1

ioctl主要用于设置或获取有关设备的特定参数或标志,例如读取或写入设备寄存器。

想象一下你有一个旧的软盘驱动器。它有特殊的寄存器来控制“打开或关闭电机”、“每个扇区的位数”等。要设置这些寄存器,您可以使用该ioctl功能。要写入您使用的实际磁盘,例如device_write.

于 2012-09-04T06:48:51.987 回答