如何在我的 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...