Linux: Input Subsystem
這邊要探討的輸入子系統以Android的架構為主,不過我想在kernel spcae的部分應該和其他平台有大部分的共通性。主要的輸入裝置以Keypad, Touch Panel, 軌跡球這類輸入裝置為主,我曾移植過的Keypad以及Touch Panel的驅動程式,最近因為要往上串到framework的部分,所以也稍微trace了HAL曾中eventhub的部分,稍後都會提到。
從Driver的角度來看,input device的驅動程式分做三個部分來看,包含:
-input device driver(也就是要掛載的裝置驅動程式)
-input core
-input handler
input core為input subsystem的核心部分,這部分在程式碼中是落在input.c這支檔案中,路徑的部分應是在platformXXXX/kernel/drivers/input,其中platformXXXX端看各位的平台了。在code中我們可以看到module_init,在init function中會透過class_register()創建input class作為之後input device的類。
接著透過register_chrdev()這個舊式的方法去向kernel註冊input device,如下所示:
err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
err通常是個int型態,用來顯示註冊的結果,在這個API中的第一個參數
從Driver的角度來看,input device的驅動程式分做三個部分來看,包含:
-input device driver(也就是要掛載的裝置驅動程式)
-input core
-input handler
input core為input subsystem的核心部分,這部分在程式碼中是落在input.c這支檔案中,路徑的部分應是在platformXXXX/kernel/drivers/input,其中platformXXXX端看各位的平台了。在code中我們可以看到module_init,在init function中會透過class_register()創建input class作為之後input device的類。
接著透過register_chrdev()這個舊式的方法去向kernel註冊input device,如下所示:
err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
err通常是個int型態,用來顯示註冊的結果,在這個API中的第一個參數
留言
張貼留言