1

我试图从一开始就描述我的问题。我是 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;

这样做的结果是该设置未应用于串行端口。即使我将其更改为绝对错误的波特率,我仍然会收到碎片。其中一些是正确的,而另一些则不是。有什么问题,我该怎么办。

4

0 回答 0