Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1978178
  • 博文数量: 27
  • 博客积分: 10027
  • 博客等级: 上将
  • 技术积分: 1865
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-19 09:10
文章分类

全部博文(27)

文章存档

2010年(2)

2009年(3)

2008年(22)

分类: LINUX

2008-03-11 16:54:35

文章说明: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,不过相应的变化启动脚本要发生变化。
阅读(2710) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

piaoxiang2008-03-26 10:43:50

对2.4.27来说,应该在include/asm-arm/arch-at91rm9200/at91rm9200dk.h修改,方法是一样的。不过可以从中看出,2.6.20在可读性上要好了很多。