【问题标题】:what is the use of "of_match_ptr()" in device drivers设备驱动程序中“of_match_ptr()”的用途是什么
【发布时间】:2021-03-28 19:15:55
【问题描述】:

在设备驱动工作期间,我了解到of_match_table() 是指向兼容性字符串的元组。

但是,我找不到of_match_ptr() 的重要性。

【问题讨论】:

  • 这不重要。稍后我可能会给出答案,但在 99% 的情况下是不需要的。

标签: c linux linux-device-driver device device-tree


【解决方案1】:

of_match_ptr()include/linux/of.h中定义的预处理宏:

#ifdef CONFIG_OF
#define of_match_ptr(_ptr)    (_ptr)
#else /* CONFIG_OF */
#define of_match_ptr(_ptr)    NULL
#endif /* CONFIG_OF */

当内核编译时使用设备树和开放固件支持,即CONFIG_OF=y,它将导致传递的指针。否则它将产生 NULL。

使用宏而不是直接传递指针,是为了保护of_match_table成员。有总线驱动程序会检查 of_match_table 的 NULL 以不取消引用无效指针。

但是,许多驱动程序是在树内编译的,其对应的 Kconfig 中定义了一个编译开关,该开关已经依赖于CONFIG_OF。例如模拟设备ADV748X视频解码器驱动编译开关has this dependency

config VIDEO_ADV748X
    tristate "Analog Devices ADV748x decoder"
    depends on VIDEO_V4L2 && I2C
    depends on OF
    select MEDIA_CONTROLLER
    select VIDEO_V4L2_SUBDEV_API
    select REGMAP_I2C
    select V4L2_FWNODE
    help
      V4L2 subdevice driver for the Analog Devices
      ADV7481 and ADV7482 HDMI/Analog video decoders.

      To compile this driver as a module, choose M here: the
      module will be called adv748x.

并省略drivers/media/i2c/adv748x/adv748x-core.c中的宏:

static struct i2c_driver adv748x_driver = {
    .driver = {
        .name = "adv748x",
        .of_match_table = adv748x_of_table,
        .pm = &adv748x_pm_ops,
    },
    .probe_new = adv748x_probe,
    .remove = adv748x_remove,
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多