我使用连接到Linux平台的电路板创建了一个新的内核模块来设置网络设备。 (的/ dev / ttySx) 该模块类似于SLIP模块。它定义了一个新的线路规则。
除波特率配置外,一切正常。 我使用的电路板在配置期间和新的波特率数据传输后需要特定的波特率。
我尝试使用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);
感谢您的帮助
答案 0 :(得分:0)
我遇到了同样的问题,并在我的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);