我正在为 beaglebone 开发一个简单的平台驱动程序(但目前在运行 Ubuntu 的虚拟机上运行),该驱动程序使用设备树,但似乎没有调用探测函数。
根据我的理解,为了调用探测器,您需要具有匹配的compatible
值(在驱动程序和设备树文件中),并注册平台驱动程序。我可能错过了什么?
struct of_device_id dt_match[] =
{
{.compatible = "A1x"},
{.compatible = "B2x"}
};
struct platform_driver platform_driver_struct =
{
.probe = platform_driver_probe,
.remove = platform_driver_remove,
.id_table = pcdevs_ids,
.driver = {
.name = "pseudo-char-device",
.of_match_table = dt_match
}
};
static int __init platform_driver_init(void)
{
platform_driver_register(&platform_driver_struct);
return 0;
}
// dtsi file
/ {
pcd-dev1 {
compatible = "A1x";
org,size=<512>;
org,perm=<0x15>;
};
pcd-dev2 {
compatible = "B2x";
org,size=<256>;
org,perm=<0x11>;
};
};
然后我将上面的 DTSI 文件包含在am335x-boneblack.dts
.然后使用创建二进制文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am33x-boneblack.dtb
目录下的设备树文件不都是arch/arm/boot/dts
内核使用的,根据字符串是否compatible
匹配来调用各自的probe函数吗?