你好 Linux 内核驱动大师!
我正在为使用串行接口(interface)进行配置的相机编写 v4l2 驱动程序。我希望驱动程序配置相机,因为它使客户端代码在相机型号之间保持一致。问题是:从驱动模块访问相机串行接口(interface)的最佳方式是什么?
据我所知,从内核驱动程序访问文件是一个很大的禁忌,但它可以做到。因此,我目前正在使用以下代码片段,但感觉就像是 hack。
oldfs = get_fs();
set_fs(KERNEL_DS);
fd->f_pos=0;
fd->f_op->write(fd, data, data_len, &fd->f_pos);
set_fs(oldfs);
我的问题是:这样做的正确方法是什么?
最佳答案
我想既然涉及到串口,那一定是某种嵌入式系统。毕竟,没有多少PC甚至有串口。我还假设串行端口可以被认为是一个永久连接,至少从用户的角度来看是这样。如果这一切都是真的,那么你真的不需要 TTY 设备。您希望将设备作为私有(private) UART 访问。
如果您查看 Wolfson 音频编解码器 (sound/soc/wm*.c),您将看到主要通过 I2S 进行通信但具有用于配置的辅助 I2C 接口(interface)的设备示例。我相信这在概念上是你想要的。驱动程序为软件提供统一的接口(interface),并向任何合适的硬件发出命令。显然,这比必须向用户空间公开硬件实现细节要干净得多。
我在内核中找不到一个以这种方式工作的 UART 驱动程序的好例子,但希望我已经描述了要查找的内容。从实用而非技术纯度的角度来看,从内核执行文件 I/O 可能会更好。
关于linux-kernel - 从 linux 内核模块访问串行端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379720/