C 如何在linux虚拟设备驱动程序中检索数据?

C 如何在linux虚拟设备驱动程序中检索数据?,c,linux,driver,C,Linux,Driver,我必须实现虚拟设备驱动程序,它将计算指定角度的sin 我发现了如何编写hello world驱动程序,当我调用它时,它工作得很好 但要计算sin,我需要将一些数据传输给我的驱动程序。哪种解决方案最无痛 我是否应该首先以单独的方法读取所有输入数据,在某个地方记住它,然后计算并输出?最轻松的解决方案可能是实现ioctl 链接示例中的cat使用read(),当您的设备生成数据(如鼠标或摄像机)时,这很好,但当设备响应命令时,ioctl更合适:您发送一个以角度为参数的命令GET_SIN,并获得一个带有答

我必须实现虚拟设备驱动程序,它将计算指定角度的sin

我发现了如何编写hello world驱动程序,当我调用它时,它工作得很好

但要计算sin,我需要将一些数据传输给我的驱动程序。哪种解决方案最无痛


我是否应该首先以单独的方法读取所有输入数据,在某个地方记住它,然后计算并输出?

最轻松的解决方案可能是实现
ioctl

链接示例中的
cat
使用
read()
,当您的设备生成数据(如鼠标或摄像机)时,这很好,但当设备响应命令时,
ioctl
更合适:您发送一个以角度为参数的命令
GET_SIN
,并获得一个带有答案的回复

另一种方法是
write()
角度,然后
read()
解决方案:要复杂得多,因为可能有多个进程同时读写,这将是一个混乱


顺便说一句,小心!顺便说一句,内核不允许使用浮点算术,也不允许链接到
-lm
,因此您必须将正弦函数实现为定点整数函数,可能使用表…

Wow!非常感谢您的回复。但是,我将如何通过命令行与我的驱动程序通信?或者可能只有编程接口,我将不得不制作单独的程序来使用?@avasin:啊!,这就是缺点!
ioctl
没有通用命令。为了与驱动程序通信,您必须编写一个小的用户空间实用程序。只需一个
main()
程序,它解析
argv[1]
,将其发送到
ioctl
并打印回结果。非常感谢!知道了!我发现,ioctl负值可以被视为错误状态。所以,我必须实现读写接口。@avasin:嗯,
ioctl
可以获取指向单个值或结构的指针。或者假设角度的正弦值在-1和1之间,您可以将输出规格化为(0,2)并在用户区域中进行校正。