device tree source(dts)
.dts도 c 언어처럼 포함할 수 있습니다.dtsi 파일, 이거.dtsi 파일은 마치.h 파일과 같습니다.거의 모든arm칩에skeleton이 포함되어 있다.dtsi
root 노드 "/", 하위 노드 "cpu"와 "external-bus"
[label:] node-name[@unit-address] {
[properties definitions]
[child nodes]
}
label: dts에서 어떤 노드를 인용하려면 전체 경로를 써야 합니다
각 노드에는 다음과 같은 속성이 있습니다.
(1) text string 또는 text list 속성 표시 방법: devicetype = "memory"
(2) u32의 속성 표시 방법: #size-cells = <1>
(3)binary-data 속성 표시 방법:binary-property = [0x10 0x20 0x30 0x40]
설명: #은 숫자의 뜻을 나타낸다
Basic Data Format
dts가 어떻게 사용되는지 설명하기 위해서, 우리는 견본기를 사용하여 한 걸음 한 걸음 dst를 작성한다
1 ARM Cortex-A9 32 ; :"Acme" :"Coyote's Revenge":
local bus
x2 ( 0x101F1000 0x101F2000)
GPIO ( 0x101F3000)
SPI ( 0x10170000)
( 0x10140000)
external bus ;
SMC SMC91111 Ethernet ( 0x10100000)
I2C ( 0x10160000)
Maxim DS1338 (I2C 0x58)
64MB NOR Flash ( 0x30000000)
1 Initial structure
/ {
compatible = "acme,coyotes-revenge";
};
"compatible"는 시스템의 이름이고 형식은 "메이커, 모델"입니다. OS는compatible에 따라machine을 식별하기 때문에 정확성을 확보해야 합니다.
2 CPUs
/ {
compatible = "acme,coyotes-revenge";
cpus {
cpu@0 {
compatible = "arm,cortex-a9";
};
cpu@1 {
compatible = "arm,cortex-a9";
};
};
};
루트 노드 아래에 cpus 서브 노드를 하나 더 추가합니다. cpu 서브 노드의compatible는string이고 형식은 '제조업체, 모델' 입니다.루트 노드의compatible와 같습니다.
3 Node Names
노드의 이름 지정 사양: <이름>[@<위젯 주소>] 여기서 이름은 31자 이하의 ascii 문자열(<>는 필수 []이며 필수 옵션이 아닙니다.이름은 주로 장치 유형을 설명하는데, 예를 들어 3com 이더넷 어댑터에 대응하는 결점 이름은 3com이 아니라 ethernet이어야 한다
일반적으로 위젯 주소는 장치의 주 주소를 설명하는 데 쓰인다.만약 결점에 기술된 장치에 주소가 있다면 @unit-address를 주어야 합니다.여러 개의 같은 종류의 장치 결점의name는 위젯 주소가 다르면 됩니다. 예를 들어cpu@0、cpu@1.
장치의 위젯 주소도 결점의reg 속성에 자주 나타납니다
4 Devices
모든 장치가 dts에서 하나의 노드에 대응하고, 아래에서 우리는 모든 장치를 트리의 노드로 채울 것이다
/ {
compatible = "acme,coyotes-revenge";
cpus {
cpu@0 {
compatible = "arm,cortex-a9";
};
cpu@1 {
compatible = "arm,cortex-a9";
};
};
serial@101F0000 {
compatible = "arm,pl011";
};
serial@101F2000 {
compatible = "arm,pl011";
};
gpio@101F3000 {
compatible = "arm,pl061";
};
interrupt-controller@10140000 {
compatible = "arm,pl190";
};
spi@10115000 {
compatible = "arm,pl022";
};
external-bus {
ethernet@0,0 {
compatible = "smc,smc91c111";
};
i2c@1,0 {
compatible = "acme,a1234-i2c-bus";
rtc@58 {
compatible = "maxim,ds1338";
};
};
flash@2,0 {
compatible = "samsung,k8f1315ebm", "cfi-flash";
};
};
};
dts에서 차원 구조는 하드웨어의 종속 관계를 반영했다. 현재 이 dts에는 장치 간의 연결 정보가 없고 이후에 추가될 것이다. 본 dts에서 주의해야 할 것은 다음과 같다.
(1) 모든 장치 노드에compatible(2)flash는 두 개의 문자열을 사용하고, 다음 절(3) 이름은 장치 형식이지 특정한 번호가 아니다.
5 Understanding the compatible Property
compatible는 OS가 하드웨어와 드라이브를 연결하는 관건이다. flash의 첫 번째string은 지원하는 정확한 장치이고 두 번째 문자열은 호환되는 장치를 의미한다.
How Addressing Works
주소 지정 가능한 장치는 다음과 같은 정보를 사용하여 Device Tree에서 주소 정보를 인코딩합니다.
reg
#address-cells
#size-cells
reg의 조직 형식은reg =
address는 1개 이상의 셀(즉 32비트의 정형)이고, length는 0 또는 여러 셀(#size-cells = 0)이다.address와length 필드는 가변 길이이며, 부결점의 #address-cells와 #size-cells는 각각 자결점의reg 속성의address와length 필드의 길이를 결정한다.
다음에 cpu에서reg 속성을 추가합니다
CPU addressing
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = "arm,cortex-a9";
reg = <0>;
};
cpu@1 {
compatible = "arm,cortex-a9";
reg = <1>;
};
};
address는 1개의cell로 length를 표시하고 0개의cell로 표시하기 때문에reg는
Memory Mapped Devices
/ {
#address-cells = <1>;
#size-cells = <1>;
...
serial@101f0000 {
compatible = "arm,pl011";
reg = <0x101f0000 0x1000 >;
};
serial@101f2000 {
compatible = "arm,pl011";
reg = <0x101f2000 0x1000 >;
};
gpio@101f3000 {
compatible = "arm,pl061";
reg = <0x101f3000 0x1000
0x101f4000 0x0010>;
};
interrupt-controller@10140000 {
compatible = "arm,pl190";
reg = <0x10140000 0x1000 >;
};
spi@10115000 {
compatible = "arm,pl022";
reg = <0x10115000 0x1000 >;
};
...
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.