LINUX I2C驅動偶爾出現段錯誤原因之一
阿新 • • 發佈:2018-12-30
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 最後會有 {},感覺多餘,但是現在來看不是多餘的,為了程式碼安全,一定要加上
很小的一個初級知識點,不過不常見,特此記錄。