文章说明:calmarrow(lqm)原创 文章引自:http://piaoxiang.cublog.cn
|
内核版本为Linux 2.6.20.修改9200的串口驱动,改arch/arm/mach-at91rm9200/board-dk.c。
/* * Serial port configuration. * 0 .. 3 = USART0 .. USART3 * 4 = DBGU */ static struct at91_uart_config __initdata dk_uart_config = { .console_tty = 0, /* ttyS0 */ .nr_tty = 2, .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ };
|
理解各项的含义,需要弄清楚at91_uart_config结构体的细节。定义地址在include/asm-arm/arch-at91rm9200/board.h。
/* Serial */ struct at91_uart_config { unsigned short console_tty; /* tty number of serial console */ unsigned short nr_tty; /* number of serial tty's */ short tty_map[]; /* map UART to tty number */ };
|
可见,这个结构体要实现SoC硬件设备与tty设备名之间的对应关系。at91rm9200的serial设备有DEGU,USART0,USART1,USART2,USART3.硬件设计上来说,DEGU作为调试通道,一般是有的。而串行口的设计上,可以设计为两个,也可以设计为四个,依定需求而确定。
at91_uart_config的console_tty是调试终端对应的设备名,这里一般会选择ttyS0。这个与bootloader命令行参数设计中console=ttySAC0,115200似乎有点冲突,具体细节需要考虑。
nr_tty是串口设备的数目,比如现在用的板子只有三个串口,那么就要设定为3.
tty_map是映射对应函数。初始化的值是SoC设备代表的数字,其中DEGU为4,USART[0-3]分别为[0
-3]。
DEGU(4) ---> ttyS0 USART0(0) ---> ttyS1 USART1(1) ---> ttyS2 USART2(2) ---> ttyS3 USART3(3) ---> ttyS4
|
如果设定为上述对应关系,那么.tty_map = { 4, 0, 1, 2, 3 }.
如果串口小于5个,那么用-1表示不存在。比如,在现在这块开发板上面,对应关系如下:
DEGU(4) ---> ttyS0 USART0(0) ---> ttyS1 USART1(1) ---> ttyS2 (下面没有使用) USART2(2) ttyS3 USART3(3) ttyS4
|
所以.tty_map = { 4, 0, 1, -1, -1 }
当然,自然对应关系最好,你也可以让DEGU对应ttyS3,不过相应的变化启动脚本要发生变化。
阅读(2761) | 评论(1) | 转发(0) |