#include <linux/init.h>
#include <linux/module.h>
#include <linux/of.h>
static int of_example_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
const char *string;
int ret, len;
u32 value;
// 获取并打印 "example,string-property" 字符串属性
ret = of_property_read_string(np, "example,string-property", &string);
if (ret) {
dev_err(&pdev->dev, "Could not read string property\n");
return ret;
}
dev_info(&pdev->dev, "String property: %s\n", string);
// 获取并打印 "example,int-property" 整数属性
ret = of_property_read_u32(np, "example,int-property", &value);
if (ret) {
dev_err(&pdev->dev, "Could not read int property\n");
return ret;
}
dev_info(&pdev->dev, "Integer property: %d\n", value);
// 获取并打印 "example,array-property" 数组属性
ret = of_property_read_u32_array(np, "example,array-property", &value, 1);
if (ret < 0) {
dev_err(&pdev->dev, "Could not read array property\n");
return ret;
}
dev_info(&pdev->dev, "Array property: %d\n", value);
return 0;
}
static const struct of_device_id of_example_match[] = {
{ .compatible = "example,device" },
{},
};
MODULE_DEVICE_TABLE(of, of_example_match);
static struct platform_driver of_example_driver = {
.probe = of_example_probe,
.driver = {
.name = "of_example",
.of_match_table = of_example_match,
},
};
module_platform_driver(of_example_driver);
这段代码展示了如何在Linux内核驱动中使用设备树属性。它首先通过of_property_read_string
获取字符串属性,然后通过of_property_read_u32
获取整数属性,并且使用of_property_read_u32_array
获取数组属性。这些属性的名称和类型都是根据设备树中定义的来获取的。这个例子是基于平台总线,但是这些API同样适用于其他总线(如I2C, SPI等)。