Linux kernel 基于BBB-DT的方法

Linux kernel 基于BBB-DT的方法,linux-kernel,linux-device-driver,u-boot,Linux Kernel,Linux Device Driver,U Boot,我已经使用平台设备模型成功地为我的自定义协议实现了基于GPIO的驱动程序。 我想用设备树方法升级它。因此,对于初学者来说,我有一个beaglebone黑色,我已经使用在uboot控制台消息显示期间启用并验证的设备树配置交叉编译了内核 正在验证校验和。。。嗯 在80f80000处展平设备树blob 在0x80f80000处使用fdt blob引导 XIP内核映像。。。嗯 嗯 在80f80000处使用设备树,结束80f899de 我将我的条目添加到board公共文件节点名称my_gpio{compa

我已经使用平台设备模型成功地为我的自定义协议实现了基于GPIO的驱动程序。 我想用设备树方法升级它。因此,对于初学者来说,我有一个beaglebone黑色,我已经使用在uboot控制台消息显示期间启用并验证的设备树配置交叉编译了内核

正在验证校验和。。。嗯

在80f80000处展平设备树blob

在0x80f80000处使用fdt blob引导

XIP内核映像。。。嗯

在80f80000处使用设备树,结束80f899de

我将我的条目添加到board公共文件节点名称my_gpio{compatible=“my_gpio”}

然后我构建了一个普通的过程,让uImages-dtbs-LOADADDR

最后我用dtb得到了我的uImage。 在我的驱动程序中,我使用了与.name属性相同的字符串“mygpio”

但是我的探测方法没有被调用,这是因为它没有找到任何兼容的设备

任何有帮助的建议都会很好

在我的驱动程序中:

静态结构平台\u驱动程序d\u驱动程序={
.司机={
.name=“d_gpio”,
.of_match_table=d_of_match,
},
.probe=D_probe,
.remove=D_remove

};
您需要准备一个类型为
struct of_device_id
的结构,并在其上使用
compatible
属性。 尝试以下方式:

static struct of_device_id my_devs[] = {
    { .compatible = "my_gpio" }, /* This should be the name given in the device tree */
    { }
};
MODULE_DEVICE_TABLE(of, my_devs);
现在构建
平台驱动程序
结构,并将上表传递到其中:

static struct platform_driver my_plat_driver = {
    .probe = my_probe,
    .remove = my_remove,
    .driver = {
        .name = "my_gpio_driver",    /* This name is for sysfs, not for matching */
        .of_match_table = my_devs    /* This turns out as the matching logic */   
    }
};

可能是您的董事会支持人员不理解该协议,因此需要在平台代码实际处理该协议的位置放置一个节点。请仔细阅读下面的讨论,并在dtb中添加一个“虚拟设备”节点,希望对您有所帮助


您好,我已经完成了上述工作……编写了我的探测方法,该方法调用parse_dt,我在其中检查这些字段,但探测本身没有被调用。是否还需要模块设备表?由于BB Black和3.8内核文档中没有给出。MODULE_DEVICE_表是可选的。请编辑您的问题并添加完整DTS文件(定义自定义节点的位置)的pastebin链接。可能只是节点位于错误的父节点下,或者其格式错误。还添加源代码部分的pastebin链接,其中设置了
struct platform_驱动程序
(设置了
。\u match_table
,以及引用的表)。@eepp编辑了该问题。请看一看,似乎是对的。我不明白为什么不调用探测函数。你确定你正在使用更新的DTB和驱动程序,并且你的驱动程序已经加载了吗?@eepp是的,我正在将设备树blob附加到内核映像中…在一个make命令中,内部调用了cat DTB>image。。此外,init正在dmesg中执行。我将稍后尝试您正在执行的操作,看看是否发现任何错误。通常,当OCP缺少
状态
属性(您的案例)或
状态
“OK”
时,OCP下的所有内容都会自动添加为平台设备。