Linux DTS (Device Tree Source) is a data structure that describes hardware information. It is mainly used to describe the information of each hardware device in an embedded system, including device address, interrupt, Register configuration and device driver, etc. In the Linux kernel, DTS files are usually used to describe the hardware information of onboard devices so that the operating system can correctly identify and use the hardware devices.
A typical DTS file is as follows:
/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/
: Specifies the version as DTS version 1, describing the version information of the DTS file. #include <imx6qdl-pico.dtsi>
: Includes other DTS files and can reuse their definitions. /
: The root node describes the entire device tree structure. compatible
: Specify device compatibility information. model
: Device model information. memory
: Describes memory information. chosen
: Describe some option information. aliases
: Define device aliases. soc
: Describe SoC related information. gpio
: Describes the GPIO controller. uart1
: Describes UART1 hardware information. sound
: Describes sound device information. arch/arm/boot/dts/
directory in the Linux kernel source code The DTS file of the platform (such as imx6qdl-pico.dtsi
), edit the DTS file based on the actual hardware information. Compile the DTS file: Execute the following command in the Linux kernel source code root directory to compile the DTS file:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
. dtb
file (device tree binary file) to the boot partition of the target device. #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");
The above is a simple Linux device driver example that configures hardware devices by parsing properties in device tree nodes. In the probe
function, first obtain the device tree node, then read the reg
attribute and output it. The compatibility information of the device tree nodes that need to be matched is declared in of_device_id
so that the driver can correctly match the device.
The above is the detailed content of What is Linux DTS? how to use?. For more information, please follow other related articles on the PHP Chinese website!