Linux DTS (Sumber Pokok Peranti) ialah struktur data yang menerangkan maklumat perkakasan Ia digunakan terutamanya untuk menerangkan maklumat pelbagai peranti perkakasan dalam sistem terbenam, termasuk alamat peranti, gangguan, konfigurasi daftar dan pemacu peranti. Dalam kernel Linux, fail DTS biasanya digunakan untuk menerangkan maklumat perkakasan peranti onboard supaya sistem pengendalian boleh mengenal pasti dan menggunakan peranti perkakasan dengan betul.
Fail DTS biasa adalah seperti berikut:
/dts-v1/; #include <imx6qdl-pico.dtsi> #include <imx6qdl-pico-m4.dtsi> / { compatible = "fsl,imx6q-pico", "fsl,imx6q"; model = "Boundary Devices i.MX6 Quad SABRE Lite"; memory { device_type = "memory"; reg = <0x10000000 0x40000000>; }; chosen { compatible = "brcm,bcm2835"; uart_boot = <&uart1>; }; aliases { serial0 = &uart1; }; soc { compatible = "simple-bus"; #address-cells = <1>; #size-cells = <1>; ranges; gpio: gpio@0209c000 { compatible = "fsl,imx6ul-gpio"; reg = <0x0209c000 0x1000>; interrupts = <GPIOn IRQn>; gpio-controller; #gpio-cells = <2>; }; }; uart1: serial@02020000 { compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; reg = <0x02020000 0x40000>; interrupts = <78>; clocks = <&clks 82>; clock-names = "ipg", "per"; status = "okay"; }; sound { compatible = "fsl,imx6-sai"; model = "imx6-sai"; status = "okay"; /* SSI1 */ ssi@021d8000 { compatible = "fsl,imx6-sai"; reg = <0x021d8000 0x4000>; interrupts = <0 125 0>; clocks = <&clks 2>; dmas = <&sdma 9 11 0>, <&sdma 10 11 0>, <&sdma 11 11 0>; dma-names = "tx", "rx", "mclk"; status = "okay"; }; }; };
/dts-v1/
: 指定版本为DTS版本1,描述DTS文件的版本信息。#include <imx6qdl-pico.dtsi>
: 包含其他DTS文件,可复用其定义。/
: 根节点,描述整个设备树结构。compatible
: 指定设备兼容性信息。model
: 设备型号信息。memory
: 描述内存信息。chosen
: 描述一些选项信息。aliases
: 定义设备别名。soc
: 描述SoC相关信息。gpio
: 描述GPIO控制器。uart1
: 描述UART1硬件信息。sound
: 描述声音设备信息。arch/arm/boot/dts/
目录下找到对应平台的DTS文件(如imx6qdl-pico.dtsi
),根据实际硬件信息编辑DTS文件。编译DTS文件:在Linux内核源码根目录下执行以下命令编译DTS文件:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
.dtb
文件(设备树二进制文件)替换到目标设备的引导分区。#include <linux/module.h> #include <linux/of_device.h> #include <linux/platform_device.h> static int my_driver_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; if (!np) { dev_err(&pdev->dev, "No device tree node found "); return -ENODEV; } // 解析设备树节点信息 u32 reg; if (of_property_read_u32(np, "reg", ®)) { dev_err(&pdev->dev, "Failed to read 'reg' property "); return -EINVAL; } dev_info(&pdev->dev, "Got 'reg' property: %u ", reg); return 0; } static const struct of_device_id my_driver_of_match[] = { { .compatible = "my_driver", }, { }, }; MODULE_DEVICE_TABLE(of, my_driver_of_match); static struct platform_driver my_driver = { .probe = my_driver_probe, .driver = { .name = "my_driver", .of_match_table = my_driver_of_match, .owner = THIS_MODULE, } }; module_platform_driver(my_driver); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Author Name"); MODULE_DESCRIPTION("Sample driver using Device Tree");
以上是一个简单的Linux设备驱动程序示例,通过解析设备树节点中的属性来配置硬件设备。在probe
函数中,首先获取设备树节点,然后读取其中的reg
属性并输出。在of_device_id
#include <imx6qdl-pico.dtsi>
: Mengandungi fail DTS lain dan boleh menggunakan semula takrifannya.
gpio
: Menerangkan pengawal GPIO. 🎜uart1
: Menghuraikan maklumat perkakasan UART1. 🎜arch/arm/boot/dts/
dalam Fail kod sumber kernel Linux (seperti imx6qdl-pico.dtsi
), edit fail DTS mengikut maklumat perkakasan sebenar. 🎜🎜Kompilasi fail DTS: Jalankan arahan berikut dalam direktori akar sumber kernel Linux untuk menyusun fail DTS: 🎜rrreee🎜Ganti fail binari pepohon peranti: Gantikan .dtb yang dihasilkan
fail (perduaan pokok peranti) ke partition but peranti sasaran. 🎜Gunakan pepohon peranti: Apabila kernel Linux bermula, fail pepohon peranti akan dimuatkan untuk menerangkan maklumat perkakasan, untuk mengenal pasti dan mengkonfigurasi peranti perkakasan dengan betul. probe
, mula-mula dapatkan nod pepohon peranti, kemudian baca atribut reg
dan keluarkannya. Maklumat keserasian nod pepohon peranti yang perlu dipadankan diisytiharkan dalam of_device_id
supaya pemandu boleh memadankan peranti dengan betul. 🎜Atas ialah kandungan terperinci Apakah Linux DTS? bagaimana nak guna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!