1. 程式人生 > >LINUX I2C驅動偶爾出現段錯誤原因之一

LINUX I2C驅動偶爾出現段錯誤原因之一

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 最後會有 {},感覺多餘,但是現在來看不是多餘的,為了程式碼安全,一定要加上


很小的一個初級知識點,不過不常見,特此記錄。