我创建了一个新的内核模块来安装一个网络设备,使用一个连接到linux平台的带有串行端口的板。(/dev/ttysx)
此模块类似于滑动模块。它定义了一个新的线路规程。
一切正常,除了波特率配置。
我使用的主板在配置期间和数据传输的新波特率之后需要一个特定的波特率。
我试着用tty_encode_baud_rate()原语配置这个波特率,我可以看到,使用tty_termios_baud_rate()原语,它设置正确。问题是它不起作用。UART波特率没有改变。
在这一点上我需要帮助。
我用来更改波特率的源代码是:

down_write( &tty->termios_rwsem);
old_termios = tty->termios;
cflag = tty->termios.c_cflag;
tty_encode_baud_rate(tty, (speed_t)115200, (speed_t)115200);
if (tty->ops->set_termios)
    tty->ops->set_termios(tty, &old_termios);
printk( " New TTY baudrate is %d\n", tty_termios_baud_rate(&tty->termios));
up_write(&tty->termios_rwsem);

谢谢你的帮助

最佳答案

我也遇到了同样的问题,并用ldisc open函数中的代码片段解决了这个问题:

struct ktermios new_termios;
/* set baudrate */
down_read(&tty->termios_rwsem);
new_termios = tty->termios;
up_read(&tty->termios_rwsem);
tty_termios_encode_baud_rate(&new_termios, 38400, 38400);
tty_set_termios(tty, &new_termios);

关于linux - 如何配置串行端口(/dev/ttySx)的波特率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46050459/

10-12 04:48