1ドライバーをコンパイルします
前章のドライバテストプログラムと同様にMakefileファイルが必要ですが、obj-mの値がkey_input.oに変更されています。Makefileファイルの内容は次のとおりです。
KERNELDIR := /home/topeet/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga
CURRENT_PATH := $(shell pwd)
obj-m := key_input.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
まず、ターミナルに2つのコマンドを入力します(2つの環境変数を設定します)。
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
次に、「make」コマンドを実行してモジュールをコンパイルすると、コンパイルが完了した後にkey_input.koモジュールファイルが生成されます。
2アプリケーションテストプログラムをコンパイルします
次のコマンドを入力して、アプリケーションテストプログラムをコンパイルします。
arm-linux-gnueabihf-gcc -o key_input_test key_input_test.c
コンパイルが完了すると、key_input_test実行可能ファイルが生成されます。
3テストを実行します
開発ボードを起動し、コンパイルされたkey_input.koモジュールファイルとkey_input_testアプリケーションを/lib/modules/4.1.15ディレクトリにコピーします(開発のルートファイルシステムに「/lib/modules/4.1.15」があるかどうかを確認します)。ボードディレクトリがない場合は、自分で作成する必要があります。開発ボードは、CDデータで提供されるbusyboxファイルシステムとCDデータ「i.MX6ULターミネータCDデータ\ 08_開発ボードシステムイメージ\ 03_file」を使用します。システムイメージ\ 01_Busyboxファイルシステム」ディレクトリ)。ドライバモジュールファイルをロードする前に、/ dev / inputディレクトリにあるファイルを確認してください。結果を図3.1に示します。
/ dev / inputディレクトリには多くのイベントイベントがあり、次のコマンドを入力してモジュールをロードします。
depmod
modprobe key_input
ドライバが正常にロードされたら、/ dev / inputディレクトリ内のファイルを見てみましょう。結果を図3.2に示します。
追加のevent3ファイルがあることがわかります。したがって、/ dev / input / event3は、登録したドライバーに対応するデバイスファイルです。次に、key_input_testアプリケーションは、/ dev / input / event3デバイスファイルを読み取ることにより、入力イベント情報を取得します。テストコマンドは次のとおりです。
./key_input_test /dev/input/event3
開発ボードのキーKEY0を押すと、図3.3に現象が発生します。
開発ボードのボタンを押すか離すと、対応するコンテンツが端末に出力され、どのボタンが押されたか離されたかを確認できます。Linuxカーネルでは、KEY_0は11です。
さらに、key_input_testアプリケーションを使用せずにドライブをテストすることもできます.hexdumpコマンドを直接使用して/ dev / input / event3ファイルの内容を表示し、次のコマンドを入力できます:
`` `hexdump / dev / input / event3````プレス
開発ボード上のボタンKEY0には、図3.4に示す現象があります。
上の図は、input_eventタイプの元のイベントデータ値であり、16進数で表されています。これらの元のデータの意味は、次のとおりです。
/*****************input_event 类型********************/
/* 编号 */ /* tv_sec */ /* tv_usec */ /* type */ /* code */ /* value */
0000000 1029 5d5e 2c16 0008 0001 000b 0001 0000
0000010 1029 5d5e 2c16 0008 0000 0000 0000 0000
0000020 1029 5d5e 761f 000a 0001 000b 0000 0000
0000030 1029 5d5e 761f 000a 0000 0000 0000 0000
typeはイベントタイプ、EV_KEYイベント値は1、EV_SYNイベント値は0です。したがって、最初の行はEV_KEYイベントを表し、2番目の行はEV_SYNイベントを表します。codeはイベントコード、つまりキー番号です。KEY_0のキー番号は11で、対応する16進数は0xbです。したがって、最初の行はKEY_0のキーイベントを表し、最後の値はキー値です。 1はプレスを意味し、0はリリースを意味します。
要約すると、上の図の元のイベント値の意味は次のとおりです
。1行目、キーを押した(KEY_0)イベント。
2行目、EV_SYN同期イベント。キーイベントが報告されるたびに、EV_SYNイベントが同期的に報告される必要があるため
です。
3行目では、キー(KEY_0)リリースイベント。
4行目、EV_SYN同期イベント。2行目と同じ。