资源描述:
《实验 10-1 UART驱动分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验10-1UART驱动程序分析实验【实验目的】Ø掌握串口的通信原理。Ø熟悉串口驱动程序的结构。【实验步骤】PXAUART串口驱动初始化第一步:打开linux-2.6.22.10driversserialpxa.c,找到串口驱动初始化serial_pxa_init(void)int__initserial_pxa_init(void){intret;ret=uart_register_driver(&serial_pxa_reg);if(ret!=0)returnret;ret=platform_driver_reg
2、ister(&serial_pxa_driver);if(ret!=0)uart_unregister_driver(&serial_pxa_reg);returnret;}在UART初始化函数中,首先调用uart_register_driver(structuart_driver*drv)函数来注册UART驱动,在这函数里它会分配一个tty_driver对象,并初始化tty_operations为serial_pxa_pops,这是serial-core.c提供的统一的UART操作函数。第二步:在linux-2.6.22
3、.10driversserialpxa.c找到serial_pxa_reg结构体的定义如下:staticstructuart_driverserial_pxa_reg={.owner=THIS_MODULE,.driver_name="PXAserial",.dev_name="ttyS",.major=TTY_MAJOR,.minor=64,.nr=ARRAY_SIZE(serial_pxa_ports),.cons=PXA_CONSOLE,};从serial_pxa_reg结构体中,UART使用的设备名为ttyS
4、n(n=0~3),主设备号major为4,次设备号minor为64,串口数nr=ARRAY_SIZE(serial_pxa_ports),根据serial_pxa_ports结构体的定义,可以算出串口数nr=4,当然PXA270只有三个串口(FFUART、BTUART、STUART),但是PXA255/26x微处理器还附加了HWUART,serial_pxa_ports定义如下;staticstructuart_pxa_portserial_pxa_ports[]={{/*FFUART*/.name="FFUART",.c
5、ken=CKEN_FFUART,.port={.type=PORT_PXA,.iotype=UPIO_MEM,.membase=(void*)&FFUART,.mapbase=__PREG(FFUART),.irq=IRQ_FFUART,.uartclk=921600*16,.fifosize=64,.ops=&serial_pxa_pops,.line=0,},},{/*BTUART*/.name="BTUART",.cken=CKEN_BTUART,.port={.type=PORT_PXA,.iotype=UPIO_
6、MEM,.membase=(void*)&BTUART,.mapbase=__PREG(BTUART),.irq=IRQ_BTUART,.uartclk=921600*16,.fifosize=64,.ops=&serial_pxa_pops,.line=1,},},{/*STUART*/.name="STUART",.cken=CKEN_STUART,.port={.type=PORT_PXA,.iotype=UPIO_MEM,.membase=(void*)&STUART,.mapbase=__PREG(STUART)
7、,.irq=IRQ_STUART,.uartclk=921600*16,.fifosize=64,.ops=&serial_pxa_pops,.line=2,},},{/*HWUART*/.name="HWUART",.cken=CKEN_HWUART,.port={.type=PORT_PXA,.iotype=UPIO_MEM,.membase=(void*)&HWUART,.mapbase=__PREG(HWUART),.irq=IRQ_HWUART,.uartclk=921600*16,.fifosize=64,.o
8、ps=&serial_pxa_pops,.line=3,},}};第一步:UART平台驱动注册初始化函数然后调用平台驱动注册函数platform_driver_register(structplatform_driver*drv)注册UART驱动,该函数实际上定义有关“伪总线”(pseudo-bus)驱