我试图从一开始就描述我的问题。我是 linux 潜水员开发的新手,所以请指出我在项目中考虑的问题。
我现在正在为调制解调器开发一个 linux 驱动程序,但不是一个典型的驱动程序。我希望它可以用作网络适配器,而不是调制解调器。它通过串口与电脑相连。由于我的问题的性质,我必须使用 USB 串行转换器。大多数答案建议改用用户空间驱动程序。但是,由于我想提供像 eth0 这样的网络接口,所以我必须在内核中实现它。除了打开/读/写 ttyUSB0 文件之外,我没有任何其他想法解决这个问题。
我现在正在使用这样的代码
struct file *f;
mm_segment_t oldfs;
struct tty_struct *tty;
struct termios term;
unsigned char buffer[255];
f=filp_open("/dev/ttyS0",O_RDWR | O_NDELAY,0);
oldfs=getfs();
set_fs(KERNEL_DS);
f->f_pos=0;
tty=(struct tty_struct*)f->private_data;
tty->termios->c_flag=B9600 | CRTSCTS | CS8 | CLOCAL | CREAD;
这时候tty->termios是NULL,所以最后一步就做不了了。我要做的是:
struct ktermio term;
//setting the termio
tty->termios = &term;
这样做的结果是该设置未应用于串行端口。即使我将其更改为绝对错误的波特率,我仍然会收到碎片。其中一些是正确的,而另一些则不是。有什么问题,我该怎么办。