问题描述
我正在尝试编写简单的内核模块,该模块使用通过串行线连接到系统的设备,但我在实际访问 UART 时遇到了问题。我想我知道如何使用 kernel_read
和 kernel_write
与设备通信:
struct file* serial_file;
char buf[32];
lsoff_t off = 0;
serial_file = filp_open("/dev/ttyS0",O_RDWR,0);
kernel_write(serial_file,"test\n",5,&off);
kernel_read(serial_file,buf,32,&off);
文件似乎已打开(IS_ERR(serial_file)
为 0),但读取和写入返回 EIO - 可能是因为波特率错误。由于没有 kernel_ioctl,因此没有明显的方法来解决这个问题。
对上述问题的回答会很好,但由于这更像是一种黑客攻击(根据我的理解,文件系统不应该以这种方式真正从内核访问),因此更好的解释是如何正确执行此操作?我猜这会涉及直接从 tty_struct
调用函数,但是如何从 file
(或从路径,或从它应该生成的任何内容)获取它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)