如标题,我在使用AM6254的6.1.46版本内核时,开发板运行命令如下命令失败,所以想要调试解决该问题:
# stty -F /dev/ttyS1 76800
stty: invalid argument ‘76800’
Try 'stty --help' for more information.
我查看了内核中的这个文件:drivers/tty/tty_baudrate.c
$ vi drivers/tty/tty_baudrate.c
....
static const speed_t baud_table[] = {
0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400,
4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800,
#ifdef __sparc__
76800, 153600, 307200, 614400, 921600, 500000, 576000,
1000000, 1152000, 1500000, 2000000
#else
500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000,
2500000, 3000000, 3500000, 4000000
#endif
};
static const tcflag_t baud_bits[] = {
B0, B50, B75, B110, B134, B150, B200, B300, B600, B1200, B1800, B2400,
B4800, B9600, B19200, B38400, B57600, B115200, B230400, B460800,
#ifdef __sparc__
B76800, B153600, B307200, B614400, B921600, B500000, B576000,
B1000000, B1152000, B1500000, B2000000
#else
B500000, B576000, B921600, B1000000, B1152000, B1500000, B2000000,
B2500000, B3000000, B3500000, B4000000
#endif
};
..
发现在baud_table以及baud_bits中存在76800波特率的配置,于是我在该文件的开头部分添加了:
+ #define __sparc__
这一行代码,但是在编译时我就遇到了这个问题:
drivers/tty/tty_baudrate.c:37:9: error: ¡®B76800¡¯ undeclared here (not in a function); did you mean ¡®B460800¡¯?
37 | B76800, B153600, B307200, B614400, B921600, B500000, B576000,
| ^~~~~~
| B460800
drivers/tty/tty_baudrate.c:37:17: error: ¡®B153600¡¯ undeclared here (not in a function); did you mean ¡®B57600¡¯?
37 | B76800, B153600, B307200, B614400, B921600, B500000, B576000,
| ^~~~~~~
| B57600
drivers/tty/tty_baudrate.c:37:26: error: ¡®B307200¡¯ undeclared here (not in a function)
37 | B76800, B153600, B307200, B614400, B921600, B500000, B576000,
| ^~~~~~~
drivers/tty/tty_baudrate.c:37:35: error: ¡®B614400¡¯ undeclared here (not in a function); did you mean ¡®B600¡¯?
37 | B76800, B153600, B307200, B614400, B921600, B500000, B576000,
| ^~~~~~~
| B600
make[3]: *** [scripts/Makefile.build:250: drivers/tty/tty_baudrate.o] Error 1
make[3]: *** Waiting for unfinished jobs....
我不知道这样修改是否是正确的,我注意到设备树中使用的串口驱动是8250:
$ vi k3-am62-main.dtsi
...
main_uart0: serial@2800000 {
compatible = "ti,am64-uart", "ti,am654-uart";
reg = <0x00 0x02800000 0x00 0x100>;
interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&k3_pds 146 TI_SCI_PD_EXCLUSIVE>;
clocks = <&k3_clks 146 0>;
clock-names = "fclk";
status = "disabled";
};
...
$ grep am654-uart drivers/tty -nR
Binary file drivers/tty/serial/8250/8250_omap.o matches
drivers/tty/serial/8250/8250_omap.c:1263: { .compatible = "ti,am654-uart", .data = &am654_platdata, }
希望有人能够告诉我如何能够让ttyS0成功配置波特率为76800,非常感谢。