Linux網(wǎng)絡(luò )驅動(dòng)程序編寫(xiě)(一)
本文可隨意轉載,但請不要在盈利性出版物上刊登。
一.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í)重傳等。
評論