如何从linux内核访问uart?

问题描述

我正在尝试编写简单的内核模块,该模块使用通过串行线连接到系统的设备,但我在实际访问 UART 时遇到了问题。我想我知道如何使用 kernel_readkernel_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 (将#修改为@)