我编写了一个平台驱动程序(虚拟驱动程序),想知道如何使用设备树或“在哪里添加设备节点?”在设备树中,以便我的驱动程序在启动时自动加载并自动调用prob()。并且,
我不知道设备树在哪个目录中找到要绑定的特定驱动程序?
在期待中感谢!!
答案 0 :(得分:0)
为此,您需要使用包括:
#include <linux/of.h>
#include <linux/of_device.h>
在您的设备声明中(请注意,我正在使用<you thing here>
来更改设备名称):
#ifdef CONFIG_OF
static const struct of_device_id <your_device_name_here>_dt_match_table[] = {
{ .compatible = "<your compatible string here>" },
{ },
};
MODULE_DEVICE_TABLE(of, <your_device_name_here>_dt_match_table);
#endif
static struct platform_driver <your_device_name_here>_driver = {
.probe = <your_device_name_here>_probe,
.remove = <your_device_name_here>_remove,
.driver = {
.name = "<your_device_name_here>",
.of_match_table = of_match_ptr(clap_sensor_dt_match_table),
},
};
module_platform_driver(<your_device_name_here>_driver);
在您的驱动程序中,您可以在设备树中编写以下内容:
<your_device_name_here> {
compatible = "<your compatible string here>";
pinctrl-names = "default";
pinctrl-0 = <&your_pins_pinctrl>;
label = "trigger";
trigger-gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
};
设备树文件和设备驱动程序文件中的兼容属性必须相同,以便内核可以将设备树中其节点的信息与您的驱动程序进行匹配。
记住设备树仅用于描述硬件,请勿将其用于存储软件变量或其他软件资料。
我建议您学习一些有关设备树pinctrl和gpio的知识。 Raspberry基础具有一些用于设备树覆盖的材料: https://www.raspberrypi.org/documentation/configuration/device-tree.md