freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm的linux網(wǎng)卡驅動程序的開發(fā)與設計(論文最終完成)(更新版)

2025-02-24 13:04上一頁面

下一頁面
  

【正文】 使用等多方面的問題,但這些都依附在圖52中所示的主模塊之上的。第5章 網(wǎng)卡驅動的具體實現(xiàn) 驅動程序的設計Linux網(wǎng)絡驅動程序的體系結構如下圖51所示,分為四層,從上到下分別為協(xié)議接口層、網(wǎng)絡設備接口層、設備驅動功能層、網(wǎng)絡設備以及網(wǎng)絡媒介層。MII支持10兆和100兆的操作,一個接口由14根線組成,它的支持還是比較靈活的,但是有一個缺點是因為它一個端口用的信號線太多,如果一個8端口的交換機要用到112根線,16端口就要用到224根線,到32端口的話就要用到448根線,一般按照這個接口做交換機,是不太現(xiàn)實的,所以現(xiàn)代的交換機的制作都會用到其它的一些從MII簡化出來的標準,比如RMII、SMII、MII等。通過管理接口,上層能監(jiān)視和控制PHY。 ,主要的原因是三星的sdmk開發(fā)板使用的這個內(nèi)核,相對來說這個內(nèi)核的驅動程序比較全。在此次開發(fā)中,XLR處理器作為DDOS系統(tǒng)的底層硬件,這為系統(tǒng)的高效性提供了切實可行的保障。模塊加載設計步驟如圖31:Insmod命令Init module()初始化Register_retdev()注冊Init指針初始化函數(shù)Rmmod命令關閉網(wǎng)卡設備數(shù)據(jù)包發(fā)送和接收打開網(wǎng)卡設備圖31 模塊加載步驟圖通過模塊加載命令insmod把網(wǎng)絡設備驅動程序插入到內(nèi)核之中,入口函數(shù)init_module()通過調(diào)用register_netdev0函數(shù)在Linux系統(tǒng)中注冊該網(wǎng)絡設備。int skb_headlen(struct sk_buff *skb);返回skb的第一個片的長度(該部分指向skbdata)。int skb_headroom(struct sk_buff *skb);。一個驅動應當使用一種dev_kfree_skb形式的函數(shù)。shinfo(struct sk_buff *skb);unsigned int shinfo(skb)nr_frags;skb_frag_t shinfo(skb)frags;處于對性能方面的考慮,skb中的一些信息分散存儲在內(nèi)中與其緊鄰的其他結構中。head 指向分配內(nèi)存的開頭,data是有效字節(jié)的開始(并且常常稍微比head大一些),tail是有效字節(jié)的結尾,end指向tail能夠到達的最大地址。在linux/中, 能看到該結構和函數(shù)原型。struct net_device_stats *(*get_stats)(struct net_device *dev);任何時候當一個應用程序需要獲取接口的統(tǒng)計信息,則調(diào)用這個方法。int (*hard_start_xmit) (struct sk_buff *skb, struct net_device *dev);該方法初始化數(shù)據(jù)包的傳輸。網(wǎng)絡接口的設備方法可分為兩個類型:基本的和可選的。ether_setup會對上述值進行正確地設置。這個值由ether_setup設置為100,但是可以改它。大部分設備都歸于這些類別中的一類。c).接口信息有關接口的大部分信息由ether_setup函數(shù)正確設置,或者任何其他對給定硬件類型適合的設置函數(shù)。當接口被列出時,ifconfig命令打印出devirq的值。rmem成員在驅動之外從不被引用。int (*init)(struct net_device *dev);初始化函數(shù)。 它也是我們了解一個網(wǎng)卡設備的最好入口點。時鐘:在實現(xiàn)驅動程序時,很多地方會用到時鐘。一塊網(wǎng)卡所做的工作無非就是數(shù)據(jù)的發(fā)送和接收,所以在驅動程序中必須要告訴系統(tǒng)數(shù)據(jù)的發(fā)送函數(shù)在哪里,系統(tǒng)在有數(shù)據(jù)要發(fā)送時就會調(diào)用發(fā)送程序。由于不是面向流的設備,因此將網(wǎng)絡接口映射到文件系統(tǒng)中的節(jié)點(比如/dev/tty1)比較困難。塊設備上能夠容納文件系統(tǒng)。work用戶的活動通過一套標準化的調(diào)用來執(zhí)行,而這些調(diào)用獨立于特定的驅動程序。虛擬文件系統(tǒng)不僅為多種邏輯文件系統(tǒng)(如ext2,fat等)提供了統(tǒng)一的接口,而且為各種硬件設備(作為一種特殊文件)也提供了統(tǒng)一接口。對于用戶進程,Linux采用簡單的動態(tài)優(yōu)先級調(diào)度方式;對于內(nèi)核中的例程(如設備驅動程序、中斷服務程序等)則采用了一種獨特的機制—軟中斷機制,這種機制保證了內(nèi)核例程的高效運行。它不僅繼承了Unix的特征,而且在許多方面超過了Unix。用戶空間之下是內(nèi)核空間,Linux 內(nèi)核正是位于這里。在本章節(jié)中,從介紹Linux的誕生開始,由淺入深的進入到Linux內(nèi)核,最后過渡到對網(wǎng)絡設備驅動的介紹。 本文主要工作首先,論文將重點研究device數(shù)據(jù)結構,這是了解網(wǎng)卡設備的最好入口點。如3COM、ACCTON、AT&T、IBM、CRYSTAL、D-LINK等眾多品牌的以太網(wǎng)卡只要安裝配置正確,都可以得到你所期望的效果。他們將Linux與其現(xiàn)有的GNU應用軟件很好地結合起來,使Linux擁有了圖形用戶界面。因此,在嵌入式Linux系統(tǒng)開發(fā)應用時,需要開發(fā)自己專用的網(wǎng)絡接口卡,這時不僅要在硬件上保證與Linux的兼容性,而且在軟件上需要開發(fā)全新的驅動程序。 module。其次介紹了ARM驅動程序開發(fā)的硬件環(huán)境和軟件環(huán)境。從而使得掌握在Linux環(huán)境下的開發(fā)技術,成為了計算機行業(yè)中引人注目的焦點。通過組建在Linux操作系統(tǒng)下的TCP/IP網(wǎng)絡,來分配IP地址以及區(qū)分網(wǎng)絡號和主機號的子網(wǎng)掩碼,通過配置DHCP服務器,實現(xiàn)動態(tài)地為主機配置IP參數(shù),解決手工配置存在的問題。 registerIII 目 錄摘 要 IAbstract II第1章 緒論 1 研究背景 1 國內(nèi)外研究現(xiàn)狀、目的及意義 1 本文主要工作 2第2章 Linux下設備驅動程序設計的基本知識 4 Linux概述 4 Linux內(nèi)核簡介 4 Linux的特性 6 Linux設備驅動程序概述 7 Linux設備驅動程序分類 8 編寫網(wǎng)絡驅動程序的一些基本概念 9第3章 Linux網(wǎng)卡驅動程序設計的理論探討 10 Linux下網(wǎng)卡驅動程序設計的數(shù)據(jù)結構和基本方法 10 網(wǎng)卡驅動程序設計要用到的數(shù)據(jù)結構 10 網(wǎng)卡驅動程序的基本方法 13 套接字緩沖區(qū)介紹 14 驅動模塊的加載和卸載 17第4章 系統(tǒng)分析 19 S3C2410 ARM 開發(fā)板介紹 19 需求分析以及MII接口 19 寄存器的訪問方式 21第5章 網(wǎng)卡驅動的具體實現(xiàn) 22 驅動程序的設計 22 網(wǎng)卡驅動實現(xiàn) 24 模塊的加載及設備初始化 24 設備成員及函數(shù)的初始化 26 設備注冊、打開、關閉 30 數(shù)據(jù)的接受和發(fā)送 32 參數(shù)設置及數(shù)據(jù)統(tǒng)計 34 網(wǎng)卡數(shù)據(jù)信息統(tǒng)計 36第6章 結論 37參 考 文 獻 38致 謝 3939沈陽工業(yè)大學本科生畢業(yè)設計第1章 緒論 研究背景Linux目前是計算機技術的一大熱點,最近幾年在我國得到迅猛發(fā)展,被廣泛應用在嵌入式系統(tǒng)、服務器和桌面應用等領域。當時 Linus 手邊有個 Minix 系統(tǒng)(UNIX 的一個分支),他對這個操作系統(tǒng)相當有興趣,由于當時他正好有一臺個人計算機,他想把這個系統(tǒng)移植到該計算機(x86 架構)上來使用。在Linux所包含的數(shù)千個文件中,有一個名為Credits的文件,里面列出了100多名對Linux有過重要貢獻的黑客,包括他們的名字、地址以及所做的工作。網(wǎng)卡的驅動程序就是數(shù)據(jù)鏈路層與物理層的接口。在Linux中,把所有的網(wǎng)絡設備都抽象為一個接口,這個接口提供了對所有網(wǎng)絡設備的操作集合,由struct device數(shù)據(jù)結構來表示,即網(wǎng)絡設備接口,所有的網(wǎng)絡設備接口構成一個鏈表,該鏈表由dev_base為頭指針,鏈表中的元素代表一個網(wǎng)絡設備接口。經(jīng)過十多年的發(fā)展,到2003年,Linux ,這在Linux發(fā)展史中具有極其重要的作用。實際上,體系結構可能并不像圖1所示的一樣清晰。從信息隱藏的觀點看,它沒有任何程度的隱藏,每個過程都對其它過程都是可見的。Linux中有許多標準的內(nèi)核線程,其中有一些周期地運行來完成特定的任務(如swapd),而其余一些則連續(xù)地運行,等待處理某些特定的事件(如inetd和lpd)。增加系統(tǒng)調(diào)用以滿足開發(fā)者的特殊需求。這種模塊化的的特點使得Linux驅動程序的編寫非常的簡單,因此內(nèi)核驅動程序的數(shù)目也增長及其迅速,目前已經(jīng)有成百上千的驅動程序可以在linux下被使用。字符設備可以通過文件系統(tǒng)節(jié)點來訪問,比如/dev/tty1和/dev/loop0等。網(wǎng)絡接口:任何網(wǎng)絡事件都是通過一個網(wǎng)絡接口形成的,一個網(wǎng)絡接口就是一個能夠和其他主機交換數(shù)據(jù)的設備。 編寫網(wǎng)絡驅動程序的一些基本概念無論是什么操作系統(tǒng)的驅動程序,都有一些通用的概念。中斷:中斷在現(xiàn)代計算機結構中占有重要的地位。第3章 Linux網(wǎng)卡驅動程序設計的理論探討網(wǎng)絡接口是第三類標準Linux設備,網(wǎng)絡設備使用特定的內(nèi)核數(shù)據(jù)結構注冊自身,以備與外界進行數(shù)據(jù)交換時調(diào)用。unsigned long state;設備狀態(tài)。(2).硬件信息下面的成員包含了相對簡單設備的低層硬件信息。這個成員由驅動在設備探測時賦值。例如,如果這個設備同時支持同軸電纜(IF_PORT_10BASE2)和雙絞線(IF_PORT_100BSAET)以太網(wǎng)連接,就可以使用該變量。deviers/net/ 輸出了一些類似的函數(shù),包括下列:void ltalk_setup(struct net_device *dev);設置一個 LocalTalk 設備的函數(shù)。對于以太網(wǎng)接口hard_header_len的值是14(ETH_HLEN)。這個type成員由ARP用來決定接口支持什么樣的硬件地址。某些標志由內(nèi)核管理,而其他一些則由接口在初始化期間設置,用來聲明接口的各種能力及其他特性。在ifconfig[8,9]激活接口時,接口將被打開。該函數(shù)的任務是將作為參數(shù)傳入的信息組織成一個合適的特定于設備的硬件頭。設備的 I/O 地址和中斷號可以通過運行set_config來改變。union { /*… */ } h;union { /* …*/ } nh;union { /*…*/} mac;指向報文中包含的各級的頭的指針。unsigned char ip_summed;對報文的校驗策略。struct sk_buff *alloc_skb(unsigned int len, int priority);struct sk_buff *dev_alloc_skb(unsigned int len);分配一個緩存區(qū)。unsigned char *skb_push(struct sk_buff *skb, int len);unsigned char *__skb_push(struct sk_buff *skb, int len);遞減skbdata和遞增skblen的函數(shù)。這個函數(shù)可用來在填充數(shù)據(jù)前保留報文頭部空間(headroom)。 驅動模塊的加載和卸載在構造好驅動模塊之后,需要將其裝入到內(nèi)核,或者在裝入到內(nèi)后以后在某個時刻又需要將其卸載。在需要卸載模塊時,先關閉設備,再通過執(zhí)行模塊卸載命令rmmod來調(diào)用驅動cleanup_moduIe()函數(shù)卸載該模塊。經(jīng)過篩選和對比最終選擇了三星2410 ARM開發(fā)板,接下來將介紹三星2410 ARM開發(fā)板。它包括一個數(shù)據(jù)接口,以及一個MAC和PHY之間的管理接口。在不對MAC硬件重新設計或替換的情況下,任何類型的PHY設備都可以正常工作。因為擴展的寄存器中,有很多寄存器都是影子寄存器,如24號寄存器(輔助控制寄存器)。在設備驅動功能層實現(xiàn)設備的驅動程序,負責處理數(shù)據(jù)的接收和發(fā)送,主要的任務是將要發(fā)送的數(shù)據(jù)傳遞給物理媒介,將接收的數(shù)據(jù)傳遞給上層網(wǎng)絡協(xié)議接口。驅動模塊的加載由內(nèi)核定義的特殊宏module_init()來實現(xiàn),module_init()的參數(shù)為rmi_phnx_mac_init_module。例如,鏈路狀態(tài)、物理地址、以及端口速率和雙工通信能力等信息。通過分析alloc_etherdev()函數(shù)我們知道,alloc_etherdev()函數(shù)其實沒有做什么事,只是簡單的調(diào)用了alloc_netdev()函數(shù)。在大多數(shù)情況來講,一個驅動程序只需要為它自己設備的中斷注冊一個中斷處理例程,并且在中斷到達時進行正確的處理。設備結構體值的初始化主要是針對了以太網(wǎng)特征,包括了設備類型、頭部長度、最大傳輸單元、物理地址長度、傳輸隊列容量以及接口標志。設備要完成數(shù)據(jù)的接收和發(fā)送,僅僅依靠以太網(wǎng)默認的回調(diào)函數(shù)還不能完成的,驅動程序還必須要有自己的回調(diào)函數(shù),以此充分利用設備性能,提高設備工作的效率。devchange_mtu = rmi_phnx_mac_change_mtu。privlock)。在程序中,在自旋鎖狀態(tài)下執(zhí)行的代碼都非常的簡短,一般都只有幾行,這樣就是為了減少擁有自旋鎖的時間,提高整個系統(tǒng)的性能。 int type。驅動程序的私有數(shù)據(jù)結構中,有一個比較陌生的成員privspill_configured,這個字段在大多數(shù)的網(wǎng)絡設備驅動程序中不能看到的。但是在接口能傳遞數(shù)據(jù)包之前,內(nèi)核必須打開接口并賦予接口地址,在接口改變地址、I/O地址、irq等時必須先關閉設備。但在什么時候去檢測鏈路的這些變化,就需要一個定時器來確定。內(nèi)核定時器初始化,并且添加到內(nèi)核的一個合適的定時器鏈表中,內(nèi)核就會在定時器時間到達時調(diào)用定時器的回調(diào)函數(shù),在驅動程序中,定時器執(zhí)行的回調(diào)函數(shù)是rmi_phnx_mac_timer。如果沒有解除自旋鎖,系統(tǒng)將出現(xiàn)”panic”甚至崩潰。設備關閉后不應該再有數(shù)據(jù)傳輸?shù)墓δ?,所以關閉設備時還要停止端口的傳輸隊列,這一操作調(diào)用的是netif_start_queue(dev)的逆操作函數(shù)netif_stop_queue(dev)來實現(xiàn)的,通過它來標記設備不能傳輸數(shù)
點擊復制文檔內(nèi)容
黨政相關相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1