![Linux系統(tǒng)移植(第2版):第9章 網(wǎng)卡驅(qū)動程序移植_第1頁](http://file4.renrendoc.com/view/dc2f5cba12f14a52528c46fbcf195966/dc2f5cba12f14a52528c46fbcf1959661.gif)
![Linux系統(tǒng)移植(第2版):第9章 網(wǎng)卡驅(qū)動程序移植_第2頁](http://file4.renrendoc.com/view/dc2f5cba12f14a52528c46fbcf195966/dc2f5cba12f14a52528c46fbcf1959662.gif)
![Linux系統(tǒng)移植(第2版):第9章 網(wǎng)卡驅(qū)動程序移植_第3頁](http://file4.renrendoc.com/view/dc2f5cba12f14a52528c46fbcf195966/dc2f5cba12f14a52528c46fbcf1959663.gif)
![Linux系統(tǒng)移植(第2版):第9章 網(wǎng)卡驅(qū)動程序移植_第4頁](http://file4.renrendoc.com/view/dc2f5cba12f14a52528c46fbcf195966/dc2f5cba12f14a52528c46fbcf1959664.gif)
![Linux系統(tǒng)移植(第2版):第9章 網(wǎng)卡驅(qū)動程序移植_第5頁](http://file4.renrendoc.com/view/dc2f5cba12f14a52528c46fbcf195966/dc2f5cba12f14a52528c46fbcf1959665.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章網(wǎng)卡驅(qū)動程序移植9.1以太網(wǎng)概述9.2網(wǎng)絡(luò)設(shè)備驅(qū)動程序體系結(jié)構(gòu)9.3net_device數(shù)據(jù)結(jié)構(gòu)9.4DM9000網(wǎng)卡概述9.5DM9000網(wǎng)卡驅(qū)動程序移植9.1以太網(wǎng)概述9.1.1以太網(wǎng)連接9.1.2以太網(wǎng)技術(shù)概述9.1.3以太網(wǎng)的幀結(jié)構(gòu)9.1.1以太網(wǎng)連接以太網(wǎng)技術(shù)規(guī)范中規(guī)定了以太網(wǎng)的拓?fù)浣Y(jié)構(gòu)、傳輸介質(zhì)和工作模式,以下分別對其進(jìn)行描述。1.以太網(wǎng)的拓?fù)浣Y(jié)構(gòu)2.以太網(wǎng)接口的工作模式3.傳輸介質(zhì)1.以太網(wǎng)的拓?fù)浣Y(jié)構(gòu)以太網(wǎng)拓?fù)浣Y(jié)構(gòu)有總線型和星型??偩€型:總線型網(wǎng)絡(luò)所采用的傳輸介質(zhì)一般也是同軸電纜(包括粗纜和細(xì)纜),不過現(xiàn)在也有采用光纜作為總線型傳輸介質(zhì)的。星型:網(wǎng)絡(luò)中的各工作站結(jié)點設(shè)備通過一個網(wǎng)絡(luò)集中設(shè)備(如集線器或者交換機(jī))連接在一起,各個結(jié)點呈星狀分布,這便是星型結(jié)構(gòu)。2.以太網(wǎng)接口的工作模式以太網(wǎng)卡可以工作在以下兩種模式下:半雙工與全雙工。半雙工:半雙工就是指一個時間段內(nèi)只有一個動作發(fā)生。全雙工:全雙工(FullDuplex)是指網(wǎng)卡在發(fā)送數(shù)據(jù)的同時也能夠接收數(shù)據(jù),兩者同時進(jìn)行。3.傳輸介質(zhì)以太網(wǎng)中采用了多種傳輸介質(zhì),包括同軸纜、雙絞線和光纖等。9.1.2以太網(wǎng)技術(shù)概述以下簡單概述以太網(wǎng)的相關(guān)技術(shù)標(biāo)準(zhǔn)。1.以太網(wǎng)的工作原理2.Ethernet地址3.數(shù)據(jù)鏈路層1.以太網(wǎng)的工作原理(1)先檢測網(wǎng)絡(luò)查看是否有其他主機(jī)正在傳輸,即監(jiān)聽信道是否空閑。(2)如果信道忙,則等待,直到信道空閑;如果信道閑,站點就傳輸數(shù)據(jù)。(3)在發(fā)送數(shù)據(jù)的同時,主機(jī)繼續(xù)監(jiān)聽網(wǎng)絡(luò)并確信沒有其他主機(jī)在同時傳輸數(shù)據(jù)。(4)當(dāng)一個傳輸結(jié)點識別出一個沖突,它就發(fā)送一個擁塞信號,這個信號使得沖突的時間足夠長,讓其他的結(jié)點都能發(fā)現(xiàn)。(5)其他結(jié)點收到擁塞信號后,都停止傳輸,等待一個隨機(jī)產(chǎn)生的時間間隙(回退時間,BackoffTime)后重發(fā)。2.Ethernet地址以太網(wǎng)中通過給每臺主機(jī)上的網(wǎng)絡(luò)適配器(網(wǎng)絡(luò)接口卡)分配一個唯一的通信地址標(biāo)識以太網(wǎng)上的每臺計算機(jī),通常也稱為網(wǎng)卡的物理地址、MAC地址。3.數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層位于OSI參考模型中的第二層,介乎于物理層及網(wǎng)絡(luò)層之間。數(shù)據(jù)鏈路層在物理層提供服務(wù)的基礎(chǔ)上向網(wǎng)絡(luò)層提供服務(wù)。局域網(wǎng)的數(shù)據(jù)鏈路層具有介質(zhì)訪問控制的功能。一般數(shù)據(jù)鏈路層劃分成兩個子層。9.1.3以太網(wǎng)的幀結(jié)構(gòu)在Ethernet中有幾種不同的幀格式,下面就簡單介紹一下幾種不同的幀格式及它們的差異,先分別列出各種格式的名稱。EthernetII即DIX2.0Ethernet802.3rawEthernet802.3SAPEthernet802.3SNAP1.EthernetII幀格式2.Ethernet802.3raw幀格式3.Ethernet802.3SAP幀格式4.Ethernet802.3SNAP幀格式9.2網(wǎng)絡(luò)設(shè)備驅(qū)動程序體系結(jié)構(gòu)9.2.1嵌入式Linux網(wǎng)絡(luò)驅(qū)動程序介紹9.2.2Linux網(wǎng)絡(luò)設(shè)備驅(qū)動的體系結(jié)構(gòu)9.2.3網(wǎng)絡(luò)設(shè)備驅(qū)動程序編寫方法9.2.4網(wǎng)絡(luò)設(shè)備驅(qū)動程序應(yīng)用實例9.2.1嵌入式Linux網(wǎng)絡(luò)驅(qū)動程序介紹通常,Linux驅(qū)動程序有兩種加載方式:一種是靜態(tài)地編譯進(jìn)內(nèi)核,內(nèi)核啟動時自動加載;另一種是編寫為內(nèi)核模塊,使用insmod命令將模塊動態(tài)加載到正在運(yùn)行的內(nèi)核,不需要時可用rmmod命令將模塊卸載。Linux2.6內(nèi)核引入了kbuild機(jī)制,將外部內(nèi)核模塊的編譯同內(nèi)核源碼樹的編譯統(tǒng)一起來,大大簡化了特定參數(shù)和宏的設(shè)置。9.2.2
Linux網(wǎng)絡(luò)設(shè)備驅(qū)動的體系結(jié)構(gòu)如圖9.8所示,Linux網(wǎng)絡(luò)驅(qū)動程序的體系結(jié)構(gòu)可劃分為4個層次,即網(wǎng)絡(luò)協(xié)議接口層、網(wǎng)絡(luò)設(shè)備接口層、提供實際功能的設(shè)備驅(qū)動功能層及設(shè)備物理媒介層。9.2.3網(wǎng)絡(luò)設(shè)備驅(qū)動程序編寫方法網(wǎng)絡(luò)設(shè)備驅(qū)動程序編寫包括網(wǎng)絡(luò)設(shè)備的初始化,數(shù)據(jù)包發(fā)送和接收函數(shù)的編寫及其他相關(guān)內(nèi)容。1.初始化2.數(shù)據(jù)包的發(fā)送與接收3.實現(xiàn)模式1.初始化網(wǎng)絡(luò)設(shè)備的初始化主要是由device數(shù)據(jù)結(jié)構(gòu)中的init函數(shù)指針?biāo)傅某跏蓟瘮?shù)來完成的,當(dāng)內(nèi)核啟動或加載網(wǎng)絡(luò)驅(qū)動模塊的時候,就會調(diào)用初始化過程。最后調(diào)用registre_netdevice()向Linux內(nèi)核中注冊該設(shè)備并申請內(nèi)存空間。2.數(shù)據(jù)包的發(fā)送與接收數(shù)據(jù)包的發(fā)送和接收是實現(xiàn)Linux網(wǎng)絡(luò)驅(qū)動程序中兩個最重要的過程,對這兩個過程處理的成功與否將直接影響到驅(qū)動程序的整體運(yùn)行質(zhì)量。數(shù)據(jù)包接收是通過系統(tǒng)的中斷機(jī)制來完成的。3.實現(xiàn)模式實現(xiàn)Linux網(wǎng)絡(luò)設(shè)備驅(qū)動的功能主要有兩種形式,一是通過內(nèi)核進(jìn)行加載,當(dāng)內(nèi)核啟動的時候,就開始加載網(wǎng)絡(luò)設(shè)備驅(qū)動程序,內(nèi)核啟動完成之后,網(wǎng)絡(luò)驅(qū)動功能也隨即實現(xiàn)了,再就是通過模塊加載的形式。比較這兩種形式,第二種形式更靈活些,在此重點對模塊加載形式進(jìn)行討論。9.2.4網(wǎng)絡(luò)設(shè)備驅(qū)動程序應(yīng)用實例以ne2000兼容網(wǎng)卡為例,來具體介紹基于模塊的網(wǎng)絡(luò)驅(qū)動程序的設(shè)計過程??梢詤⒖嘉募inux/drivers/net/ne.c和linux/drivers/net/8390.c。1.模塊加載和卸載2.網(wǎng)絡(luò)接口初始化1.模塊加載和卸載ne2000網(wǎng)卡的模塊加載功能由init_module()函數(shù)完成。模塊卸載功能由cleanup_module()函數(shù)。2.網(wǎng)絡(luò)接口初始化實現(xiàn)此功能是由ne_probe()函數(shù)完成的,前面已經(jīng)提到過,在init_module()函數(shù)中用它來初始化init()函數(shù)指針。它主要對網(wǎng)卡進(jìn)行檢測,并且初始化系統(tǒng)中網(wǎng)絡(luò)設(shè)備信息用于后面的網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。9.3net_device數(shù)據(jù)結(jié)構(gòu)9.3.1全局信息9.3.2硬件信息9.3.3接口信息9.3.4設(shè)備方法9.3.5公用成員9.3.1全局信息結(jié)構(gòu)體net_device的第一部分由下面成員組成:charname[IFNAMSIZ]//設(shè)備名字unsignedlongstate//設(shè)備狀態(tài)structnet_device*next//全局列表中指向下一個設(shè)備的指針。int(*init)(structnet_device*dev)//一個初始化函數(shù)。9.3.2硬件信息下面的成員包含了相對簡單的設(shè)備低層硬件信息。它們是早期Linux網(wǎng)絡(luò)的延續(xù);大部分現(xiàn)代驅(qū)動確實使用它們(可能的例外是if_port)。unsignedlongrmem_endunsignedlongrmem_startunsignedlongmem_endunsignedlongmem_start//設(shè)備內(nèi)存信息unsignedlongbase_addr//這個成員表示網(wǎng)絡(luò)接口的I/O基地址。unsignedcharirq//表示中斷號unsignedcharif_port//在多端口設(shè)備中,這里表示使用的端口。unsignedchardma//為設(shè)備分配的DMA通道9.3.3接口信息有關(guān)接口的大部分信息是由ether_setup函數(shù)設(shè)置的(或者任何其他對給定硬件類型適合的設(shè)置函數(shù))。以太網(wǎng)卡可以通過這個通用的函數(shù)設(shè)置大部分接口信息成員,要指出的是flags和dev_addr成員是特定設(shè)備的,須在初始化時明確指定。9.3.4設(shè)備方法網(wǎng)絡(luò)接口的設(shè)備方法可分為2組:基本的和可選的?;镜姆椒ò切┍匦璧哪軌蚴褂媒涌诘模豢蛇x的方法實現(xiàn)更多高級的不是嚴(yán)格要求的功能。下列是基本方法:int(*open)(structnet_device*dev);//打開接口int(*stop)(structnet_device*dev);//停止接口int(*hard_start_xmit)(structsk_buff*skb,structnet_device*dev);//起始報文的發(fā)送方法int(*hard_header)(structsk_buff*skb,structnet_device*dev,unsignedshorttype,void*daddr,void*saddr,unsignedlen);//用之前取到的源和目的硬件地址來建立硬件頭的函數(shù)(在hard_start_xmit前調(diào)用)。int(*rebuild_header)(struct
sk_buff*skb);
//用來在ARP解析完成后但是在報文發(fā)送前重建硬件頭的函數(shù)。void(*tx_timeout)(structnet_device*dev);//一個報文發(fā)送沒有在一個合理的時間內(nèi)完成時,由網(wǎng)絡(luò)代碼調(diào)用的方法。structnet_device_stats*(*get_stats)(structnet_device*dev);
//任何時候當(dāng)一個應(yīng)用程序需要獲取接口的統(tǒng)計信息時,調(diào)用這個方法。int(*set_config)(structnet_device*dev,structifmap*map);//改變接口配置。9.3.5公用成員結(jié)構(gòu)net_device剩下的數(shù)據(jù)成員由接口使用。有些是ifconfig和netstat用來提供給用戶關(guān)于當(dāng)前配置的信息。因此,接口應(yīng)該給這些成員賦值:unsignedlongtrans_start;unsignedlonglast_rx;//保存一個jiffy值的成員intwatchdog_timeo;//網(wǎng)絡(luò)層認(rèn)為一個傳送超時發(fā)生前應(yīng)當(dāng)過去的最小時間(按jiffy計算)。void*priv;filp->private_data的對等者。structdev_mc_list*mc_list;intmc_count;//處理組播發(fā)送的成員。c_count是mc_list中的項數(shù)目。spinlock_txmit_lock;intxmit_lock_owner;//xmit_lock用來避免對驅(qū)動的hard_start_xmit()函數(shù)多個同時調(diào)用。xmit_lock_owner是已獲得xmit_lock的CPU號。9.4DM9000網(wǎng)卡概述9.4.1DM9000網(wǎng)卡總體介紹9.4.2DM9000網(wǎng)卡的特點9.4.1DM9000網(wǎng)卡總體介紹DM9000是一種快速以太網(wǎng)控制處理器,它合成了MAC、PHY和MMU。DM9000還集成了接收緩沖區(qū)。DM9000還提供介質(zhì)無關(guān)接口。9.4.2
DM9000網(wǎng)卡的特點DM9000網(wǎng)卡具有如下特點。支持處理器讀寫內(nèi)部存儲器的數(shù)據(jù)操作命令以字節(jié)/字/雙字的長度進(jìn)行;集成10/100M自適應(yīng)收發(fā)器;支持介質(zhì)無關(guān)接口;支持背壓模式半雙工流量控制模式;IEEE
802.3x流量控制的全雙工模式;支持喚醒幀,鏈路狀態(tài)改變和遠(yuǎn)程的喚醒;4K雙字SRAM;支持自動加載EEPROM里面生產(chǎn)商ID和產(chǎn)品ID;支持4個通用輸入輸出口;超低功耗模式;功率降低模式;電源故障模式;可選擇1:1YL18-2050S,YT37-1107S或5∶4變壓比例的變壓器降低格外功率;兼容3.3V和5.0V輸入輸出電壓;100腳CMOSLQFP封裝工藝。9.4.3內(nèi)部寄存器DM9000包含一系列可被訪問的控制狀態(tài)寄存器,這些寄存器是字節(jié)對齊的,它們在硬件或軟件復(fù)位時被設(shè)置成初始值,以下為DM9000的寄存器功能詳解。1.網(wǎng)絡(luò)控制寄存器(NCR)網(wǎng)絡(luò)控制寄存器用于對DM9000工作狀態(tài)的控制,可以使DM9000復(fù)位。功
能位描
述EXT_PHY[7]1選擇外部PHY,0選擇內(nèi)部PHY,不受軟件復(fù)位影響WAKEEN[6]事件喚醒使能,1使能,0禁止并清除事件喚醒狀態(tài),不受軟件復(fù)位影響保留[5]
FCOL[4]1強(qiáng)制沖突模式,用于用戶測試FDX[3]全雙工模式。內(nèi)部PHY模式下只讀,外部PHY下可讀寫LBK[1-2]回環(huán)模式(Loopback)00通常,01MAC內(nèi)部回環(huán),10內(nèi)部PHY100M模式數(shù)字回環(huán),11保留RST[0]1軟件復(fù)位,10us后自動清零2.網(wǎng)絡(luò)狀態(tài)寄存器(NSR)網(wǎng)絡(luò)狀態(tài)寄存器,通過該寄存器可以獲知DM9000當(dāng)前的工作狀態(tài),例如是否處于連接狀態(tài),發(fā)送數(shù)據(jù)是否完畢,是否處于睡眠狀態(tài)等。功
能位描
述SPEED[7]媒介速度,在內(nèi)部PHY模式下,0為100Mbps,1為10Mbps。當(dāng)LINKST=0時,此位不用LINKST[6]連接狀態(tài),在內(nèi)部PHY模式下,0為連接失敗,1為已連接WAKEST[5]喚醒事件狀態(tài)。讀取或?qū)?將清零該位。不受軟件復(fù)位影響保留[4]
TX2END[3]TX(發(fā)送)數(shù)據(jù)包2完成標(biāo)志,讀取或?qū)?將清零該位。數(shù)據(jù)包指針2傳輸完成TX2END[2]TX(發(fā)送)數(shù)據(jù)包1完成標(biāo)志,讀取或?qū)?將清零該位。數(shù)據(jù)包指針1傳輸完成RXOV[1]RX(接收)FIFO(先進(jìn)先出緩存)溢出標(biāo)志保留[0]
3.發(fā)送控制寄存器(TCR)發(fā)送控制寄存器,可以控制發(fā)送使能。功
能位描
述保留[7]
TJDIS[6]Jabber傳輸使能。1使能Jabber傳輸定時器(2048字節(jié)),0禁止EXCECM[5]額外沖突模式控制。0當(dāng)額外的沖突計數(shù)多于15則終止本次數(shù)據(jù)包,1始終嘗試發(fā)送本次數(shù)據(jù)包PAD_DIS2[4]禁止為數(shù)據(jù)包指針2添加PADCRC_DIS2[3]禁止為數(shù)據(jù)包指針2添加CRC校驗PAD_DIS2[2]禁止為數(shù)據(jù)包指針1添加PADCRC_DIS2[1]禁止為數(shù)據(jù)包指針1添加CRC校驗TXREQ[0]TX(發(fā)送)請求。發(fā)送完成后自動清零該位4.數(shù)據(jù)包指針1的發(fā)送狀態(tài)寄存器1(TSR_I)數(shù)據(jù)包指針1的發(fā)送狀態(tài)寄存器1功能描述。功
能位描
述TJTO[7]Jabber傳輸超時。該位置位表示由于多于2048字節(jié)數(shù)據(jù)被傳輸而導(dǎo)致數(shù)據(jù)幀被截掉LC[6]載波信號丟失。該位置位表示在幀傳輸時發(fā)生紅載波信號丟失。在內(nèi)部回環(huán)模式下該位無效NC[5]無載波信號。該位置位表示在幀傳輸時無載波信號。在內(nèi)部回環(huán)模式下該位無效LC[4]沖突延遲。該位置位表示在64字節(jié)的沖突窗口后又發(fā)生沖突COL[3]數(shù)據(jù)包沖突。該位置位表示傳輸過程中發(fā)生沖突EC[2]額外沖突。該位置位表示由于發(fā)生了第16次沖突(即額外沖突)后,傳送被終止保留[1-0]
5.數(shù)據(jù)包指針2的發(fā)送狀態(tài)寄存器2(TSR_II)數(shù)據(jù)包指針2的發(fā)送狀態(tài)寄存器2功能描述。功
能位描
述TJTO[7]Jabber傳輸超時。該位置位表示由于多于2048字節(jié)數(shù)據(jù)被傳輸而導(dǎo)致數(shù)據(jù)幀被截掉LC[6]載波信號丟失。該位置位表示在幀傳輸時發(fā)生紅載波信號丟失。在內(nèi)部回環(huán)模式下該位無效NC[5]無載波信號。該位置位表示在幀傳輸時無載波信號。在內(nèi)部回環(huán)模式下該位無效LC[4]沖突延遲。該位置位表示在64字節(jié)的沖突窗口后又發(fā)生沖突COL[3]數(shù)據(jù)包沖突。該位置位表示傳輸過程中發(fā)生沖突EC[2]額外沖突。該位置位表示由于發(fā)生了第16次沖突(即額外沖突)后,傳送被終止保留[1-0]
6.接收控制寄存器(RCR)接收控制寄存器,可以控制接收使能。功
能位描
述保留[7]
WTDIS[6]看門狗定時器禁止。1禁止,0使能DIS_LONG[5]丟棄長數(shù)據(jù)包。1為丟棄數(shù)據(jù)包長度超過1522字節(jié)的數(shù)據(jù)包DIS_CRC[4]丟棄CRC校驗錯誤的數(shù)據(jù)包ALL[3]忽略所有多點傳送RUNT[2]忽略不完整的數(shù)據(jù)包PRMSC[1]混雜模式(PromiscuousMode)RXEN[0]接收使能7.接收狀態(tài)寄存器(RSR)功
能位描
述RF[7]不完整數(shù)據(jù)幀。該位置位表示接收到小于64字節(jié)的幀MF[6]多點傳送幀。該位置位表示接收到幀包含多點傳送地址LCS[5]沖突延遲。該位置位表示在幀接收過程中發(fā)生沖突延遲RWTO[4]接收看門狗定時溢出。該位置位表示接收到大于2048字節(jié)數(shù)據(jù)幀PLE[3]物理層錯誤。該位置位表示在幀接收過程中發(fā)生物理層錯誤AE[2]對齊錯誤(Alignment)。該位置位表示接收到的幀結(jié)尾處不是字節(jié)對齊,即不是以字節(jié)為邊界對齊CE[1]CRC校驗錯誤。該位置位表示接收到的幀CRC校驗錯誤FOE[0]接收FIFO緩存溢出。該位置位表示在幀接收時發(fā)生FIFO溢出8.接收/發(fā)送溢出控制寄存器(RTFCR)功
能位描
述TXP0[7]1發(fā)送暫停包。發(fā)送完成后自動清零,并設(shè)置TX暫停包時間為0000HTXPF[6]1發(fā)送暫停包。發(fā)送完成后自動清零,并設(shè)置TX暫停包時間為FFFFHTXPEN[5]強(qiáng)制發(fā)送暫停包使能。按溢出門限最高值使能發(fā)送暫停包BKPA[4]背壓模式。該模式僅在半雙工模式下有效。當(dāng)接收SRAM超過BPHW并且接收新數(shù)據(jù)包時,產(chǎn)生一個擁擠狀態(tài)BKPM[3]背壓模式。該模式僅在半雙工模式下有效。當(dāng)接收SRAM超過BPHW并數(shù)據(jù)包DA匹配時,產(chǎn)生一個擁擠狀態(tài)RXPS[2]接收暫停包狀態(tài)。只讀,清零時允許接收RXPCS[1]接收暫停包當(dāng)前狀態(tài)FLCE[0]溢出控制使能控。1設(shè)置使能溢出制模式9.傳送數(shù)據(jù)長度寄存器DM_TXPLL(0xFC):傳送數(shù)據(jù)長度低字節(jié)寄存器,在發(fā)送數(shù)據(jù)時,該寄存器存放發(fā)送的數(shù)據(jù)長度的低字節(jié)。DM_TXPLH(0xFD):傳送數(shù)據(jù)長度高字節(jié)寄存器,在發(fā)送數(shù)據(jù)時,該寄存器存放發(fā)送的數(shù)據(jù)長度的高字節(jié)。10.中斷狀態(tài)寄存器(ISR)功
能位描
述IOMODE[7-6]處理器模式。00為16位模式,01為32位模式,10為8位模式,00保留LNKCHG[5]連接狀態(tài)改變UDRUN[4]傳輸“Underrun”ROOS[3]接收溢出計數(shù)器溢出ROS[2]接收溢出PTS[1]數(shù)據(jù)包傳輸PRS[0]數(shù)據(jù)包接收11.中斷掩碼寄存器(IMR)功
能位描
述PAR[7]1使能指針自動跳回。當(dāng)SRAM的讀、寫指針超過SRAM的大小時,指針自動跳回起始位置。需要驅(qū)動程序設(shè)置該位,若設(shè)置則REG_F5(MDRAH)將自動為0CH保留[6]
LNKCHGI[5]1使能連接狀態(tài)改變中斷UDRUNI[4]1使能傳輸“Underrun”中斷ROOI[3]1使能接收溢出計數(shù)器溢出中斷ROI[2]1使能接收溢出中斷PTI[1]1使能數(shù)據(jù)包傳輸終端PRI[0]1使能數(shù)據(jù)包接收中斷9.4.4功能描述1.總線2.存儲器直接訪問控制3.包的發(fā)送1.總線總線是ISA總線兼容模式,8個I/O基址,分別是300H、310H、320H、330H、340H、350H、360H、370H。I/O基址與設(shè)定引腳或內(nèi)部EEPROM的共同選定。訪問芯片有兩個地址端口,分別是地址端口和數(shù)據(jù)端口。2.存儲器直接訪問控制DM9000提供DMA(直接存取技術(shù))來簡化對內(nèi)部存儲器的訪問。內(nèi)部存儲器空間大少16K字節(jié)。低3K字節(jié)單元用作發(fā)送包的緩沖區(qū),其他13K字節(jié)用作接收包的緩沖區(qū)。3.包的發(fā)送有兩個指針,順序命名為指針1和指針2,能同時存儲在發(fā)送包緩沖區(qū)。發(fā)送控制寄存器(02H)控制冗余校驗碼和填充的插入,其狀態(tài)分別記錄在發(fā)送狀態(tài)寄存器1(03H)和發(fā)送狀態(tài)寄存器2(04H)發(fā)送器的起始地址是0x00H,軟件或硬件復(fù)位后默認(rèn)是指針1,先通過DMA端口寫數(shù)據(jù)到發(fā)送包緩沖區(qū),然后寫字節(jié)計數(shù)長度到字節(jié)計數(shù)寄存器。9.5DM9000網(wǎng)卡驅(qū)動程序移植9.5.1DM9000網(wǎng)卡連接9.5.2驅(qū)動分析——硬件的數(shù)據(jù)結(jié)構(gòu)9.5.3驅(qū)動分析——數(shù)據(jù)讀寫函數(shù)9.5.4驅(qū)動分析——重置網(wǎng)卡9.5.5驅(qū)動分析——初始化網(wǎng)卡9.5.6驅(qū)動分析——打開和關(guān)閉網(wǎng)卡9.5.7驅(qū)動分析——數(shù)據(jù)包的發(fā)送與接收9.5.8DM9000網(wǎng)卡驅(qū)動程序移植9.5.1DM9000網(wǎng)卡連接由于必須告知內(nèi)核DM9000芯片所使用的硬件資源,所以移植的首要任務(wù)是分析DM9000芯片的硬件連接情況,以獲得訪問地址、中斷號等硬件資源。9.5.2驅(qū)動分析——硬件的數(shù)據(jù)結(jié)構(gòu)在內(nèi)核源碼中用board_info結(jié)構(gòu)體來描述具體的硬件,它保存了一些硬件資源,其定義在driver/net/dm9000.c中。9.5.3驅(qū)動分析——數(shù)據(jù)讀寫函數(shù)staticu8ior(board_info_t*
db,intreg){writeb(reg,db->io_addr);returnreadb(db->io_data);}staticvoidiow(board_info_t*
db,intreg,intvalue){writeb(reg,db->io_addr);writeb(value,db->io_data);}9.5.4驅(qū)動分析——重置網(wǎng)卡staticvoiddm9000_reset(board_info_t*
db){dev_dbg(db->dev,"resettingdevice\n");
//調(diào)試信息/*RESETdevice*/writeb(DM9000_NCR,db->io_addr);//寫入要操作的寄存器地址,這里是DM9000_NCRudelay(200);
//作一下延時writeb(NCR_RST,db->io_data);
//寫入置位值,這里是1u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 塑料注塑機(jī)的工藝參數(shù)智能優(yōu)化技術(shù)考核試卷
- 水利工程師工程水文及水利計算練習(xí)題庫含參考答案
- 化妝品與衛(wèi)生用品健康安全標(biāo)準(zhǔn)考核試卷
- 2025-2030年在線旅游預(yù)訂平臺企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年文具品牌設(shè)計企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年堅果香薰蠟燭店行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年在線圖書編輯工具企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 未來電影產(chǎn)業(yè)的國際合作與交流趨勢
- 生態(tài)農(nóng)業(yè)與綠色食品市場分析
- 電子商務(wù)平臺的國際競爭策略研究
- 大學(xué)生心理健康教育全套PPT完整教學(xué)課件
- 安慶匯辰藥業(yè)有限公司高端原料藥、醫(yī)藥中間體建設(shè)項目環(huán)境影響報告書
- 政治校本課程
- 川2020J146-TJ 建筑用輕質(zhì)隔墻條板構(gòu)造圖集
- (完整)讀歌詞猜歌名
- 八年級下開學(xué)第一課主題班會
- 初中英語人教版 八年級上冊 單詞默寫表 漢譯英
- pcs-9611d-x說明書國內(nèi)中文標(biāo)準(zhǔn)版
- GB/T 1634.1-2004塑料負(fù)荷變形溫度的測定第1部分:通用試驗方法
- 無人機(jī)航拍技術(shù)理論考核試題題庫及答案
- T∕CMATB 9002-2021 兒童肉類制品通用要求
評論
0/150
提交評論