国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

電子工程網

標題: 不再害怕驅動!Linux字符設備驅動詳解 [打印本頁]

作者: 技術小白    時間: 2017-5-15 10:40
標題: 不再害怕驅動!Linux字符設備驅動詳解
不再害怕驅動!Linux字符設備驅動詳解

現實世界中存在著大量的設備,操作系統要求能夠控制和管理這些硬件,而驅動就能幫助實現管理控制。

下面我們從不同的角度理解一下驅動:

驅動(Device Driver)相當于硬件的接口,它維護著我們的硬件,操作系統通過驅動這個接口才能控制硬件。

驅動本身就是一段代碼,自己不會主動運行,而是被操作系統調用執行。

驅動是內核的一部分,運行在內核空間。

驅動和應用程序有什么關系?

應用程序在運行中往往要用到硬件設備,但應用程序不能直接調用驅動程序,因此要執行系統調用陷入內核態才能調用驅動。

寫驅動需要我們懂哪些知識?

1,需要熟悉Linux的內核機制
2,驅動程序與應用程序的接口
3,需要考慮系統對設備的并發操作
4,需要非常熟悉所開發硬件的工作原理

linux下的驅動千篇一律嗎?

linux系統從各異的設備中提取共性特征,將其分為三大類:字符設備、塊設備、網絡設備。
字符設備驅動是這三類中最常見的,而且linux中又有很多基于字符驅動封裝出來的驅動模型,例如:input設備、framebuffer設備、雜項設備等等,今后學習中我們會有所介紹
每一類設備驅動都有對應的驅動模型框架,降低了驅動編程的復雜度,大家都遵循固定的框架進行編程。

在學習linux驅動之前我們要先建立起相關概念,我們將從以下幾點進行學習:

1.Linux驅動程序的功能

   對硬件進行初始化和控制
   檢測和處理硬件出現的錯誤
   負責從硬件讀數據和傳送數據給硬件設備
   接收應用程序發送的數據和回送應用程序請求的數據

2.驅動程序與應用程序的區別  

    應用程序從頭到尾執行完整的任務;驅動程序完成初始化之后不再運行,等待應用程序調用執行。
    應用程序可以使用glibc等標準C函數庫;驅動程序不能使用標準C庫。
    驅動程序是內核的一部分,工作在內核態;應用程序工作在用戶態。

3.應用程序、庫、內核、驅動程序的關系
應用程序調用函數庫完成一系列功能,一部分庫函數通過系統調用由內核完成相應功能,例如:printf、fread函數等等。
內核處理系統調用,內核在實現系統調用時會根據需要調用設備驅動程序操作硬件。
設備驅動是硬件設備的直接控制者,它完成了內核和硬件的通信任務。

4.設備驅動的種類
字符設備
I/O傳輸過程中以字符為單位進行傳輸;
用戶對字符設備發出讀/寫請求時,實際的硬件讀/寫操作一般緊接著發生

塊設備
塊設備與字符相反,它的數據傳輸以塊(內存緩沖)為單位傳輸;
用戶對塊設備讀/寫時,硬件讀/寫不會緊接著發生(即用戶請求和硬件操作是異步的)
磁盤類、閃存類等設備都封裝成塊設備。

網絡設備
網絡設備是一類特殊的設備,它不像字符設備或塊設備那樣通過對應的設備文件訪問,也不能直接通過read或write進行數據請求,而是通過socket接口函數進行訪問。

5.設備文件和主/從設備號
設備文件是用戶程序與設備驅動的一個接口,應用程序通過操作設備文件來調用設備驅動程序。
Linux把對硬件的操作全部抽象成對文件的操作,其中包含了控制和數據傳輸操作,例如:open,read,write,close...
Linux下的各種硬件設備以文件的形式存放于/dev目錄下,可以使用ls/dev 命令進行查看
每個設備文件都有其文件屬性(c或者b),表明其是字符設備還是塊設備。

每個設備文件都有2個設備號,在/dev目錄下使用“ll”或“ls-l”命令可以查看各個設備的設備類型、主/從設備號等詳細信息。

主設備號:用于標識驅動程序,如果兩個設備文件的主設備號相同,那他們使用同一個驅動程序。

從設備號:用于標識同一驅動程序的不同硬件,為了能把不同的具體硬件分開,又通過從設備號來區分使用相同驅動程序的不同設備。
例如:210開發板中的串口設備,主設備號標識串口這類設備,從設備號標識具體的某個串口。

用戶通過“cat /proc/devices”命令可以查看當前系統中主設備號的使用情況,以及和硬件設備的對應情況。

想要了解嵌入式、物聯網相關技術的可以聯系宋工企鵝號三五二四六五九零八八Tel:173--1795--1908
試聽C語言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
想學習的你和我聯系預約就可以免費聽課了。
宋工企鵝號:三五二四六五九零八八   Tel173--1795--1908







歡迎光臨 電子工程網 (http://m.4huy16.com/) Powered by Discuz! X3.4