<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è) > 嵌入式系統 > 設計應用 > Linux網(wǎng)絡(luò )驅動(dòng)程序編寫(xiě)(一)

Linux網(wǎng)絡(luò )驅動(dòng)程序編寫(xiě)(一)

作者: 時(shí)間:2007-04-25 來(lái)源:網(wǎng)絡(luò ) 收藏
作需要寫(xiě)了我們公司一塊網(wǎng)卡的Linux驅動(dòng)程序。經(jīng)歷一個(gè)從無(wú)到有的過(guò)程,深感技術(shù)交流的重要。Linux作為挑戰微軟壟斷的強有力武器,日益受到大家的喜愛(ài)。真希望她能在中國迅速成長(cháng)。把程序文檔貼出來(lái),希望和大家探討Linux技術(shù)和應用,促進(jìn)Linux在中國的普及。

  本文可隨意轉載,但請不要在盈利性出版物上刊登。

一.Linux系統設備驅動(dòng)程序概述

1.1 Linux設備驅動(dòng)程序分類(lèi)

  Linux設備驅動(dòng)程序在Linux的內核源代碼中占有很大的比例,源代碼的長(cháng)度日益增加,主要是驅動(dòng)程序的增加。在Linux內核的不斷升級過(guò)程中,驅動(dòng)程序的結構還是相對穩定。在2.0.xx到2.2.xx的變動(dòng)里,驅動(dòng)程序的編寫(xiě)做了一些改變,但是從2.0.xx的驅動(dòng)到2.2.xx的移植只需做少量的工作。

  Linux系統的設備分為字符設備(char device),塊設備(block device)和網(wǎng)絡(luò )設備(network device)三種。字符設備是指存取時(shí)沒(méi)有緩存的設備。塊設備的讀寫(xiě)都有緩存來(lái)支持,并且塊設備必須能夠隨機存取(random access),字符設備則沒(méi)有這個(gè)要求。典型的字符設備包括鼠標,鍵盤(pán),串行口等。塊設備主要包括硬盤(pán)軟盤(pán)設備,CD-ROM等。一個(gè)文件系統要安裝進(jìn)入操作系統必須在塊設備上。

  網(wǎng)絡(luò )設備在Linux里做專(zhuān)門(mén)的處理。Linux的網(wǎng)絡(luò )系統主要是基于BSD unix的socket機制。在系統和驅動(dòng)程序之間定義有專(zhuān)門(mén)的數據結構(sk_buff)進(jìn)行數據的傳遞。系統里支持對發(fā)送數據和接收數據的緩存,提供流量控制機制,提供對多協(xié)議的支持。

1.2 編寫(xiě)驅動(dòng)程序的一些基本概念

  無(wú)論是什么操作系統的驅動(dòng)程序,都有一些通用的概念。操作系統提供給驅動(dòng)程序的支持也大致相同。下面簡(jiǎn)單介紹一下網(wǎng)絡(luò )設備驅動(dòng)程序的一些基本要求。

  1.2.1 發(fā)送和接收

  這是一個(gè)網(wǎng)絡(luò )設備最基本的功能。一塊網(wǎng)卡所做的無(wú)非就是收發(fā)工作。所以驅動(dòng)程序里要告訴系統你的發(fā)送函數在哪里,系統在有數據要發(fā)送時(shí)就會(huì )調用你的發(fā)送程序。還有驅動(dòng)程序由于是直接操縱硬件的,所以網(wǎng)絡(luò )硬件有數據收到最先能得到這個(gè)數據的也就是驅動(dòng)程序,它負責把這些原始數據進(jìn)行必要的處理然后送給系統。這里,操作系統必須要提供兩個(gè)機制,一個(gè)是找到驅動(dòng)程序的發(fā)送函數,一個(gè)是驅動(dòng)程序把收到的數據送給系統。是驅動(dòng)程序把收到的數據送給系統。

  1.2.2 中斷

  中斷在現代計算機結構中有重要的地位。操作系統必須提供驅動(dòng)程序響應中斷的能力。一般是把一個(gè)中斷處理程序注冊到系統中去。操作系統在硬件中斷發(fā)生后調用驅動(dòng)程序的處理程序。Linux支持中斷的共享,即多個(gè)設備共享一個(gè)中斷。

  1.2.3 時(shí)鐘

  在實(shí)現驅動(dòng)程序時(shí),很多地方會(huì )用到時(shí)鐘。如某些協(xié)議里的超時(shí)處理,沒(méi)有中斷機制的硬件的輪詢(xún)等。操作系統應為驅動(dòng)程序提供定時(shí)機制。一般是在預定的時(shí)間過(guò)了以后回調注冊的時(shí)鐘函數。在網(wǎng)絡(luò )驅動(dòng)程序中,如果硬件沒(méi)有中斷功能,定時(shí)器可以提供輪詢(xún)(poll)方式對硬件進(jìn)行存取?;蛘呤菍?shí)現某些協(xié)議時(shí)需要的超時(shí)重傳等。


評論


相關(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>