組み込み Linux システムの開発において、デバイス ツリー (デバイス ツリー、DTS と呼ばれる) は、ハードウェア デバイスとそのシステム内の接続関係と属性のデータ構造を説明します。デバイス ツリーを使用すると、カーネルを変更せずに、Linux カーネルをさまざまなハードウェア プラットフォーム上で柔軟に実行できます。この記事では、Linux DTS の機能と使用法を紹介し、読者の理解を深めるために具体的なコード例を示します。
デバイス ツリーの主な機能は、ハードウェア タイプ、アドレス、割り込み番号などを含む (ただしこれらに限定されない) ハードウェア デバイスの情報を記述することです。 、GPIO ピンなど、これらのハードウェア デバイス間の接続関係を規定します。 Linux カーネルは、デバイス ツリーを通じて、起動プロセス中にハードウェア デバイスとその属性を動的に識別できるため、ハードウェア リソースが正しく構成され、カーネルがハードウェア デバイスとスムーズに通信できるようになります。
また、デバイス ツリーでは、デバイス ツリー フラグメント (*.dtsi ファイル) を記述することでハードウェア モジュールの再利用も実現でき、コードの保守性と再利用性が向上します。さまざまなデバイス ツリー フラグメントを組み合わせることで、ハードウェア リソースを柔軟に構成して、さまざまなハードウェア プラットフォームのカスタマイズを容易にすることができます。
デバイス ツリーを使用する場合は、次の重要な概念を理解する必要があります:
デバイス ツリー ソース ファイルの基本構造は、ノードとプロパティで構成されます。ノードはハードウェアデバイスを記述するために使用され、属性はノードの属性情報を記述するために使用されます。以下は、単純なデバイス ツリー ソース ファイルの例です。
/dts-v1/; #include <dt-bindings/gpio/gpio.h> / { compatible = "myboard, mydevice"; mydevice { compatible = "mydevice"; reg = <0x100000 0x1000>; interrupts = <0 2>; gpio = <&gpio1 10 GPIO_ACTIVE_LOW>; }; };
上記の例では、mydevice
は、デバイスの互換性属性、レジスタ アドレス、割り込み番号を含むハードウェア デバイスのノードを表します。 . および GPIO ピン情報。
以下では、LED ドライバーを例として、デバイス ツリーを使用してハードウェア デバイスを記述し、デバイス ドライバーにバインドする方法を示します。 。
まず、LED デバイス ツリー ソース ファイル led.dts
を作成し、次の内容を追加します:
/dts-v1/; / { compatible = "myboard, myled"; myled { compatible = "myled"; reg = <0x200000 0x1000>; gpio = <&gpio1 20 GPIO_ACTIVE_LOW>; }; };
次に、LED デバイス ドライバーled_driver.c
を書き込みます。サンプル コードは次のとおりです。
#include <linux/module.h> #include <linux/platform_device.h> static struct platform_device led_device = { .name = "myled", .id = -1, }; static int __init led_driver_init(void) { platform_device_register(&led_device); pr_info("LED driver initialized "); return 0; } static void __exit led_driver_exit(void) { platform_device_unregister(&led_device); pr_info("LED driver exited "); } module_init(led_driver_init); module_exit(led_driver_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Author Name"); MODULE_DESCRIPTION("LED Driver");
ドライバーの Makefile にコンパイル ルールを追加し、カーネルをコンパイルしてデバイス ツリー バイナリ ファイル led.dtb
:
obj-m += led_driver.o all: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C /path/to/kernel M=$(PWD) modules dtc -I dts -O dtb -o led.dtb led.dts
led.dtb:
# cp led.dtb /boot/ # echo "dtb=led.dtb" >> /boot/uEnv.txt
# insmod led_driver.ko
以上がLinux DTS の役割と使用法を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。