我创建了一个新的内核模块来设置网络设备,使用带有串行端口的Linux平台的板。(/dev/ttysx)该模块类似于滑移模块。它定义了一条新的纪律。
除了波特速率配置外,一切都很好。我正在使用的董事会在配置过程中需要特定的波特率,以及用于数据传输的新baudrate之后。
我试图使用tty_encode_baud_rate()原始性配置此Baud速率,并且可以使用tty_termios_baud_rate()原始的tty_termios_baud_rate()正确设置它。问题是它不起作用。UART波特率没有更改。
我在这一点上需要帮助。
我用来更改baudrate的源代码是:
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 %dn", tty_termios_baud_rate(&tty->termios));
up_write(&tty->termios_rwsem);
谢谢您的帮助
我遇到了相同的问题,并在我的ldisc打开函数中使用此代码段解决了:
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);