新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM嵌入式Linux設備樹簡介及應用示例

        ARM嵌入式Linux設備樹簡介及應用示例

        作者: 時間:2016-11-21 來源:網絡 收藏
        1). 簡介

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

        本文引用地址:http://www.104case.com/article/201611/319519.htm

        設備樹機制從Linux 內核3.2 版本左右開始采用,其不僅可以定義ARM SoC內部內存映射外設,還可以定義整個板卡,下面就以Toradex Colibri VF61計算機模塊搭配Colibri Eva Board為例來展示設備樹的具體應用,另外關于設備樹的更深入介紹,請參考這里。

        2). 設備樹文件說明

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

        產品系列

        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

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

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

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

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

        3). 定制設備樹文件

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

        a). 創建新的載板級別設備樹文件,這里為了方便直接復制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). 編輯設備樹文件vf610-colibri-my-carrier.dts,將默認配置為PWM設備管腳配置為GPIO

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

        $ vi vf610-colibri-my-carrier.dts

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

        //添加下面內容于設備樹文件中

        c). 配置編譯環境并編譯新的設備樹文件

        ./ 安裝交叉編譯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

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

        ./ 配置環境變量

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

        $ 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

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

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

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

        $ make colibri_vf_defconfig

        $ make dtbs

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

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

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

        b). 如下修改目標板 uboot環境變量

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

        $ setenv fdt_board my-carrier

        $ saveenv

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

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

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

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

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

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



        關鍵詞: ARMLinux設備

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 扎囊县| 淅川县| 光山县| 芜湖市| 光泽县| 成安县| 渝北区| 康平县| 阜康市| 丰台区| 涟水县| 贵阳市| 江津市| 宜兰县| 凤翔县| 志丹县| 三穗县| 开江县| 醴陵市| 松阳县| 苏尼特左旗| 察雅县| 壤塘县| 高密市| 乌什县| 大关县| 林甸县| 昌吉市| 常山县| 高邑县| 淮阳县| 贡觉县| 张家口市| 北流市| 海淀区| 河津市| 孟津县| 花垣县| 湖北省| 太白县| 石棉县|