LINUX I2C驱动偶尔出现段错误原因之一

版权声明:本文为博主原创文章,转载请注明本博地址,谢谢! https://blog.csdn.net/u014443578/article/details/76790650

LINUX I2C驱动偶尔出现段错误原因之一

第一篇博客,来个好的开端。
在自己写 触摸屏 I2C 驱动程序(Linux 3.14)的时候,加载的时候会偶尔出现段错误,
我们都知道在加载驱动的时候会调用 i2c_register_Driver最终找到代码,通过 OOPS 代码回溯知道其最终会调用 of_driver_match_device 如下

static inline int of_driver_match_device(struct device *dev,
                     const struct device_driver *drv)
{
    return of_match_device(drv->of_match_table, dev) != NULL;
}

const struct of_device_id *of_match_device(const struct of_device_id *matches,
                       const struct device *dev)
{
    if ((!matches) || (!dev->of_node))
        return NULL;
    return of_match_node(matches, dev->of_node);
}

match = __of_match_node(matches, node);

for (; matches->name[0] || matches->type[0] || matches->compatible[0]; matches++) {

}

static const struct of_device_id gt818_of_match[] = {
    { .compatible = "fs4412,gt818", },
        {},
};

.of_match_table = gt818_of_match,

驱动的 of_match_table 传入,加载时,进行匹配,如果没有空{} ;会造成越界,段错误;
所以,一开始对于 of_device_id 最后会有 {},感觉多余,但是现在来看不是多余的,为了代码安全,一定要加上
很小的一个初级知识点,不过不常见,特此记录。

猜你喜欢

转载自blog.csdn.net/u014443578/article/details/76790650