版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第7章嵌入式Linux的設備驅動Linux系統(tǒng)驅動程序開發(fā)簡介常用的系統(tǒng)支持
Linux系統(tǒng)網(wǎng)絡設備驅動程序
編寫Linux網(wǎng)絡驅動程序中需要注意的問題
第7章嵌入式Linux的設備驅動Linux系統(tǒng)驅動程序7.1Linux系統(tǒng)驅動程序開發(fā)簡介Linux中設備被抽象出來,所有設備都看成文件如:系統(tǒng)中第一個IDE硬盤被表示成/dev/hda
設備的讀寫和普通文件一樣設備驅動程序主要完成這些功能:探測設備和初始化設備從設備接收數(shù)據(jù)并提交給內核從內核接收數(shù)據(jù)送到設備檢測和處理設備錯誤7.1Linux系統(tǒng)驅動程序開發(fā)簡介Linux中設備被抽象Linux設備驅動程序分類Linux系統(tǒng)的設備分為字符設備(chardevice),塊設備(blockdevice)和網(wǎng)絡設備(networkdevice)三種字符設備是指存取時沒有緩存的設備。如:系統(tǒng)的串口設備/dev/cua0和/dev/cua1塊設備的讀寫都有緩存來支持,并且塊設備必須能夠隨機存取(randomaccess),且不管塊位于設備中何處都可以對其進行讀寫。塊設備可以通過其設備相關文件進行訪問,但更為平常的訪問方法是通過文件系統(tǒng)。只有塊設備才能支持可安裝文件系統(tǒng)。如硬盤用mknod命令創(chuàng)建的塊設備特殊文件與字符設備特殊文件
網(wǎng)絡設備在Linux里做專門的處理,可以通過BSD套接口訪問。Linux設備驅動程序分類Linux系統(tǒng)的設備分為字符設備1、核心代碼
設備驅動是核心的一部分,象核心中其它代碼一樣,出錯將導致系統(tǒng)的嚴重損傷。一個編寫奇差的設備驅動甚至能使系統(tǒng)崩潰并導致文件系統(tǒng)的破壞和數(shù)據(jù)丟失。
2、核心接口
設備驅動必須為Linux核心或者其從屬子系統(tǒng)提供一個標準接口。例如終端驅動為Linux核心提供了一個文件I/O接口而SCSI設備驅動為SCSI子系統(tǒng)提供了一個SCSI設備接口,同時此子系統(tǒng)為核心提供了文件I/O和buffercache接口。
Linux核心中的設備驅動具有的共性:1、核心代碼Linux核心中的設備驅動具有的共性:3、核心機制與服務
設備驅動可以使用標準的核心服務如內存分配、中斷發(fā)送和等待隊列等等。
4、動態(tài)可加載
多數(shù)Linux設備驅動可以在核心模塊發(fā)出加載請求時加載,同時在不再使用時卸載。這樣核心能有效地利用系統(tǒng)資源。
5、可配置
Linux設備驅動可以連接到核心中。6、動態(tài)性
當系統(tǒng)啟動及設備驅動初始化時將查找它所控制的硬件設備。如果某個設備的驅動為一個空過程并不會有什么問題。此時此設備驅動僅僅是一個冗余的程序,它除了會占用少量系統(tǒng)內存外不會對系統(tǒng)造成什么危害。3、核心機制與服務驅動程序的幾個概念1、輪詢與中斷輪詢方式意味著需要經(jīng)常讀取設備的狀態(tài),一直到設備狀態(tài)表明請求已經(jīng)完成為止。如果設備驅動被連接進入核心,這時使用輪詢方式將會帶來災難性后果:核心將在此過程中無所事事,直到設備完成此請求。但是輪詢設備驅動可以通過使用系統(tǒng)定時器,使核心周期性調用設備驅動中的某個例程來檢查設備狀態(tài)。定時器過程可以檢查命令狀態(tài)及Linux軟盤驅動的工作情況。使用定時器是輪詢方式中最好的一種,但更有效的方法是使用中斷。驅動程序的幾個概念1、輪詢與中斷輪詢方式意味著需要經(jīng)常讀取設基于中斷的設備驅動會在它所控制的硬件設備需要服務時引發(fā)一個硬件中斷。如以太網(wǎng)設備驅動從網(wǎng)絡上接收到一個以太數(shù)據(jù)報時都將引起中斷。Linux核心需要將來自硬件設備的中斷傳遞到相應的設備驅動。這個過程由設備驅動向核心注冊其使用的中斷來協(xié)助完成。此中斷處理例程的地址和中斷號都將被記錄下來。在/proc/interrupts文件中你可以看到設備驅動所對應的中斷號及類型:0:727432timer1:20534keyboard2:0cascade3:79691+serial4:28258+serial5:1soundblaster11:20868+aic7xxx13:1matherror14:247+ide015:170+ide1基于中斷的設備驅動會在它所控制的硬件設備需要服務時引發(fā)一個硬2、直接內存訪問(DMA)DMA控制器可以在不受處理器干預的情況下在設備和系統(tǒng)內存之間高速傳輸數(shù)據(jù)。設備驅動使用DMA時必須十分小心。首先DMA控制器沒有任何虛擬內存的概念,它只存取系統(tǒng)中的物理內存。同時用作DMA傳輸緩沖的內存空間必須是連續(xù)物理內存塊。這意味著不能在進程虛擬地址空間內直接使用DMA。但是你可以將進程的物理頁面加鎖以防止在DMA操作過程中被交換到交換設備上去。另外DMA控制器所存取物理內存有限。DMA通道地址寄存器代表DMA地址的高16位而頁面寄存器記錄的是其余8位。所以DMA請求被限制到內存最低16M字節(jié)中。2、直接內存訪問(DMA)DMA控制器可以在不受處理器干Linux通過dma_chan(每個DMA通道一個)數(shù)組來跟蹤DMA通道的使用情況。dma_chan結構中包含有兩個域,一個是指向此DMA通道擁有者的指針,另一個指示DMA通道是否已經(jīng)被分配出去。當敲入cat/proc/dma打印出來的結果就是dma_chan結構數(shù)組。Linux通過dma_chan(每個DMA通道一個)數(shù)組來3、
內存設備驅動必須謹慎使用內存。由于它屬于核心,所以不能使用虛擬內存。Linux為設備驅動提供了一組核心內存分配與回收過程。核心內存以2的次冪大小的塊來分配。如512或128字節(jié),此時即使設備驅動的需求小于這個數(shù)量也會分配這么多。所以設備驅動的內存分配請求可得到以塊大小為邊界的內存。這樣核心進行空閑塊組合更加容易。請求分配核心內存時Linux需要完成許多額外的工作。如果系統(tǒng)中空閑內存數(shù)量較少,則可能需要丟棄些物理頁面或將其寫入交換設備。一般情況下Linux將掛起請求者并將此進程放置到等待隊列中直到系統(tǒng)中有足夠的物理內存為止。3、
內存設備驅動必須謹慎使用內存。由于它屬于核心,所以4、設備驅動與核心的接口
Linux核心與設備驅動之間必須有一個以標準方式進行互操作的接口。每一類設備驅動:字符設備、塊設備及網(wǎng)絡設備都提供了通用接口以便在需要時為核心提供服務。這種通用接口使得核心可以以相同的方式來對待不同的設備及設備驅動。如SCSI和IDE硬盤的區(qū)別很大但Linux對它們使用相同的接口。Linux動態(tài)性很強。每次Linux核心啟動時如遇到不同的物理設備將需要不同的物理設備驅動。4、設備驅動與核心的接口Linux核心與設備驅動之間必須4.1
字符設備字符設備是Linux設備中最簡單的一種字符設備初始化時,它的設備驅動通過在device_struct結構的chrdevs數(shù)組中添加一個入口來將其注冊到Linux核心上。設備的主設備標志符用來對此數(shù)組進行索引(如對tty設備的索引4)
4.1
字符設備字符設備是Linux設備中最簡單的一種4.2塊設備塊設備也支持以文件方式訪問。Linux在blkdevs數(shù)組中維護所有已注冊的塊設備。象chrdevs數(shù)組一樣,blkdevs也使用設備的主設備號進行索引。其入口也是device_struct結構。和字符設備不同的是系統(tǒng)有幾類塊設備。SCSI設備是一類而IDE設備則是另外一類。和普通文件操作接口一樣,每個塊設備驅動必須為buffercache提供接口。每個塊設備驅動將填充其在blk_dev數(shù)組中的blk_dev_struct結構入口。數(shù)組的索引值還是此設備的主設備號。4.2塊設備塊設備也支持以文件方式訪問。Linux在bbuffercache塊設備請求上圖表示每個請求有指向一個或多個buffer_hear結構的指針,每個請求讀寫一塊數(shù)據(jù)。一旦設備驅動完成了請求則它必須將每個buffer_heard結構從request結構中清除。buffercache塊設備請求上圖表示每個請求有指向一4.3網(wǎng)絡設備網(wǎng)絡設備,即Linux的網(wǎng)絡子系統(tǒng),是一個發(fā)送與接收數(shù)據(jù)包的實體。它一般是一個象以太網(wǎng)卡的物理設備。每個網(wǎng)絡設備都用一個device結構來表示,所有傳輸與接收到的網(wǎng)絡數(shù)據(jù)用一個sk_buff結構來表示。這些數(shù)據(jù)結構使得網(wǎng)絡協(xié)議頭可以更容易的添加與刪除。4.3網(wǎng)絡設備網(wǎng)絡設備,即Linux的網(wǎng)絡子系統(tǒng),是一網(wǎng)絡設備特殊文件僅在于系統(tǒng)網(wǎng)絡設備發(fā)現(xiàn)與初始化時建立。它們使用標準的命名方法,每個名字代表一種類型的設備。多個相同類型設備將從0開始記數(shù)。這樣以太網(wǎng)設備被命名為/dev/eth0,/dev/eth1,/dev/eth2等等。一些常見的網(wǎng)絡設備如下:/dev/ethN以太網(wǎng)設備/dev/slNSLIP設備/dev/pppNPPP設備/dev/loLoopback設備網(wǎng)絡設備特殊文件僅在于系統(tǒng)網(wǎng)絡設備發(fā)現(xiàn)與初始化時建立。它編寫驅動程序的一些基本概念讀寫幾乎所有設備都有輸入和輸出。每個驅動程序要負責本設備的讀寫操作。操作系統(tǒng)的其他不需要知道對設備的具體讀寫操作怎樣進行,這些都由驅動程序屏蔽掉了。操作系統(tǒng)定義好一些讀寫接口,由驅動程序完成具體的功能。在驅動程序初始化時,需要把具有這種接口的讀寫函數(shù)注冊進操作系統(tǒng)。編寫驅動程序的一些基本概念讀寫中斷中斷在現(xiàn)代計算機結構中有重要的地位。操作系統(tǒng)必須提供驅動程序響應中斷的能力。一般是把一個中斷處理程序注冊到系統(tǒng)中去。操作系統(tǒng)在硬件中斷發(fā)生后調用驅動程序的處理程序。Linux支持中斷的共享,即多個設備共享一個中斷。PCA課件第七章嵌入式設備驅動時鐘在實現(xiàn)驅動程序時,很多地方會用到時鐘。如某些協(xié)議里的超時處理,沒有中斷機制的硬件的輪詢等。操作系統(tǒng)應為驅動程序提供定時機制。一般是在預定的時間過了以后回調注冊的時鐘函數(shù)。時鐘常用的系統(tǒng)支持
內存申請和釋放中斷時鐘I/O中斷打開關閉打印信息注冊驅動程序常用的系統(tǒng)支持內存申請和釋放內存申請和釋放include/linux/kernel.h里聲明了kmalloc()和kfree()。用于在內核模式下申請和釋放內存。與用戶模式下的malloc()不同,kmalloc()申請空間有大小限制。長度是2的整次方。可以申請的最大長度也有限制。另外kmalloc()有priority參數(shù)Kfree()釋放的內存必須是kmalloc()申請的內存申請和釋放include/linux/kernel.h申請中斷和釋放中斷request_irq()、free_irq()是驅動程序申請中斷和釋放中斷的調用。在include/linux/sched.h里聲明申請中斷和釋放中斷request_irq()、free_i時鐘時鐘的處理類似中斷,也是登記一個時間處理函數(shù),在預定的時間過后,系統(tǒng)會調用這個函數(shù)。在include/linux/timer.h里聲明使用時鐘,先聲明一個timer_list結構,調用init_timer對它進行初始化。Time_list結構里expires是標明這個時鐘的周期,單位采用jiffies的單位。jiffy指連續(xù)微處理器時鐘周期間的時間長度時鐘時鐘的處理類似中斷,也是登記一個時間處理函數(shù),在預定的I/OI/O端口的存取使用:inlineunsignedintinb(unsignedshortport);inlineunsignedintinb_p(unsignedshortport);inlinevoidoutb(charvalue,unsignedshortport);inlinevoidoutb_p(charvalue,unsignedshortport);在include/adm/io.h里定義I/OI/O端口的存取使用:中斷打開關閉系統(tǒng)提供給驅動程序開放和關閉響應中斷的能力是在include/asm/system.h#definecli()__asm____volatile__("cli"::)#definesti()__asm____volatile__("sti"::)中斷打開關閉系統(tǒng)提供給驅動程序開放和關閉響應中斷的能力打印信息驅動程序要輸出信息使用printk()include/linux/kernel.h里聲明打印信息驅動程序要輸出信息使用printk()注冊驅動程序如果使用模塊(module)方式加載驅動程序,需要在模塊初始化時把設備注冊到系統(tǒng)設備表里去,不再使用時,把設備從系統(tǒng)中卸除定義在drivers/net/net_init.h里的兩個函數(shù)完成這個工作Intregister_netdev(structdevice*dev);voidunregister_netdev(structdevice*dev);注冊驅動程序如果使用模塊(module)方式加載驅動程序,網(wǎng)絡驅動程序的結構所有的Linux網(wǎng)絡驅動程序遵循通用的接口設計時采用的是面向對象的方法一個設備就是一個對象(device結構),它內部有自己的數(shù)據(jù)和方法一個網(wǎng)絡設備最基本的方法有初始化、發(fā)送和接收網(wǎng)絡驅動程序的結構所有的Linux網(wǎng)絡驅動程序遵循通用的接網(wǎng)絡驅動程序的基本方法初始化(initialize)打開(open)關閉(stop)發(fā)送(hard_start_xmit)接收(reception)硬件幀頭(hard_header)地址解析(xarp)參數(shù)設置和統(tǒng)計數(shù)據(jù)網(wǎng)絡驅動程序的基本方法初始化(initialize)網(wǎng)絡驅動程序中用到的數(shù)據(jù)結構最重要的是網(wǎng)絡設備的數(shù)據(jù)結構。定義在include/linux/netdevice.hsk_buffLinux網(wǎng)絡各層之間的數(shù)據(jù)傳送都是通過sk_buff網(wǎng)絡驅動程序中用到的數(shù)據(jù)結構最重要的是網(wǎng)絡設備的數(shù)據(jù)結構。編寫Linux網(wǎng)絡驅動程序中需要注意的問題
中斷共享硬件發(fā)送忙時的處理流量控制(flowcontrol)調試編寫Linux網(wǎng)絡驅動程序中需要注意的問題中斷共享第7章嵌入式Linux的設備驅動Linux系統(tǒng)驅動程序開發(fā)簡介常用的系統(tǒng)支持
Linux系統(tǒng)網(wǎng)絡設備驅動程序
編寫Linux網(wǎng)絡驅動程序中需要注意的問題
第7章嵌入式Linux的設備驅動Linux系統(tǒng)驅動程序7.1Linux系統(tǒng)驅動程序開發(fā)簡介Linux中設備被抽象出來,所有設備都看成文件如:系統(tǒng)中第一個IDE硬盤被表示成/dev/hda
設備的讀寫和普通文件一樣設備驅動程序主要完成這些功能:探測設備和初始化設備從設備接收數(shù)據(jù)并提交給內核從內核接收數(shù)據(jù)送到設備檢測和處理設備錯誤7.1Linux系統(tǒng)驅動程序開發(fā)簡介Linux中設備被抽象Linux設備驅動程序分類Linux系統(tǒng)的設備分為字符設備(chardevice),塊設備(blockdevice)和網(wǎng)絡設備(networkdevice)三種字符設備是指存取時沒有緩存的設備。如:系統(tǒng)的串口設備/dev/cua0和/dev/cua1塊設備的讀寫都有緩存來支持,并且塊設備必須能夠隨機存取(randomaccess),且不管塊位于設備中何處都可以對其進行讀寫。塊設備可以通過其設備相關文件進行訪問,但更為平常的訪問方法是通過文件系統(tǒng)。只有塊設備才能支持可安裝文件系統(tǒng)。如硬盤用mknod命令創(chuàng)建的塊設備特殊文件與字符設備特殊文件
網(wǎng)絡設備在Linux里做專門的處理,可以通過BSD套接口訪問。Linux設備驅動程序分類Linux系統(tǒng)的設備分為字符設備1、核心代碼
設備驅動是核心的一部分,象核心中其它代碼一樣,出錯將導致系統(tǒng)的嚴重損傷。一個編寫奇差的設備驅動甚至能使系統(tǒng)崩潰并導致文件系統(tǒng)的破壞和數(shù)據(jù)丟失。
2、核心接口
設備驅動必須為Linux核心或者其從屬子系統(tǒng)提供一個標準接口。例如終端驅動為Linux核心提供了一個文件I/O接口而SCSI設備驅動為SCSI子系統(tǒng)提供了一個SCSI設備接口,同時此子系統(tǒng)為核心提供了文件I/O和buffercache接口。
Linux核心中的設備驅動具有的共性:1、核心代碼Linux核心中的設備驅動具有的共性:3、核心機制與服務
設備驅動可以使用標準的核心服務如內存分配、中斷發(fā)送和等待隊列等等。
4、動態(tài)可加載
多數(shù)Linux設備驅動可以在核心模塊發(fā)出加載請求時加載,同時在不再使用時卸載。這樣核心能有效地利用系統(tǒng)資源。
5、可配置
Linux設備驅動可以連接到核心中。6、動態(tài)性
當系統(tǒng)啟動及設備驅動初始化時將查找它所控制的硬件設備。如果某個設備的驅動為一個空過程并不會有什么問題。此時此設備驅動僅僅是一個冗余的程序,它除了會占用少量系統(tǒng)內存外不會對系統(tǒng)造成什么危害。3、核心機制與服務驅動程序的幾個概念1、輪詢與中斷輪詢方式意味著需要經(jīng)常讀取設備的狀態(tài),一直到設備狀態(tài)表明請求已經(jīng)完成為止。如果設備驅動被連接進入核心,這時使用輪詢方式將會帶來災難性后果:核心將在此過程中無所事事,直到設備完成此請求。但是輪詢設備驅動可以通過使用系統(tǒng)定時器,使核心周期性調用設備驅動中的某個例程來檢查設備狀態(tài)。定時器過程可以檢查命令狀態(tài)及Linux軟盤驅動的工作情況。使用定時器是輪詢方式中最好的一種,但更有效的方法是使用中斷。驅動程序的幾個概念1、輪詢與中斷輪詢方式意味著需要經(jīng)常讀取設基于中斷的設備驅動會在它所控制的硬件設備需要服務時引發(fā)一個硬件中斷。如以太網(wǎng)設備驅動從網(wǎng)絡上接收到一個以太數(shù)據(jù)報時都將引起中斷。Linux核心需要將來自硬件設備的中斷傳遞到相應的設備驅動。這個過程由設備驅動向核心注冊其使用的中斷來協(xié)助完成。此中斷處理例程的地址和中斷號都將被記錄下來。在/proc/interrupts文件中你可以看到設備驅動所對應的中斷號及類型:0:727432timer1:20534keyboard2:0cascade3:79691+serial4:28258+serial5:1soundblaster11:20868+aic7xxx13:1matherror14:247+ide015:170+ide1基于中斷的設備驅動會在它所控制的硬件設備需要服務時引發(fā)一個硬2、直接內存訪問(DMA)DMA控制器可以在不受處理器干預的情況下在設備和系統(tǒng)內存之間高速傳輸數(shù)據(jù)。設備驅動使用DMA時必須十分小心。首先DMA控制器沒有任何虛擬內存的概念,它只存取系統(tǒng)中的物理內存。同時用作DMA傳輸緩沖的內存空間必須是連續(xù)物理內存塊。這意味著不能在進程虛擬地址空間內直接使用DMA。但是你可以將進程的物理頁面加鎖以防止在DMA操作過程中被交換到交換設備上去。另外DMA控制器所存取物理內存有限。DMA通道地址寄存器代表DMA地址的高16位而頁面寄存器記錄的是其余8位。所以DMA請求被限制到內存最低16M字節(jié)中。2、直接內存訪問(DMA)DMA控制器可以在不受處理器干Linux通過dma_chan(每個DMA通道一個)數(shù)組來跟蹤DMA通道的使用情況。dma_chan結構中包含有兩個域,一個是指向此DMA通道擁有者的指針,另一個指示DMA通道是否已經(jīng)被分配出去。當敲入cat/proc/dma打印出來的結果就是dma_chan結構數(shù)組。Linux通過dma_chan(每個DMA通道一個)數(shù)組來3、
內存設備驅動必須謹慎使用內存。由于它屬于核心,所以不能使用虛擬內存。Linux為設備驅動提供了一組核心內存分配與回收過程。核心內存以2的次冪大小的塊來分配。如512或128字節(jié),此時即使設備驅動的需求小于這個數(shù)量也會分配這么多。所以設備驅動的內存分配請求可得到以塊大小為邊界的內存。這樣核心進行空閑塊組合更加容易。請求分配核心內存時Linux需要完成許多額外的工作。如果系統(tǒng)中空閑內存數(shù)量較少,則可能需要丟棄些物理頁面或將其寫入交換設備。一般情況下Linux將掛起請求者并將此進程放置到等待隊列中直到系統(tǒng)中有足夠的物理內存為止。3、
內存設備驅動必須謹慎使用內存。由于它屬于核心,所以4、設備驅動與核心的接口
Linux核心與設備驅動之間必須有一個以標準方式進行互操作的接口。每一類設備驅動:字符設備、塊設備及網(wǎng)絡設備都提供了通用接口以便在需要時為核心提供服務。這種通用接口使得核心可以以相同的方式來對待不同的設備及設備驅動。如SCSI和IDE硬盤的區(qū)別很大但Linux對它們使用相同的接口。Linux動態(tài)性很強。每次Linux核心啟動時如遇到不同的物理設備將需要不同的物理設備驅動。4、設備驅動與核心的接口Linux核心與設備驅動之間必須4.1
字符設備字符設備是Linux設備中最簡單的一種字符設備初始化時,它的設備驅動通過在device_struct結構的chrdevs數(shù)組中添加一個入口來將其注冊到Linux核心上。設備的主設備標志符用來對此數(shù)組進行索引(如對tty設備的索引4)
4.1
字符設備字符設備是Linux設備中最簡單的一種4.2塊設備塊設備也支持以文件方式訪問。Linux在blkdevs數(shù)組中維護所有已注冊的塊設備。象chrdevs數(shù)組一樣,blkdevs也使用設備的主設備號進行索引。其入口也是device_struct結構。和字符設備不同的是系統(tǒng)有幾類塊設備。SCSI設備是一類而IDE設備則是另外一類。和普通文件操作接口一樣,每個塊設備驅動必須為buffercache提供接口。每個塊設備驅動將填充其在blk_dev數(shù)組中的blk_dev_struct結構入口。數(shù)組的索引值還是此設備的主設備號。4.2塊設備塊設備也支持以文件方式訪問。Linux在bbuffercache塊設備請求上圖表示每個請求有指向一個或多個buffer_hear結構的指針,每個請求讀寫一塊數(shù)據(jù)。一旦設備驅動完成了請求則它必須將每個buffer_heard結構從request結構中清除。buffercache塊設備請求上圖表示每個請求有指向一4.3網(wǎng)絡設備網(wǎng)絡設備,即Linux的網(wǎng)絡子系統(tǒng),是一個發(fā)送與接收數(shù)據(jù)包的實體。它一般是一個象以太網(wǎng)卡的物理設備。每個網(wǎng)絡設備都用一個device結構來表示,所有傳輸與接收到的網(wǎng)絡數(shù)據(jù)用一個sk_buff結構來表示。這些數(shù)據(jù)結構使得網(wǎng)絡協(xié)議頭可以更容易的添加與刪除。4.3網(wǎng)絡設備網(wǎng)絡設備,即Linux的網(wǎng)絡子系統(tǒng),是一網(wǎng)絡設備特殊文件僅在于系統(tǒng)網(wǎng)絡設備發(fā)現(xiàn)與初始化時建立。它們使用標準的命名方法,每個名字代表一種類型的設備。多個相同類型設備將從0開始記數(shù)。這樣以太網(wǎng)設備被命名為/dev/eth0,/dev/eth1,/dev/eth2等等。一些常見的網(wǎng)絡設備如下:/dev/ethN以太網(wǎng)設備/dev/slNSLIP設備/dev/pppNPPP設備/dev/loLoopback設備網(wǎng)絡設備特殊文件僅在于系統(tǒng)網(wǎng)絡設備發(fā)現(xiàn)與初始化時建立。它編寫驅動程序的一些基本概念讀寫幾乎所有設備都有輸入和輸出。每個驅動程序要負責本設備的讀寫操作。操作系統(tǒng)的其他不需要知道對設備的具體讀寫操作怎樣進行,這些都由驅動程序屏蔽掉了。操作系統(tǒng)定義好一些讀寫接口,由驅動程序完成具體的功能。在驅動程序初始化時,需要把具有這種接口的讀寫函數(shù)注冊進操作系統(tǒng)。編寫驅動程序的一些基本概念讀寫中斷中斷在現(xiàn)代計算機結構中有重要的地位。操作系統(tǒng)必須提供驅動程序響應中斷的能力。一般是把一個中斷處理程序注冊到系統(tǒng)中去。操作系統(tǒng)在硬件中斷發(fā)生后調用驅動程序的處理程序。Linux支持中斷的共享,即多個設備共享一個中斷。PCA課件第七章嵌入式設備驅動時鐘在實現(xiàn)驅動程序時,很多地方會用到時鐘。如某些協(xié)議里的超時處理,沒有中斷機制的硬件的輪詢等。操作系統(tǒng)應為驅動程序提供定時機制。一般是在預定的時間過了以后回調注冊的時鐘函數(shù)。時鐘常用的系統(tǒng)支持
內存申請和釋放中斷時鐘I/O中斷打開關閉打印信息注冊驅動程序常用的系統(tǒng)支持內存申請和釋放內存申請和釋放include/linux/kernel.h里聲明了kmalloc()和kfree()。用于在內核模式下申請和釋放內存。與用戶模式下的malloc()不同,kmalloc()申請空間有大小限制。長度是2的整次方??梢陨暾埖淖畲箝L度也有限制。另外kmalloc()有priority參數(shù)Kfree()釋放的內存必須是kmalloc()申請的內存申請和釋放include/linux/kernel.h申請中斷和釋放中斷request_irq()、free_irq()是驅動程序申請中斷和釋放中斷的調用。在include/linux/sched.h里聲明申請中斷和釋放中斷request_irq()、free_i時鐘時鐘的處理類似中斷,也是登記一個時間處理函數(shù),在預定的時間過后,系統(tǒng)會調用這個函數(shù)。在include/linux/timer.h里聲明使用時鐘,先聲明一個timer_list結構,調用init_timer對它進行初始化。Time_list結構里expires是標明這個時鐘的周期,單位采用jiffies的單位。jiffy指連續(xù)微處理器時鐘周期間的時間長度時鐘時鐘的處理類似中斷,也是登記一個時間處理函數(shù),在預定的I/OI/O端口的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學日出作文600字7篇
- 護理工作總結15篇
- 《寒冷的冬天》教案
- 工傷簡單辭職報告(集錦7篇)
- 網(wǎng)絡編程協(xié)議課程設計
- 2018年全國兩會學習解讀
- 消費電子行業(yè)專題報告:創(chuàng)新驅動需求復蘇 業(yè)績與估值有望修復
- 兒童看護服務合同(2篇)
- 河南省安陽市林州城郊鄉(xiāng)第六職業(yè)中學高二地理聯(lián)考試題含解析
- 煤炭經(jīng)營場地出租合同范本
- 垂直管理體系下績效分配模式推進護理服務課件
- 二年級上冊英語說課稿-Module 4 Unit 2 He doesn't like these trousers|外研社(一起)
- 2023-2024人教版小學2二年級數(shù)學下冊(全冊)教案設計
- 少數(shù)民族普通話培訓
- 詩朗誦搞笑版臺詞
- 養(yǎng)老服務中心裝飾裝修工程施工方案
- 落地式腳手架監(jiān)理實施細則
- 上海市金山區(qū)2022-2023學年中考一模英語試題含答案
- 節(jié)水灌溉供水工程初步設計報告
- 【期末試題】河西區(qū)2018-2019學年度第一學期六年級數(shù)學期末試題
- 2022年總經(jīng)理年會發(fā)言稿致辭二
評論
0/150
提交評論