linux and the device tree linux內(nèi)核設備樹數(shù)據(jù)使用模型。
open firmware device tree (dt) 是一個數(shù)據(jù)結構,也是一種描述硬件的語言。準確地說,它是一種能被操作系統(tǒng)解析的描述硬件的語言,這樣操作系統(tǒng)就不需要把硬件平臺的細節(jié)在代碼中寫死。
從結構上來說,dt是一個樹形結構,或者有名結點組成的非循環(huán)圖,結點可能包含任意數(shù)量的有名屬性,有名屬性又可以包含任意數(shù)量的數(shù)據(jù)。同樣存在一種機制,可以創(chuàng)建從一個結點到正常樹形結構之外的鏈接。
從概念上講,一套通用的使用方法,即bindings。bindings定義了數(shù)據(jù)如何呈現(xiàn)在設備樹中,怎樣描述典型的硬件特性,包括數(shù)據(jù)總線,中斷線,gpio連接以及外設等。
盡可能多的硬件被描述從而使得已經(jīng)存在的bindings最大化地使用源代碼,但是由于屬性名和結點名是簡單字符串, 可以通過定義新結點和屬性的方式很方便地擴展已經(jīng)存在的bindings或者創(chuàng)建一個新的binding。在沒有認真了解過已經(jīng)存在的bindings的情況下,創(chuàng)建一個新的binding要慎之又慎。
對于i2c總線,通常有兩種不同的,互不相容的bindings出現(xiàn),就是因為新的binding創(chuàng)建時沒有研究i2c設備是如何在當前系統(tǒng)中被枚舉的。1. 歷史 略2. 數(shù)據(jù)模型 請參考device tree usage章節(jié)2.1 high level view 必須要認識到的是,dt是一個描述硬件的數(shù)據(jù)結構。
它并沒有什么神奇的地方,也不能把所有硬件配置的問題都解決掉。它只是提供了一種語言,將硬件配置從linux kernel支持的board and device driver中提取出來。
dt使得board和device變成數(shù)據(jù)驅動的,它們必須基于傳遞給內(nèi)核的數(shù)據(jù)進行初始化,而不是像以前一樣采用hard coded的方式。觀念上說,數(shù)據(jù)驅動平臺初始化可以帶來較少的代碼重復率,使得單個內(nèi)核映像能夠支持很多硬件平臺。
linux使用dt的三個主要原因:1) 平臺識別 (platform identification)2) 實時配置 (runtime configuration)3) 設備植入 (device population)2.2 平臺識別 第一且最重要的是,內(nèi)核使用dt中的數(shù)據(jù)去識別特定機器。最完美的情況是,內(nèi)核應該與特定硬件平臺無關,因為所有硬件平臺的細節(jié)都由設備樹來描述。
然而,硬件平臺并不是完美的,所以內(nèi)核必須在早期初始化階段識別機器,這樣內(nèi)核才有機會運行特定機器相關的初始化序列。大多數(shù)情況下,機器識別是與設備樹無關的,內(nèi)核通過機器的核心cpu或者soc來選擇初始化代碼。
以arm平臺為例,setup_arch()會調(diào)用setup_machine_fdt(),后者遍歷machine_desc鏈表,選擇最匹配設備樹數(shù)據(jù)的machine_desc結構體。它是通過查找設備樹根結點的compatible屬性并與machine_desc->dt_compat進行比較來決定哪一個machine_desc結構體是最適合的。
compatible屬性包含一個有序的字符串列表,它以確切的機器名開始,緊跟著一個可選的board列表,從最匹配到其他匹配類型。以ti beagleboard的compatible屬性為例,beagleboard xm board可能描述如下:compatible = "ti,omap3-beagleboard", "ti,omap3450", "ti,omap3"; compatible = "ti,omap3-beagleboard-xm", "ti,omap3450", "ti,omap3"; 在這里,”ti, omap3-beagleboard-xm”是最匹配的模型,"ti,omap3450"次之,"ti,omap3"再次之。
機敏的讀者可能指出,beagle xm也可以聲明匹配"ti,omap3-beagleboard",但是要注意的是,板級層次上,兩個機器之間的變化比較大,很難確定是否兼容。從頂層上來看,寧可小心也不要去聲明一個board兼容另外一個。
值得注意的情況是,當一個board承載另外一個,例如一個cpu附加在一個board上。(兩種cpu支持同一個board的情況)。
第一階段:linux基礎入門Linux基礎入門主要包括: Linux硬件基礎、Linux發(fā)展歷史、Linux系統(tǒng)安裝、xshell連接、xshell優(yōu)化、SSH遠程連接故障問題排查、L inux基礎優(yōu)化、Linux目錄結構知識、Linux文件屬性、Linux通配符、正則表達式、Linux系統(tǒng)權限等第二階段:linux系統(tǒng)管理進階linux系統(tǒng)管理進階包括:Linux定時任務、Linux用戶管理、Linux磁盤與文件系統(tǒng)、Linux三劍客之sed命令等。
第三階段:Linux Shell基礎Linux Shell基礎包括:Shell編程基礎、Linux三劍客之a(chǎn)wk命令等。第四階段:Linux網(wǎng)絡基礎第五階段:Linux網(wǎng)絡服務Linux網(wǎng)絡服務包括:集群實戰(zhàn)架構開始及環(huán)境準備、rsync數(shù)據(jù)同步服務、Linux全網(wǎng)備份項目、nfs網(wǎng)絡存儲服務精講、inotify/sersync實時數(shù)據(jù)同步/nfs存儲實時備份項目等。
第六階段:Linux重要網(wǎng)絡服務Linux重要網(wǎng)絡服務包括:patible controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02) 00:02。 1 Display controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02) 00:1d。
0 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03) 00:1d。 1 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 03) 00:1d。
2 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03) 00:1d。 7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03) 00:1e。
0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 83) 00:1f。 0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 03) 00:1f。
1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 03) 00:1f。 3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03) 00:1f。
5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03) 00:1f。 6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03) 02:00。
0 Ethernet controller: Realtek Semiconductor Co。 , Ltd。
RTL-8139/8139C/8139C+ (rev 10) 02:09。0 CardBus bridge: Texas Instruments Texas Instruments PCIxx21/x515 Cardbus Controller 02:09。
2 FireWire (IEEE 1394): Texas Instruments Texas Instruments OHCI Compliant IEEE 1394 Host Controller 02:09。3 Unknown mass storage controller: Texas Instruments Texas Instruments PCIxx21 Integrated FlashMedia Controller 02:09。
4 Class 0805: Texas Instruments Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD)。
在linux內(nèi)核啟動過程中,這兩個名字匹配了,就調(diào)用驅動的probe函數(shù)。
設備樹中的每一個代表了一個設備的節(jié)點都要有一個compatible屬性。compatible是系統(tǒng)用來決定綁定到設備的設備驅動的關鍵。
compatible屬性是用來查找節(jié)點的方法之一,另外還可以通過節(jié)點名或節(jié)點路徑查找指定節(jié)點。 系統(tǒng)初始化時會初始化platform總線上的設備(按鍵驅動表現(xiàn)為Platform驅動),根據(jù)設備節(jié)點"compatible"屬性和驅動中of_match_table對應的值,匹配了就加載對應的驅動。
linux設備樹驅動exynos4412怎么寫
系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應用程序之間的接口,設備驅動程序是操作系統(tǒng)內(nèi)核和機器硬件之間的接口。設備驅動程序為應用程序屏蔽了硬件的細節(jié),這樣在應用程序看來,硬件設備只是一個設備文件,應用程序可以象操作普通文件一樣對硬件設備進行操作。設備驅動程序是內(nèi)核的一部分,它完成以下的功能:
1、對設備初始化和釋放。
2、把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)。
3、讀取應用程序傳送給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù)。
4、檢測和處理設備出現(xiàn)的錯誤。
在Linux操作系統(tǒng)下有三類主要的設備文件類型,一是字符設備,二是塊設備,三是網(wǎng)絡設備。字符設備和塊設備的主要區(qū)別是:在對字符設備發(fā)出讀/寫請求時,實際的硬件I/O一般就緊接著發(fā)生了,塊設備則不然,它利用一塊系統(tǒng)內(nèi)存作緩沖區(qū),當用戶進程對設備請求能滿足用戶的要求,就返回請求的數(shù)據(jù),如果不能,就調(diào)用請求函數(shù)來進行實際的I/O操作。塊設備是主要針對磁盤等慢速設備設計的,以免耗費過多的CPU時間來等待。
已經(jīng)提到,用戶進程是通過設備文件來與實際的硬件打交道。每個設備文件都都有其文件屬性(c/b),表示是字符設備還是塊設備?另外每個文件都有兩個設備號,第一個是主設備號,標識驅動程序,第二個是從設備號,標識使用同一個設備驅動程序的不同的硬件設備,比如有兩個軟盤,就可以用從設備號來區(qū)分他們。設備文件的的主設備號必須與設備驅動程序在登記時申請的主設備號一致,否則用戶進程將無法訪問到驅動程序。
最后必須提到的是,在用戶進程調(diào)用驅動程序時,系統(tǒng)進入核心態(tài),這時不再是搶先式調(diào)度。也就是說,系統(tǒng)必須在你的驅動程序的子函數(shù)返回后才能進行其他的工作。如果你的驅動程序陷入死循環(huán),不幸的是你只有重新啟動機器了,然后就是漫長的fsck。
讀/寫時,它首先察看緩沖區(qū)的內(nèi)容,如果緩沖區(qū)的數(shù)據(jù)未被處理,則先處理其中的內(nèi)容。
你好,首先我要說明我是ARM嵌入式開發(fā)工程師,偏驅動向
驅動難,沒有3年以上的工作經(jīng)驗 都沒什么料子的
要寫驅動
你要很熟悉linux C 而且注重字符串和指針處理
然后你就學數(shù)字電路 要多懂
其次要學會看datasheet
這些學得差不多了就進入了內(nèi)核,為什么要知道內(nèi)核(只需要知道內(nèi)核的工作原理機制還有版本變動),因為內(nèi)核跟驅動是不分家的,你寫了驅動就知道
然后就是進入主菜,寫驅動,看書時必須的,我看驅動的書不下10本,而且盡量消化,隨后你就嘗試寫某些驅動,只要你會一個類型的就會這一類型的驅動,同類驅動是萬變不離其宗 不要想著全部驅動都學會,要學精!像NV realtek這些厲害的工程師 一輩子就寫兩個驅動(當然,所有驅動中為網(wǎng)卡驅動和顯卡驅動最難最容易出錯!同時也是最厲害的人去寫的)
驅動!路漫漫其修遠兮!
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據(jù)《信息網(wǎng)絡傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:4.207秒