需要在linux内核驱动程序中定义ioctl

时间:2012-09-04 06:04:12

标签: c linux linux-kernel ioctl

我已经开始学习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);

3 个答案:

答案 0 :(得分:1)

我很确定这仅仅是因为它的教程性质。它试图向您展示如何使用ioctl。实际上,ioctl将用于配置设备驱动程序或其背后的设备,您可以使用“普通”方法(可能是write)来编写数据。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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