<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM嵌入式Linux設備樹(shù)簡(jiǎn)介及應用示例

ARM嵌入式Linux設備樹(shù)簡(jiǎn)介及應用示例

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
1). 簡(jiǎn)介

設備樹(shù)(Device Tree)是一種用來(lái)描述系統硬件的數據結構,一些硬件設備設計機制就是可被系統發(fā)現的(如PCI Express或者USB總線(xiàn)),而有一些則不是(尤其是內存映射外設)。對于后一種情況,不同于X86架構系統采用BIOS和操作系統溝通硬件拓撲信息,ARM Linux通常情況是將硬件設備描述硬編碼到系統內核(Linux Kernel)中,但由于A(yíng)RM嵌入式設備的多樣和離散性,即便如此也不能保證覆蓋到所有設備,而且長(cháng)久以來(lái)給ARM Linux內核代碼維護造成了很大負擔;基于這種情況,設備樹(shù)的概念就被提出,將ARM SOC和板卡硬件平臺描述信息從內核獨立出來(lái)成為設備樹(shù)文件,通過(guò)bootloader傳遞給內核來(lái)識別當前平臺設備并加載相應的資源和驅動(dòng),這樣就把ARM嵌入式Linux 內核統一起來(lái),更好的利于內核維護,而對于廣泛的ARM嵌入式設備系統維護和遷移也更方便和有效率。

本文引用地址:http://dyxdggzs.com/article/201611/319519.htm

設備樹(shù)機制從Linux 內核3.2 版本左右開(kāi)始采用,其不僅可以定義ARM SoC內部?jì)却嬗成渫庠O,還可以定義整個(gè)板卡,下面就以Toradex Colibri VF61計算機模塊搭配Colibri Eva Board為例來(lái)展示設備樹(shù)的具體應用,另外關(guān)于設備樹(shù)的更深入介紹,請參考這里。

2). 設備樹(shù)文件說(shuō)明

Toradex ARM計算機模塊工業(yè)產(chǎn)品級Embedded Linux源代碼下載及編譯指南請見(jiàn)這里,其中設備樹(shù)文件位于Kernel 源代碼 arch/arm/boot/dts/ 目錄下。

產(chǎn)品系列

SoC

Image 版本

SoC 級別

模塊級別

Eva Board級別

Colibri VF50

NXP/Freescale Vybrid

V2.3Beta5 onwards

vf500.dtsi

vf500-colibri.dtsi

vf500-colibri-eval-v3.dts

Colibri VF61

NXP/Freescale Vybrid

V2.3Beta5 onwards

vf610.dtsi

vf610-colibri.dtsi

vf610-colibri-eval-v3.dts

Colibri iMX6DL/S

NXP/Freescale i.MX6

all compatible

imx6q.dtsi

imx6qdl-colibri.dtsi

imx6dl-colibri-eval-v3.dts

Apalis iMX6Q/D

NXP/Freescale i.MX6

V2.3Beta3 onwards

imx6q.dtsi

imx6qdl-apalis.dtsi

imx6q-apalis-eval.dts

設備樹(shù)通常由多級別的多個(gè)設備樹(shù)文件構成,一個(gè)設備樹(shù)文件(dts 和dtsi)可以包含另外一個(gè)可包含設備樹(shù)文件(dtsi),如一個(gè)板卡級設備樹(shù)文件(dts)一般會(huì )包含其所使用的SoC級別的設備樹(shù)文件(dtsi)。如上圖所示,為了支持Toradex產(chǎn)品,定義了三個(gè)級別的設備樹(shù)文件:載板級別,模塊基本以及SoC級別,這些區別也體現在了設備樹(shù)文件的命名上面。

載板級別的設備樹(shù)文件(如vf610-colibri-eval-v3.dts)定義自Colibri Eva Board載板,但基于Colibri模塊的標準定義,同樣也兼容于其他Colibri載板(如Iris載板);不過(guò)如果用戶(hù)針對自己應用定制了載板,則需要對應定制化設備樹(shù)文件以便使能非默認定義功能設備(如第二個(gè)網(wǎng)口)或者關(guān)閉一些無(wú)用的設備。

設備樹(shù)文件(dts)最后要被編譯成設備樹(shù)二進(jìn)制文件(dtb)以供Linux 內核啟動(dòng)加載所使用,所需的編譯器也都集成在Linux源文件里面可以直接調用,從后面的示例可以看到具體的編譯方法。

設備樹(shù)文件的基本單元是node,一個(gè)設備樹(shù)文件只能有一個(gè)root node (/),其他node按照parent/child node以樹(shù)狀結構分布,每個(gè)node里面包含一些property/value來(lái)描述該node特性,如下面是一個(gè)UART 設備的描述;另外低級別設備樹(shù)文件的定義可以在更高級別的設備樹(shù)文件中重新定義或者更改,最后生成的二進(jìn)制文件以最后一次定義為準,因此我們定制化設備樹(shù)文件時(shí)候通常只定制修改最高級別的載板級設備樹(shù)文件即可;更詳細的關(guān)于設備樹(shù)文件語(yǔ)法的說(shuō)明請見(jiàn)這里。

3). 定制設備樹(shù)文件

本文以Colibri VF61計算機模塊和Eva board載板為例,定制設備樹(shù)文件以使能GPIO和CAN bus。Colibri Vybird系列產(chǎn)品設備樹(shù)文件的架構如下圖所示:

a). 創(chuàng )建新的載板級別設備樹(shù)文件,這里為了方便直接復制vf610-colibri-eval-v3.dts

----------------------------------------------------------------------------------------

$ cp arch/arm/boot/dts/vf610-colibri-eval-v3.dts arch/arm/boot/dts/vf610-colibri-my-carrier.dts

----------------------------------------------------------------------------------------

b). 編輯設備樹(shù)文件vf610-colibri-my-carrier.dts,將默認配置為PWM設備管腳配置為GPIO

----------------------------------------------------------------------------------------

$ vi vf610-colibri-my-carrier.dts

-------------------

//添加下面內容于設備樹(shù)文件中

c). 配置編譯環(huán)境并編譯新的設備樹(shù)文件

./ 安裝交叉編譯Tool Chain,請從這里下載

----------------------------------------------------------------------------------------

$ tar xvf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

$ ln -s gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf gcc-linaro

----------------------------------------------------------------------------------------

./ 配置環(huán)境變量

----------------------------------------------------------------------------------------

$ export ARCH=arm

$ export PATH=~/gcc-linaro/bin/:$PATH

$ export CROSS_COMPILE=arm-linux-gnueabihf-

----------------------------------------------------------------------------------------

./ 修改arch/arm/boot/dts/Makefile文件, 插入"vf610-colibri-my-carrier.dtb"

----------------------------------------------------------------------------------------

dtb-$(CONFIG_SOC_VF610) +=

vf500-colibri-eval-v3.dtb

vf610-colibri-eval-v3.dtb

vf610-colibri-my-carrier.dtb

vf500-colibri-dual-eth.dtb

vf610-colibri-dual-eth.dtb

vf610-cosmic.dtb

vf610-twr.dtb

----------------------------------------------------------------------------------------

./ 編譯設備樹(shù)文件,源代碼根目錄linux-toradex下,生成的文件可以在arch/arm/boot/dts/下找到

----------------------------------------------------------------------------------------

$ make colibri_vf_defconfig

$ make dtbs

----------------------------------------------------------------------------------------

4). 部署新的設備樹(shù)文件并測試

a). 將新的設備樹(shù)文件"vf610-colibri-my-carrier.dtb"放置到目標板Colibri VF61 Linux系統 /boot目錄下

b). 如下修改目標板 uboot環(huán)境變量

----------------------------------------------------------------------------------------

$ setenv fdt_board my-carrier

$ saveenv

----------------------------------------------------------------------------------------

c). 重啟后則系統加載新的設備樹(shù)文件

下面兩個(gè)截圖分別是更改前和更改后使用Toradex提供的GPIOConfig工具對PWM對應管腳進(jìn)行查看,可以看到由原來(lái)的PWM屬性變成了GPIO,修改成功后則可以按照這里的說(shuō)明直接調用GPIO使用。

d). 對于CAN,Colibri VF61支持兩個(gè)CAN接口,CAN0和CAN1,在設備樹(shù)中使能CAN設備示例如下

./ 編輯vf610-colibri-my-carrier.dts,添加下面內容

./ 和上述方法一樣重新編譯設備樹(shù)文件后部署,然后就可以在系統中調用CAN了,更詳細的說(shuō)明可以參考這里。



關(guān)鍵詞: ARMLinux設備

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>