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)的指定部分並沒有,到了實際執行時才會發生錯誤。
2014年1月13日 星期一
Linux driver函式指標的型別檢查
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言