Linux X86 PS 2鍵盤驅動分析記錄

2021-07-31 17:24:20 字數 1397 閱讀 5557

1,linux x86 ps/2 鍵盤驅動框架流程(以下均已intel 8042鍵盤控制器為例):

1.1 裝置初始化註冊流程:

鍵盤控制器硬體驅動(i8042.c) -> 串列埠驅動核心(serio.c) -> 串列埠驅動(atkbd.c) -> 輸入驅動核心(input.c) -> 輸入事件驅動程式(keyboard.c) -> 虛擬控制台驅動模組;

註冊流程:

1.1.1,鍵盤控制器硬體驅動(i8042.c):

將8042鍵盤控制器作為平台裝置(struct platform_device)掛接在平台匯流排(struct bus_type)上,並將獲取到的硬體資訊及相關軟體資料結構資訊儲存在平台裝置例項中;

將8042鍵盤硬體控制器驅動(struct platform_driver)註冊到平台匯流排上,平台匯流排匹配平台裝置和平台驅動,並呼叫平台驅動的probe方法,在probe方法中分配並初始化串列埠資料結構例項(struct serio),將平台裝置資訊放入串列埠資料結構例項中;最後將串列埠結構例項註冊進入串列埠驅動核心(serio_register_port);

1.1.2,串列埠驅動核心(serio.c)

串列埠驅動核心負責匹配串列埠和串列埠驅動,匹配之後,呼叫串列埠驅動的atkbd_connect方法;

1.1.2,ps/2鍵盤串列埠驅動(atkbd.c)

將串列埠驅動(struct serio_driver)註冊到串列埠核心並匹配到串列埠裝置之後,呼叫串列埠驅動的atkbd_connect方法,在atkbd_connect方法中分配並初始化輸入裝置(struct input_dev),最後將輸入裝置註冊到輸入子系統核心;

1.1.3, 輸入驅動核心(input.c)

輸入子系統請移步:輸入子系統介紹

1.1.4,輸入事件驅動程式(keyboard.c)

鍵盤輸入事件驅動程式負責處理鍵盤輸入裝置上報的鍵盤輸入事件資訊,並將資訊傳遞給虛擬控制台模組;

1.2 裝置中斷流程:

8042硬體中斷(i8042_interrupt) -> 串列埠核心中斷(serio_interrupt) -> 串列埠驅動中斷(atkbd_interrupt) -> 輸入子系統核心中斷(input_event) -> 輸入時間驅動程式中斷(kbd_event)

1.3,ps/2鍵盤裝置驅動註冊及中斷時序圖:

其中有平台匯流排模組,串列埠匯流排模組,輸入子系統模組;

PS 2鍵盤原理

11.4 鍵盤原理 早期的鍵盤實際上是一種5pin的鍵盤,稱作at鍵盤,是1984年ibm pc的標準鍵盤。在1987年ibm進行了改進,從而變成了現在的ps 2鍵盤。當按下乙個鍵或釋放乙個鍵,鍵盤都會傳送鍵盤掃瞄碼到主機。比如按下a,鍵盤就會傳送0x1c到主機。如果持續按a,當經過乙個給定時間後,...

FPGA 實現PS 2鍵盤控制LED

module ps2 系統訊號 input clk,input rst n,ps2訊號 input data in,input clk in,測試訊號 output reg done flag,output reg 3 0 led reg r1,r2 reg 7 0 ps2 data reg 4 0...

PS2鍵盤第二套鍵盤掃瞄碼學習發現

ps2鍵盤中第二套鍵盤掃瞄碼使用最廣泛。但是每個按鍵的鍵值,大多數是乙個位元組。有少量的兩個位元組 小鍵盤enter 鍵 e0 5a 右ctrl e0 14 右gui e0 27 左gui e0 1f 右alt e0 11 fn e0 2f 小鍵盤 e0 4a 這些按鍵一般在鍵盤上能找到另乙個相同功...