struct of_device_id is not terminated with a NULL entry

编译Linux kernel时,报这个错误:

ERROR: linux-xlnx-5.10+git999-r0 do_compile_kernelmodules: oe_runmake failed
ERROR: linux-xlnx-5.10+git999-r0 do_compile_kernelmodules: Execution of '/home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile_kernelmodules.253004' failed with exit code 1:
make: Entering directory '/home/workspace/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/linux-xlnx-5.10+git999'
  GEN     Makefile
  CALL    /home/workspace/silita/petalinux/kernel/xilinx-kernel-source-5.10-v2021.2/scripts/atomic/check-atomics.sh
  CALL    /home/workspace/silita/petalinux/kernel/xilinx-kernel-source-5.10-v2021.2/scripts/checksyscalls.sh
  CC [M]  drivers/gpu/drm/bridge/solomon-ssd2828qn4.o
  MODPOST Module.symvers
drivers/gpu/drm/bridge/solomon-ssd2828qn4: struct of_device_id is 200 bytes.  The last of 1 is:
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x73 0x6f 0x6c 0x6f 0x6d 0x6f 0x6e 0x2c 0x73 0x73 0x64 0x32 0x38 0x32 0x38 0x71 0x6e 0x34 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
FATAL: modpost: drivers/gpu/drm/bridge/solomon-ssd2828qn4: struct of_device_id is not terminated with a NULL entry!
make[2]: *** [/home/workspace/silita/petalinux/kernel/xilinx-kernel-source-5.10-v2021.2/scripts/Makefile.modpost:111: Module.symvers] Error 1
make[1]: *** [/home/workspace/silita/petalinux/kernel/xilinx-kernel-source-5.10-v2021.2/Makefile:1396: modules] Error 2
make: *** [/home/workspace/silita/petalinux/kernel/xilinx-kernel-source-5.10-v2021.2/Makefile:185: __sub-make] Error 2
make: Leaving directory '/home/workspace/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/linux-xlnx-5.10+git999'
WARNING: /home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile_kernelmodules.253004:230 exit 1 from 'exit 1'
WARNING: Backtrace (BB generated script): 
        #1: bbfatal_log, /home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile_kernelmodules.253004, line 230
        #2: die, /home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile_kernelmodules.253004, line 214
        #3: oe_runmake, /home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile_kernelmodules.253004, line 209
        #4: do_compile_kernelmodules, /home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile_kernelmodules.253004, line 170
        #5: main, /home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/run.do_compile_kernelmodules.253004, line 233

Backtrace (metadata-relative locations):
        #1: bbfatal_log, /home/silita/silita/petalinux/apps/zu5ev_evk/components/yocto/layers/core/meta/classes/logging.bbclass, line 72
        #2: die, /home/silita/silita/petalinux/apps/zu5ev_evk/components/yocto/layers/core/meta/classes/base.bbclass, line 56
        #3: oe_runmake, /home/silita/silita/petalinux/apps/zu5ev_evk/components/yocto/layers/core/meta/classes/base.bbclass, line 65
        #4: do_compile_kernelmodules, /home/silita/silita/petalinux/apps/zu5ev_evk/components/yocto/layers/meta-petalinux/oe-core/meta/classes/kernel.bbclass, line 377
ERROR: Logfile of failure stored in: /home/silita/silita/petalinux/apps/zu5ev_evk/build/tmp/work/zynqmp_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/temp/log.do_compile_kernelmodules.253004

这个错误的关键信息是:FATAL: modpost: drivers/gpu/drm/bridge/solomon-ssd2828qn4: struct of_device_id is not terminated with a NULL entry!

根据错误提示,查询代码,原来是ssd2828 linux驱动代码ssd2828qn4_of_match结构导致的问题。

错误代码是:

static const struct of_device_id ssd2828qn4_of_match[] = {
    {
        .compatible = "solomon,ssd2828qn4",
        .data = NULL,
    },
};

正确代码应该是:

static const struct of_device_id ssd2828qn4_of_match[] = {
    {
        .compatible = "solomon,ssd2828qn4",
        .data = NULL,
    },
    {}
};

需要多加一个{}。否则就会报:struct of_device_id is not terminated with a NULL entry!的错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`of_device_id`是Linux内核中用于匹配设备树节点和驱动程序的结构体。该结构体包含了设备树节点的一些属性信息,如设备类型、厂商信息、设备名称、设备ID等,以及一个与之对应的驱动程序名称或ID,用于在设备树中查找匹配的节点。 以下是`of_device_id`结构体的定义: ```c struct of_device_id { char name[32]; // 设备名称 char type[32]; // 设备类型 const void *data; // 与设备匹配的驱动程序信息 }; ``` `of_device_id`结构体通常作为驱动程序的一部分,在驱动程序初始化时被使用。驱动程序会调用`of_match_device()`函数来根据`of_device_id`结构体中的信息,在设备树中查找匹配的节点,并将其与驱动程序绑定。在匹配成功后,驱动程序可以通过`of_device`结构体获得这个节点的一些属性信息。 例如,以下是一个`of_device_id`结构体的示例: ```c static const struct of_device_id my_driver_of_match[] = { { .compatible = "my-device" }, { /* end of list */ }, }; ``` 在驱动程序初始化时,可以使用`MODULE_DEVICE_TABLE(of, my_driver_of_match)`宏将该`of_device_id`结构体与驱动程序关联起来。然后,内核会自动在设备树中查找`compatible`属性为`"my-device"`的节点,并将其与驱动程序绑定。 总之,`of_device_id`结构体是Linux内核中用于匹配设备树节点和驱动程序的重要机制,它可以让驱动程序自动识别和绑定设备树节点,并简化驱动程序的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江公望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值