如何在我的 linux 虚拟设备驱动程序中检索数据?
How i can retrieve data in my linux virtual device driver?
我必须实现虚拟设备驱动程序,它将计算指定角度的正弦值。
我发现 article 如何编写 hello-world 驱动程序,当我调用 cat
时它工作得很好。
但是为了计算 sin,我需要将一些数据传输到我的驱动程序。哪种解决方案最无痛?
我是否应该首先用单独的方法读取所有输入数据,记住它,然后计算并输出?
最轻松的解决方案可能是实施 ioctl
。
linked 示例中的 cat
使用 read()
,这在您的设备生成数据(例如鼠标或摄像机)但设备回复时很好命令 ioctl
更合适:您发送命令 GET_SIN
并以角度作为参数并得到包含答案的回复。
另一种方法是write()
角度然后read()
解决方案:要复杂得多,因为可能有多个进程同时读写,这会很乱!
顺便说一句,当心! AFAIK,内核不允许使用浮点算术,也不允许 link 到 -lm
,因此您必须将正弦函数实现为定点整数函数,可能使用 table...
我必须实现虚拟设备驱动程序,它将计算指定角度的正弦值。
我发现 article 如何编写 hello-world 驱动程序,当我调用 cat
时它工作得很好。
但是为了计算 sin,我需要将一些数据传输到我的驱动程序。哪种解决方案最无痛?
我是否应该首先用单独的方法读取所有输入数据,记住它,然后计算并输出?
最轻松的解决方案可能是实施 ioctl
。
linked 示例中的 cat
使用 read()
,这在您的设备生成数据(例如鼠标或摄像机)但设备回复时很好命令 ioctl
更合适:您发送命令 GET_SIN
并以角度作为参数并得到包含答案的回复。
另一种方法是write()
角度然后read()
解决方案:要复杂得多,因为可能有多个进程同时读写,这会很乱!
顺便说一句,当心! AFAIK,内核不允许使用浮点算术,也不允许 link 到 -lm
,因此您必须将正弦函数实现为定点整数函数,可能使用 table...