以Xilinx Zynq-7000為例說(shuō)明設(shè)備樹(shù)的運(yùn)用_第1頁(yè)
以Xilinx Zynq-7000為例說(shuō)明設(shè)備樹(shù)的運(yùn)用_第2頁(yè)
以Xilinx Zynq-7000為例說(shuō)明設(shè)備樹(shù)的運(yùn)用_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

以XilinxZynq-7000為例說(shuō)明設(shè)備樹(shù)的運(yùn)用注:由于內(nèi)核版本的演變,設(shè)備樹(shù)成了任何使用較高版本linux系統(tǒng)的設(shè)備平臺(tái)所必須文件,然國(guó)內(nèi)相關(guān)技術(shù)文檔嚴(yán)重不足,本文是國(guó)外技術(shù)專(zhuān)欄的翻譯.本教程是針對(duì)XilinxZynq-7000設(shè)備寫(xiě)的,但其中的概念適用于所有使用了設(shè)備樹(shù)的Linux內(nèi)核。本文使用Xillinux發(fā)行版為例,該發(fā)行版運(yùn)行于Zedboard硬件上。

設(shè)備樹(shù)有什么好處設(shè)想一下:bootloader剛剛將Linux內(nèi)核復(fù)制到內(nèi)存中,然后跳到內(nèi)核的入口點(diǎn)開(kāi)始執(zhí)行。此時(shí)內(nèi)核就像運(yùn)行在處理器上的一個(gè)裸機(jī)程序。需要配置處理器,設(shè)置虛擬內(nèi)存,向控制臺(tái)打印一些信息。但是這些事情如何完成?所有的這些操作都要通過(guò)寫(xiě)寄存器來(lái)實(shí)現(xiàn),但Linux內(nèi)核如何知道這些寄存器的地址?如何知道當(dāng)前有多少個(gè)CPU核可以使用?有多少內(nèi)存可以訪問(wèn)?最直接的辦法就是在內(nèi)核代碼里為指定平臺(tái)寫(xiě)好這些代碼,由內(nèi)核配置參數(shù)決定哪些平臺(tái)代碼將被啟用。當(dāng)一切都固定不變時(shí)這種方法還不錯(cuò),比如在x86處理器上內(nèi)部的寄存器,或是BIOS的訪問(wèn)。但對(duì)于變化量來(lái)說(shuō),比如PCI/PCIe外設(shè),就需要內(nèi)核明確了解這些變化的細(xì)節(jié)。ARM架構(gòu)已經(jīng)變成了Linux社區(qū)的一個(gè)在麻煩:即使處理器使用相同的編譯器和函數(shù),但具體到某一種芯片,它就有自己的寄存器地址和不同的配置方式。不僅如此,每種板子都有自己的外設(shè)。結(jié)果造成內(nèi)核中有大量的頭文件、補(bǔ)丁和特殊的配置參數(shù),它們的一種組合就對(duì)應(yīng)于一款芯片的一種特殊板型。總之,這造成了大量丑陋和不可維護(hù)的代碼。另外,每個(gè)編譯出來(lái)的內(nèi)核bin文件都是為某一款芯片的某一種板子,有點(diǎn)像為市場(chǎng)上某一款PC主板編譯內(nèi)核。所以很希望為所有ARM處理器編譯內(nèi)核時(shí),讓內(nèi)核能以某種方式識(shí)別硬件,然后使用正確的驅(qū)動(dòng),就像一臺(tái)PC一樣。怎么實(shí)現(xiàn)呢?在PC上,寄存器初始化是硬編碼的,其他的信息由BIOS提供。所以當(dāng)有另一塊軟件提供這些信息時(shí),硬件自動(dòng)檢測(cè)也很容易。ARM處理器沒(méi)有BIOS,Linux內(nèi)核只能靠自己了。解決方案是設(shè)備樹(shù)devicetree,也稱(chēng)作OpenFirmware(OF)或FlattenedDeviceTree(FDT)。本質(zhì)上是一個(gè)字節(jié)碼格式的數(shù)據(jù)結(jié)構(gòu),其中包含信息在內(nèi)核啟動(dòng)時(shí)非常有用。bootloader在跳到內(nèi)核入口點(diǎn)之前將這一塊數(shù)據(jù)復(fù)制到RAM中的已知地址。設(shè)備樹(shù)的嚴(yán)格的規(guī)范,卻沒(méi)有規(guī)定哪些內(nèi)容可以放置其中以及放置的位置。內(nèi)核可以搜索設(shè)備樹(shù)中的任意路徑和參數(shù)。程序員來(lái)決定哪些配置作為參數(shù)放進(jìn)設(shè)備樹(shù)里,以及放置在什么地方。采取標(biāo)準(zhǔn)的樹(shù)結(jié)構(gòu),則可用一套方便的API來(lái)操作。例如,約定好如何定義總線上的外設(shè),那么API可以獲取到驅(qū)動(dòng)所需的基本信息:地址、中斷和自定義變量。后面會(huì)介紹更多。對(duì)于我們大多數(shù)人來(lái)說(shuō),我們用設(shè)備樹(shù)來(lái)向內(nèi)核描述對(duì)硬件的添加或刪除操作,作為響應(yīng),內(nèi)核就可以加載或卸載相應(yīng)的驅(qū)動(dòng)。硬件的特殊信息也可以通過(guò)設(shè)備樹(shù)來(lái)向內(nèi)核傳達(dá)。編譯設(shè)備樹(shù)

設(shè)備樹(shù)有三種形式:

*文本文件(.dts)-源

二進(jìn)制對(duì)象(.dtb)-目標(biāo)碼

Linux系統(tǒng)中/proc/device-tree目錄-調(diào)試和逆向信息啟用/proc/device-tree目錄需要打開(kāi)配置CONFIG_PROC_DEVICETREE:

DeviceDrivers--->

DeviceTreeandOpenFirmwaresupport--->

[*]Supportfordevicetreein/proc對(duì)于設(shè)備樹(shù),我們一般的使用流程是:編輯DTS文件,然后用一個(gè)工具將其編譯成DTB文件,這個(gè)工具就在Linux內(nèi)核源碼scripts/dtc/目錄下。設(shè)備樹(shù)編譯器也可以單獨(dú)下載并編譯:

$gitclonegit:///software/dtc.gitdtc

$cddtc

$make但是下文的描述都使用內(nèi)核原碼中的dtc工具。設(shè)備樹(shù)的語(yǔ)法在這里描述。注意這種語(yǔ)言并不作任何執(zhí)行操作,不像XML,這只是一種組織數(shù)據(jù)的語(yǔ)法。一些架構(gòu)有自動(dòng)產(chǎn)生設(shè)備樹(shù)的工具,來(lái)自于XPS項(xiàng)目。但目前對(duì)于ZynqEPP平臺(tái)還沒(méi)有此工具。DTS編譯為DTB:

$scripts/dtc/dtc-Idts-Odtb-o/path/to/my-tree.dtb/path/to/my-tree.dts這樣就創(chuàng)建了my-tree.dtb二進(jìn)制文件。dtc是主機(jī)上的一個(gè)程序。如果內(nèi)核沒(méi)有編譯過(guò),則先需要編譯好DTS編譯器:配置內(nèi)核,也可以復(fù)制一份已有的配置文件到內(nèi)核根目錄下的.config。如下:

$makeARCH=armdigilent_zed_defconfig生成DTS編譯器:

$makeARCH=armscriptsdtc也可以從一個(gè)DTB文件或/proc/device-tree文件系統(tǒng)反編譯。例如從DTB反編譯:

$scripts/dtc/dtc-Idtb-Odts-o/path/to/fromdtb.dts/path/to/booted_with_this.dtb生成的dts文件仍然可以被用來(lái)生成dtb。但最好還是使用最初的DTS文件,因?yàn)橐恍?/p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論