歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

【Linux 驅動】第一章 設備驅動程序簡介

一,設備驅動程序的作用

最顯著的作用,是可以使計算機和設備通信,充當硬件的接口。操作系統只能通過這個接口來控制設備。

二是書中說的驅動在於提供機制,而不是策略,個人覺得這應該是我們編寫驅動程序遵循的一個原則。機制--需要提供什麼功能,策略--如何使用這些功能。由於不同的環境需要不同的方式來使用硬件,因此應盡可能做到讓驅動程序不帶策略

驅動程序在用戶態和內核態之間傳遞數據

驅動程序是內核的一部分,可以使用中斷、DMA等操作

二,內核功能劃分

進程管理:創建和銷毀進程,處理他們與外部世界之間的連接

內存管理:在有限的可用資源之上為每個進車功能創建一個虛擬地址空間

文件系統:

設備控制:所有設備控制操作都由與控制設備相關的代碼完成

網絡功能

上面內核的每一部分都和我們編寫具體的驅動程序相關,以後再學習中會慢慢涉及到每一部分。

三,可裝載模塊

linux提供了模塊機制以便我們進行驅動開發。

insmod:將模塊連接到正在運行的內核

rmmod :移除連接

四,設備和模塊的分類

linux設備分類一般分為三類:字符設備,塊設備,網絡接口。

1)字符設備:所有能夠象字節流一樣訪問的設備都通過字符設備實現它們被映射為文件系統中的節點,通常在/dev/目錄下

2)塊設備:通常是指諸如磁盤、內存、Flash等可以容納文件系統的存儲設備塊設備也是通過文件系統訪問,與字符設備的區別:內核管理數據的方式不同它允許象字符設備一樣以字節流的方式來訪問,也可一次傳遞任意多的字節。

3)網絡接口設備:通常它指的是硬件設備,但有時也可能是一個軟件設備(如回環接loopback),它們由內核中網絡子系統驅動,負責發送和接收數據包。它們的數據傳送往往不是面向流的,因此很難將它們映射到一個文件系統的節點上。

一般要包含open read write close等系統調用的實現

但是我們要知道一個復雜設備可能會涉及到linux驅動的很多子系統,比如usb的藍牙鍵盤,會涉及到usb子系統,藍牙協議棧,input子系統,所以這個設備從不同的角度看在linux內核中屬於不同的子系統,所以這三個分類只是一個很簡單概括的分類,我們也不必遵循這三個分類。

五,安全問題 & 版本編號 & 許可證條款

1) 主要是:緩存區溢出,數據洩漏,後門程序等等安全問題

2)內核版本編號,一般偶數版本的編號是正式發行的穩定版本,而奇數編號的版本是出於開發期的版本,然後書中提到:遇到任何版本相關問題,可以查看Documentation/Changes文件,於是我用友善提供的2.6.29內核看了下該文件,都是一些utils的使用以及編譯本版本內核需要的一系列工具的版本要求以及下載鏈接。所以當內核編譯出錯可以從該文件看看。

3)許可證條款,這個問題大概就是說我們寫的內核模塊應該遵行GPL2發布,這樣的話內核開發者就會知道我們寫的內核模塊的源碼,這樣如果內核代碼在更新的時候不至於我們寫的內核模塊出現內核版本間不兼容的情況,所以我們都最好以GPL2這種許可證發布。

並且該許可證原文可以從內核頂層目錄的COPYING文件查看到。

相關閱讀:

【Linux 驅動】驅動開發第一步----開發環境搭配  http://www.linuxidc.com/Linux/2012-04/58409.htm

【Linux 驅動】第二章 構造和運行模塊  http://www.linuxidc.com/Linux/2012-04/58411.htm

Copyright © Linux教程網 All Rights Reserved