デバイスツリーの基本的な概要


1.デバイスツリー


デバイスツリー(デバイスツリー)は、ハードウェアのデータ構造について説明します。
役割:デバイス情報を提供します。
時間:オペレーティングシステムのブートデバイス初期化ステージ、情報データのハードウェア構成を検出し、オペレーティングシステムに渡された場合。
デバイスツリーのソースファイル(xxxx.dts)DTCのデバイスツリーコンパイルされたバイナリファイル(xxxx.dtb)


2.基本的な構文木機器


装置の基本的な単位は、デバイスツリーのファイルのみ1つのルートノードを持つことができ、各ノードは唯一の親ノードを有し、ルートノード以外は、ツリー構造のノードに編成されているツリー(ノード)のノードです。各ノードは、ノードに記載のキーと値のペア(プロパティ/値)の数の多くの特性を含んでいます。各ノードは、ノード名で識別されます。(Linuxのファイルシステムと同様に)

/{                                            //根节点
	Property = value;                         //描述信息
	<name>[@<unit-address>]{                  //子节点
		Property = value                      //描述信息
	};
	……
};

3.ノード名の命名規則


フォーマットは、ノードの名前です[@]。ノードはregのプロパティでない場合は、ノード名は、@ユニットアドレスを含めることはできません。特定のフォーマット及びユニットアドレスは、デバイスバスがハングアップするためにその上に関連しています。例えば、このような単位アドレスレジスタアドレスであるイーサネットコントローラなど、特定のデバイスに1を追加するために、ゼロからアドレス指定され、CPU、ユニットアドレス。ルートノードの名前が決定され、それがなければなりません「/。」

reg = <0x10001000 0x24 0x20001000 0x24>;

4.ノードの別名


デバイスは、別名ノードによってその内容を参照することができ、他のノードの内容を使用してもよいです。参照の目的は、結合二つのノードの内容を、部品交換、または使用部品であってもよいです。

/{                                            //根节点
	demo:demo0@0x48000000{
		compatible = “xxx”;
	};
	……
};

ノード名:demo0 @ 0x48000000
ノードのパス:/ demo0 @ 0x48000000
ノード別名:デモ
デモ== / demo0 80000000 @

参考:

1&demo{
	Reg = <0x10001000 4 0x20001000 4>
	……
};
2./{
	reference-node{
		property = <&demo>;
		……
	};
};

合わせたノードコンテンツ


情報ハードウェアデバイスの一部が変更されませんが、情報の他の部分は変更される可能性があり、マージされたノードのコンテンツがありました。すなわち:優れた最初のノードの準備には、属性値の一部のみが記載されている、ユーザ属性値の部分を加えます。平行経路において、同じ「2」ノードのノード名は、実際のノードにマージします。(C ++での名前空間と同様に)


6.デバイスツリーのキーと値のペア関連する構文


[1]。列情報

compatible = "随风,飘落";

[2]。32ビット符号なし整数配列

word-array = <32 45 67 89>; 
reg = <0x10001000 0x24 0x20001000 0x24>;

[3]バイナリアレイ

bi-array = [0c 20 11 24]; 
mac = [FE 02 11 CB 40 58];

[4]文字の配列

string-list = "aaa" , "bbb" , "ccc";

7.デフォルト属性の意味


[1]デバイスツリー文法は、デバイス情報およびドライバ分離フレームは、ノードカーネルの初期化、デバイスが自動的に対応する分析情報を生成する際に検索することが可能である場合に意味属性は、一般的な仕様のノード装置を有している、定義されています。
共通の特性は次のとおり互換、アドレスアドレス、割り込み割り込み
単純な例:
互換性の性質:整合器とノードデバイスドライバのプロパティ、ルールは、テーブル駆動装置互換IDフィールド(列)の値、およびデバイスツリーであります正確に互換性のあるノード装置属性値。互換=「ベンダ名、デバイス名」;

struct platform_driver {
	int (*probe)(struct platform_device *);
	int (*remove)(struct platform_device *);
	struct device_driver driver;
	const struct platform_device_id *id_table;
};
struct device_driver {
	const char		*name;
	struct bus_type		*bus;
	struct module		*owner;
	const struct of_device_id	*of_match_table;
};
struct of_device_id
{
	char	compatible[128];      //用来和设备树中的compatible属性进行匹配
};

ARM Linuxのカーネルは定義された[2]。、汎用デバイスクラス属性は、カーネルを意味するデフォルトが自動的に解決対応するデバイス情報を生成することができない持っていますが、コアはそれぞれの機能の直接抽出することにより調製されました。
共通の属性は以下のとおりです。MACアドレス、GPIO、クロック...

GPIO特性:
GPIO-コントローラ:説明ノードコントローラGPIOの説明である
。#GPIO細胞:のノード用いて説明属性GPIO細胞コンテンツ
属性名= <ノードエイリアス&GPIO GPIO参照番号動作モード>;
EG:のGPIO = <&gpx0 1 1>。

サプリメント

デバイスノード構造記述関連情報

struct device_node {
	const char *name;			//名字
	const char *type;			//类型
	char	*full_name;			//节点全名
}
发布了3 篇原创文章 · 获赞 22 · 访问量 1157

おすすめ

転載: blog.csdn.net/xjpyinxll/article/details/104547109