~聽說驅動這東西研究深了會發現一種架構的美
linux把所有的裝置都看成檔案(如led、蜂鳴器、i2c、lcd、觸控螢幕等等裝置)
檔案是什麼?
很簡單,就是存在於我們檔案管理器目錄裡的資料集合
為什麼linux要把所有的裝置看成檔案呢?
因為對於檔案只有兩個操作:讀和寫。
對於裝置,無論是led還是網路也無非是對它讀和寫。
對於檔案的操作一般就有幾個函式?
open()//開啟檔案
read()//讀取檔案內容
write()//寫入檔案內容
ioctl()//管理檔案
close()//關閉檔案
目前理解:做驅動,尤其是字元類驅動這塊的,就是做好open(),write(),ioctrl()等幾個函式,然後等著上層去呼叫!
我們寫的驅動函式怎麼掛接到linux系統上呢?
下面需要我們明白乙個概念:裝置檔案(或者叫做裝置節點):裝置檔案是連線上層應用和底層驅動的橋梁。
linux檔案系統裡面,肯定有個目錄叫做/dev(裡面的所有檔案是裝置檔案,不是普通檔案)裝置檔案裡面什麼也沒有,但包含兩個資訊:主裝置號和次裝置號。
主裝置號:用來區分不同類的裝置,比如led,串列埠,網路等。。。
次裝置號:用來區分同類裝置裡的不同的硬體,比如板子有四個串列埠,這四個串列埠主裝置號相同,此裝置號卻不相同。
也就是說所有的裝置,只要做好了驅動,都要在這個目錄裡生成乙個檔案(例如我們要對led操作,就要用open這個函式開啟裝置檔案/dev/leds),即必須註冊到系統,註冊以後linux才能找到它。
如何將寫好的驅動函式註冊進系統呢?
linux為解決這個問題,專門做了乙個函式,就是為註冊而生的(register——chrdev())
這個註冊函式具體定義如下:
int register_chrdev(unsigned int major,const char name,struct file_operationsfops);
major:主裝置號
name:裝置檔案名字
file_operations:函式指標,實際我們做的5個驅動函式就是存在裡面的。(驅動函式就是直接操作硬體的程式)
系統如何通過裝置號對應硬體:
當我們呼叫系統open時,找到要找的檔案、裝置號,再根據裝置號就可以找到對應封裝號的驅動函式了,再通過呼叫驅動函式就可以對硬體進行操作了。
Ambari的架構與設計思想
ambari包羅了大部分hadoop生態系統的元件,說明它的抽象層次 設計思想值得我們去研究學習。ambari的架構 通過三張圖來說明 第一張架構圖告訴我們 ambari是hortonworks貢獻給社群的 完全開源的 hadoop生態的集群管理 監控 部署的工具 第二張架構圖告訴我們 對外,amb...
Ambari的架構與設計思想
ambari包羅了大部分hadoop生態系統的元件,說明它的抽象層次 設計思想值得我們去研究學習。ambari的架構 通過三張圖來說明 第一張架構圖告訴我們 ambari是hortonworks貢獻給社群的 完全開源的 hadoop生態的集群管理 監控 部署的工具 第二張架構圖告訴我們 對外,amb...
Ambari的架構與設計思想
ambari包羅了大部分hadoop生態系統的元件,說明它的抽象層次 設計思想值得我們去研究學習。ambari的架構 通過三張圖來說明 第一張架構圖告訴我們 ambari是hortonworks貢獻給社群的 完全開源的 hadoop生態的集群管理 監控 部署的工具 第二張架構圖告訴我們 對外,amb...