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

来源:互联网 发布:怎么举报网络博客 编辑:程序博客网 时间:2024/05/17 07:59

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 最后会有 {},感觉多余,但是现在来看不是多余的,为了代码安全,一定要加上
很小的一个初级知识点,不过不常见,特此记录。

原创粉丝点击