<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > vxworks嵌入式操作系統下串行設備驅動(dòng)程序開(kāi)發(fā)思路

vxworks嵌入式操作系統下串行設備驅動(dòng)程序開(kāi)發(fā)思路

作者: 時(shí)間:2012-10-09 來(lái)源:網(wǎng)絡(luò ) 收藏

1. 概 述

我們在基于操作系統開(kāi)發(fā)產(chǎn)品時(shí),經(jīng)常會(huì )根據自行設計的硬件電路開(kāi)發(fā)專(zhuān)用的。Vxworks下的根據設備的不同特性,,大體可分為:char driver、serial driver、bLOCk driver、end driver、scsi driver等類(lèi)型,其中以char driver最簡(jiǎn)單,最基礎,以serial driver最常用。掌握的基本工作流程,無(wú)論對我們開(kāi)發(fā)上層的應用還是自己編寫(xiě)相應的驅動(dòng)程序,都很有幫助。本文主要以i8250串口驅動(dòng)程序為例,介紹一下串行驅動(dòng)程序編寫(xiě)的基本思路。

驅動(dòng)程序,簡(jiǎn)而言之就是對具體的硬件設備進(jìn)行管理和服務(wù)的程序。為了提高代碼的可移植性,將所有的輸入/輸出設備都看成是一個(gè)文件,我們對設備的輸入/輸出操作,都可以看作是對指定文件的讀寫(xiě)操作。例如,我們用c 標準庫函數open()打開(kāi)一個(gè)文件,可以是打開(kāi)一個(gè)傳統意義上的文本文件,也可以是指定一個(gè)輸入/輸出設備,如指定對某一個(gè)串口的輸入/輸出操作。在操作系統中,驅動(dòng)程序的主要作用是完成對相關(guān)設備的讀、寫(xiě)、打開(kāi)、建立、關(guān)閉及控制等功能中的一項或幾項,具體情況視具體的設備及設計要求而定。

概括的說(shuō),驅動(dòng)程序主要完成以下幾項工作:

(1)相關(guān)設備的初始化。

(2)底層輸入/輸出函數與上層標準輸入/輸出函數的掛接。

(3)相關(guān)設備與對應驅動(dòng)程序的掛接。

我們就按照這個(gè)思路,以I8250串口為例,分析一下驅動(dòng)程序的編寫(xiě)及加載流程。首先,給出驅動(dòng)的結構框圖:

需要說(shuō)明的是,ttyDrv是一個(gè)虛擬的設備驅動(dòng),與tylib一起,用于處理I/O系統與底層實(shí)際設備之間的通信。主要完成以下工作:

(1)處理I/O系統的各種需求,如在driver talbe 中添加相應的驅動(dòng)條目、創(chuàng )建設備標識符(devise descriptor)。

(2)實(shí)現與上層標準I/O函數及實(shí)際驅動(dòng)程序的無(wú)縫連接。其中,ttyDrv完成open和ioctl兩項功能(ttyopen()和ttyioctl())。Tylib完成read和write兩項功能(tyRead()和tyWrite())。

(3)管理輸入/輸出數據緩沖區。

下面,我們結合圖(一)給出的框圖,以i8250為例,開(kāi)始分析驅動(dòng)的設計流程。用戶(hù)在編寫(xiě)自己的驅動(dòng)程序時(shí),可以不按照系統函數命名的方法命名,也可以不按照系統給定的方法進(jìn)行函數功能的劃分,但其初始化及實(shí)現流程卻不能改變。

2. 驅動(dòng)程序設計流程分析

⑴ i8250相關(guān)硬件設備的初始化。

編寫(xiě)驅動(dòng)程序的第一步是完成相關(guān)硬件的初始化。與I8250相關(guān)的硬件初始化函數主要有以下三個(gè):sysSerialHwInit()、i8250HrdInit()、i8250InitChannel(),其調用順序是:sysSerialHwInit()ài8250HrdInit()ài8250InitChannel(),這條工作鏈的主要作用是,完成對I8250_CHAN數據結構的初始化。

下面對分別這幾個(gè)函數的功能介紹一下:

l

sysSerialHwInit()

本函數完成的主要任務(wù)是初始化設備的中斷向量、串口的通信模式及相關(guān)存貯器,在函數的最后調用i8250HrdInit()對I8250_CHAN結構進(jìn)一步初始化。

void sysSerialHwInit (void)

{

int i;

for (i=0;i

{

i8250Chan[i].int_vec = devParas[i].vector; /*初始化中斷向量*/

i8250Chan[i].channelMode = 0; /*初始化SIO_MODE 可以是INT或POLL*/

i8250Chan[i].lcr = UART_REG(UART_LCR,i); /*初始化line control register*/

………………………

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>