查看: 2963|回復: 0
打印 上一主題 下一主題

SOM-TL138Linux設備樹(shù)概述和開(kāi)發(fā)指南

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2019-8-12 15:07:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1 Linux設備樹(shù)概述1.1 Linux設備樹(shù)概述
    Linux設備樹(shù)是一個(gè)包含節點(diǎn)和屬性的簡(jiǎn)單樹(shù)狀結構。屬性是基于key-value對的,而節點(diǎn)可以同時(shí)包含屬性和子節點(diǎn)。下面這個(gè)樹(shù)就是一個(gè)典型結構
/ {
     node1 {
                   a-string-property = "A string";
                   a-string-list-property = "first string", "second string";
                   a-byte-data-property = [0x01 0x23 0x34 0x56];
                   child-node1 {
                                          first-child-property;
                                          second-child-property = <1>;
                                          a-string-property = "Hello, world";
                                       };
                  child-node2 {
                                       };
               };
    node2 {
                 an-empty-property;
                 a-cell-property = <1 >; /* each number (cell) is a uint32 */
                 child-node1 {
                                      };
                };
};
這棵樹(shù)沒(méi)有描述任何東西,但是它體現了節點(diǎn)的一些屬性:
l 一個(gè)單獨的根節點(diǎn):“/”
l 兩個(gè)子節點(diǎn):“node1”“node2”
l 兩個(gè) node1 的子節點(diǎn):“child-node1”“child-node2”
l 一堆分散在樹(shù)里的屬性
可以這么簡(jiǎn)單理解:節點(diǎn)就是樹(shù)枝,屬性就是樹(shù)葉;樹(shù)枝上可以有再長(cháng)樹(shù)枝也可以長(cháng)樹(shù)葉,而樹(shù)葉上則不會(huì )再長(cháng)樹(shù)枝。
屬性是基于key-value結構的,value可以為空或者特定格式的字符串內容。由于數據類(lèi)型并不被編碼到最終的數據結構中,設備樹(shù)源代碼中僅能支持有限的幾種基本數據類(lèi)型,如下:
l 文本字符串(無(wú)結束符)可以用雙引號表示:
string-property = "a string"
l 'Cells'32 位無(wú)符號整數,用尖括號表示:
cell-property = <0xbeef xabcd>
l 二進(jìn)制數據用方括號表示
binary-property = [0x01 0x23 0x45 0x67];
l 不同表示形式的數據可以使用逗號連在一起
mixed-property = "a string", [0x01 0x23 0x45 0x67], <0x12345678>;
l 逗號也可用于創(chuàng )建字符串列表
string-list = "red fish", "blue fish";
1.2 基本概念1.2.1 初始結構
第一步就是構建一個(gè)基本結構,這是一個(gè)設備樹(shù)最基本的結構。在這個(gè)階段,需要一個(gè)唯一的標識該機器。
/ {
compatible = "gpio-leds";
};
compatible指定了系統的名稱(chēng)。它包含了一個(gè)“<>,<>”形式的字符串。重要的是要指定一個(gè)確切的設備,并且包括制造商的名字,以避免命名空間沖突。由于操作系統會(huì )使用 compatible的值來(lái)決定如何在機器上運行,所以正確的設置這個(gè)屬性十分重要。
1.2.2 中央處理器
    第二步就是描述CPU。先添加一個(gè)名為“cpus”的容器節點(diǎn),然后為每個(gè)CPU分別添加子節點(diǎn),TI AM437x平臺為例
/ {
compatible = "ti,am437x-gp-evm";
cpus {
cpu@0 {
compatible = "ti,am4372";
};
cpu@1 {
compatible = "ti,am4372";
};
};
};
每個(gè)cpu節點(diǎn)compatible屬性是一個(gè)“<>,<>”形式的字符串,并指定了確切的cpu,就像頂層的compatible屬性一樣。
1.2.3 節點(diǎn)名稱(chēng)
    每個(gè)節點(diǎn)必須有一個(gè)“<>[@<>]”形式的名字。
l << span>名稱(chēng)>就是一個(gè)不超過(guò)31位的簡(jiǎn)單ascii字符串。通常,節點(diǎn)的命名應該根據它所體現的是什么樣的設備。比如一個(gè)3com以太網(wǎng)適配器的節點(diǎn)就應該命名為 ethernet,而不應該是3com509。
l 如果該節點(diǎn)描述的設備有一個(gè)地址的話(huà),還應該加上設備地址(unit-address)。通常,設備地址就是用來(lái)訪(fǎng)問(wèn)該設備的主地址,并且該地址也在節點(diǎn)的reg屬性中列出。
l 同級節點(diǎn)命名必須是唯一的,但只要地址不同,多個(gè)節點(diǎn)也可以使用一樣的通用名,例如serial@101f1000serial@101f2000。
1.2.4 設備
系統中每個(gè)設備都表示為一個(gè)設備樹(shù)節點(diǎn)。所以接下來(lái)就應該為這個(gè)設備樹(shù)填充設備節點(diǎn)。
/ {
compatible = "ti,am437x-gp-evm";
cpus {
cpu@0 {
compatible = "ti,am4372";
};
cpu@1{
compatible = "ti,am4372";
};
};
serial@101F0000 {
compatible = "ti,omap2-uart";
};
serial@101F2000 {
compatible = "ti,am4372-uart";
};
gpio@101F3000 {
compatible = "ti,pl061";
};
spi@10115000 {
compatible = "ti,ads7846";
};
external-bus {
ethernet@0,0 {
compatible = "ti,smc91c111";
};
i2c@1,0 {
compatible = "ti,tps65218";
rtc@58 {
compatible = "ti,ds1338";
};
};
flash@2,0 {
compatible = "ti,omap2-nand", "omap3-nand";
}
在此樹(shù)中,已經(jīng)為系統中的每個(gè)設備添加了節點(diǎn),而且這個(gè)層次結構也反映了設備與系統的連接方式。例如,外部總線(xiàn)上的設備就是外部總線(xiàn)節點(diǎn)的子節點(diǎn),i2c設備就是i2c 總線(xiàn)節點(diǎn)的子節點(diǎn)。通常,這個(gè)層次結構表現的是CPU視角的系統視圖。
在這顆樹(shù)中,應該注意這些事情:
l 每個(gè)設備節點(diǎn)都擁有一個(gè)compatible 屬性。
l flash閃存節點(diǎn)的compatible屬性由兩個(gè)字符串構成。
l 正如前面所述,節點(diǎn)的命名應當反映設備的類(lèi)型而不是特定的型號。
1.2.5 理解compatible屬性
設備樹(shù)中每個(gè)節點(diǎn)都需要一個(gè)compatible屬性。compatible屬性是操作系統用來(lái)決定使用哪個(gè)設備驅動(dòng)來(lái)綁定到一個(gè)設備上的關(guān)鍵因素。
compatible是一個(gè)字符串列表,其中第一個(gè)字符串指定了這個(gè)節點(diǎn)所表示的確切的設備,該字符串的格式為:"<>,<>"。剩下的字符串的則表示其它與之相兼容的設備。
1.3 如何編址
    可編址設備使用以下屬性將地址信息編碼進(jìn)設備樹(shù):
reg
#address-cells
#size-cells
    每個(gè)可編址設備都有一個(gè)元組列表的reg,元組的形式為:reg = <>。每個(gè)元組都表示一個(gè)該設備使用的地址范圍。每個(gè)地址值是一個(gè)或多個(gè)32位整型數列表,稱(chēng)為cell。同樣,長(cháng)度值也可以是一個(gè) cell 列表或者為空。
    由于地址和長(cháng)度字段都是可變大小的變量,那么父節點(diǎn)的#address-cells#size-cells 屬性就用來(lái)聲明各個(gè)字段的cell的數量。換句話(huà)說(shuō),正確解釋一個(gè)reg屬性需要用到父節點(diǎn)的#address-cells#size-cells的值。


更多幫助
銷(xiāo)售郵箱:www.tronlong.com
技術(shù)論壇:www.51ele.net
線(xiàn)上商城:https://tronlong.taobao.com
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页