input輸入子系統將硬體裝置配置部分input_dev和驅動程式handler分開,並通過乙個input_handle將兩者連線起來
input-----(核心層)
input_dev--------------|------------------ input_handler
並將input_handle分別插入兩者的h_list鍊錶中。
static int __init input_init(void)
err = input_proc_init();
if (err)
goto fail1;
err = register_chrdev(input_major, "input", &input_fops);
if (err)
return 0;
fail2: input_proc_exit();
fail1: class_unregister(&input_class);
return err;
}
從上面**可以看出,input核心中呼叫 register_chrdev(input_major, "input", &input_fops);註冊了乙個input裝置,
因此在cat /proc/devices和 ls /sys/class/ 下面可以看見input裝置,這樣input相當於乙個輸入系統的虛擬總裝置,其他的按鍵,滑鼠觸控螢幕等具體的裝置都可以註冊在該虛擬裝置中,input核心負責為這些具體的硬體輸入裝置match合適的驅動程式handler。並用evdev_connect函式連線起來,在evdev_connect函式中會呼叫class_device_create()函式建立具體的裝置,具體的裝置用event命名,將具體的輸入裝置抽象為事件event。因此在 ls /dev/ 下面能看見evnet裝置,在ls /sys/calss/input下面也可以看見event裝置。
# ls /dev/ev*
/dev/event0 /dev/event1
# ls /sys/class/input
event0 event1 input0 input2 mice mouse0 ts0
硬體裝置中斷中呼叫input_event上報事件,input核心呼叫相對應的handler的event函式處理該事件
hexdump /dev/event1 可以將事件資訊列印出來
# hexdump /dev/event1
0000000 337f 0000 535c 0007 0001 0026 0001 0000
0000010 337f 0000 5368 0007 0000 0000 0000 0000
0000020 337f 0000 9b19 000a 0001 0026 0000 0000
0000030 337f 0000 9b23 000a 0000 0000 0000 0000
如果linux系統安裝了qt,應該解除安裝qt,然後
用cat /dev/tty1
接著按按鍵,應該能看到ls的顯示
如果不解除安裝qt,則在qt的記事本上應該能看到按鍵對應的顯示
Linux輸入子系統
1.1.input子系統概述 輸入裝置 如按鍵,鍵盤,觸控螢幕,滑鼠等 是典型的字元裝置,其一般的工作機制是低層在按鍵,觸控等動作發生時產生乙個中斷 或驅動通過timer定時查詢 然後cpu通過spi,i2c或者外部儲存器匯流排讀取鍵值,座標等資料,放乙個緩衝區,字元裝置驅動管理該緩衝區,而驅動的r...
Linux輸入子系統
linux系統提供了input子系統,按鍵 觸控螢幕 鍵盤 滑鼠等輸入都可以利用input介面函式來實現裝置驅動,最重要的資料結構是struct input dev 在linux 核心中,input裝置用input dev 結構 體描述,使用input子系統實現輸入裝置驅動的時候,驅動的核心工作是向...
Linux輸入子系統
位址 linux輸入子系統 按鍵與觸控螢幕的裝置驅動,在linux系統中實現這類裝置驅動的方法是利用input子系統。linux系統提供了input子系統,按鍵 觸控螢幕 鍵盤 滑鼠等輸入都可以利用input介面函式來實現裝置驅動,按鍵和觸控螢幕裝置驅動都可以作為input裝置驅動而實現。在linu...