資源描述:
《linux串口驅(qū)動(dòng)編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Linux串口(serial、uart)驅(qū)動(dòng)程序設(shè)計(jì)目錄Linux串口(serial、uart)驅(qū)動(dòng)程序設(shè)計(jì)2一、核心數(shù)據(jù)結(jié)構(gòu)2二、串口驅(qū)動(dòng)API6三、串口驅(qū)動(dòng)例子9linuxUART串口驅(qū)動(dòng)開發(fā)文檔27概念闡述27一、老版本的串口驅(qū)動(dòng)程序28二、目前的串口驅(qū)動(dòng)程序29三、3個(gè)數(shù)據(jù)結(jié)構(gòu)及其串口核心層API311、uart_driver312、uart_port323、uart_ops33四、uart_ops37五、注冊串口終端40六、支持platform_driver43七、串口接收數(shù)據(jù)和發(fā)送數(shù)據(jù)流程451.相關(guān)
2、文件452.數(shù)據(jù)收發(fā)47基于Linux2.6.22和s3c2440的串口驅(qū)動(dòng)簡析---(1)2013-11-2115:56:3248基于Linux2.6.22和s3c2440的串口驅(qū)動(dòng)簡析---(2)2013-11-2115:58:4956Linux串口(serial、uart)驅(qū)動(dòng)程序設(shè)計(jì)分類:LINUX原文地址:Linux串口(serial、uart)驅(qū)動(dòng)程序設(shè)計(jì)作者:lingdxuyan一、核心數(shù)據(jù)結(jié)構(gòu)串口驅(qū)動(dòng)有3個(gè)核心數(shù)據(jù)結(jié)構(gòu),它們都定義在<#includelinux/serial_core.h>1、ua
3、rt_driveruart_driver包含了串口設(shè)備名、串口驅(qū)動(dòng)名、主次設(shè)備號(hào)、串口控制臺(tái)(可選)等信息,還封裝了tty_driver(底層串口驅(qū)動(dòng)無需關(guān)心tty_driver)。structuart_driver{structmodule*owner;/*擁有該uart_driver的模塊,一般為THIS_MODULE*/constchar*driver_name;/*串口驅(qū)動(dòng)名,串口設(shè)備文件名以驅(qū)動(dòng)名為基礎(chǔ)*/constchar*dev_name;/*串口設(shè)備名*/intmajor;/*主設(shè)備號(hào)*/intm
4、inor;/*次設(shè)備號(hào)*/intnr;/*該uart_driver支持的串口個(gè)數(shù)(最大)*/structconsole*cons;/*其對應(yīng)的console.若該uart_driver支持serialconsole,否則為NULL*//**theseareprivate;thelowleveldrivershouldnot*touchthese;theyshouldbeinitialisedtoNULL*/structuart_state*state;structtty_driver*tty_driver;};2
5、、uart_portuart_port用于描述串口端口的I/O端口或I/O內(nèi)存地址、FIFO大小、端口類型、串口時(shí)鐘等信息。實(shí)際上,一個(gè)uart_port實(shí)例對應(yīng)一個(gè)串口設(shè)備structuart_port{spinlock_tlock;/*串口端口鎖*/unsignedintiobase;/*IO端口基地址*/unsignedchar__iomem*membase;/*IO內(nèi)存基地址,經(jīng)映射(如ioremap)后的IO內(nèi)存虛擬基地址*/unsignedintirq;/*中斷號(hào)*/unsignedintuartcl
6、k;/*串口時(shí)鐘*/unsignedintfifosize;/*串口FIFO緩沖大小*/unsignedcharx_char;/*xon/xoff字符*/unsignedcharregshift;/*寄存器位移*/unsignedchariotype;/*IO訪問方式*/unsignedcharunused1;#defineUPIO_PORT(0)/*IO端口*/#defineUPIO_HUB6(1)#defineUPIO_MEM(2)/*IO內(nèi)存*/#defineUPIO_MEM32(3)#defineUPIO
7、_AU(4)/*Au1x00typeIO*/#defineUPIO_TSI(5)/*Tsi108/109typeIO*/#defineUPIO_DWAPB(6)/*DesignWareAPBUART*/#defineUPIO_RM9000(7)/*RM9000typeIO*/unsignedintread_status_mask;/*關(guān)心的Rxerrorstatus*/unsignedintignore_status_mask;/*忽略的Rxerrorstatus*/structuart_info*info;/*
8、pointertoparentinfo*/structuart_icounticount;/*計(jì)數(shù)器*/structconsole*cons;/*console結(jié)構(gòu)體*/#ifdefCONFIG_SERIAL_CORE_CONSOLEunsignedlongsysrq;/*sysrqtimeout*/#endifupf_tflags;#defineUPF_FOURPORT