2014年1月13日 星期一

Linux driver函式指標的型別檢查


static int key_probe()     // should be  key_probe(struct platform_device *)
{
    printk( KERN_ALERT "[key_probe]\n" );
    return 0;
}

static int key_remove( float f )    // should be  key_remove(struct platform_device *)
{
    return 0;
}

static struct platform_driver key_driver = {
    .probe = key_probe,      //  function pointer DO NOT check argument
    .remove = key_remove,     //  function pointer DO NOT check argument
    .driver = {
        .name = "push-button",
        .owner = THIS_MODULE,
    },
};

static int key_init()
{
    struct platform_device* a;
   ...
    key_driver.probe(a);     //  DO NOT MATCH arguement of function pointer
    key_driver.remove(a);     //  DO NOT MATCH arguement of function pointer
   ...
}

static void key_exit()
{
}

module_init(key_init)
module_exit(key_exit)
編譯通過,但執行時發生錯誤。顯示GCC對Linux driver在platform_driver與實際呼叫(key_driver.probe(a),key_driver.remove(a))時型別檢查,但是對於函式指標(function pointer)的指定部分並沒有,到了實際執行時才會發生錯誤。

沒有留言:

張貼留言