[北京Xunwei] i.MX6ULLターミネーターLinuxINPUTサブシステムの実験的動作テスト

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に示します。
ここに画像の説明を挿入

図3.1

/ dev / inputディレクトリには多くのイベントイベントがあり、次のコマンドを入力してモジュールをロードします。

depmod
modprobe key_input

ドライバが正常にロードされたら、/ dev / inputディレクトリ内のファイルを見てみましょう。結果を図3.2に示します。
ここに画像の説明を挿入

図3.2

追加のevent3ファイルがあることがわかります。したがって、/ dev / input / event3は、登録したドライバーに対応するデバイスファイルです。次に、key_input_testアプリケーションは、/ dev / input / event3デバイスファイルを読み取ることにより、入力イベント情報を取得します。テストコマンドは次のとおりです。
./key_input_test /dev/input/event3
開発ボードのキーKEY0を押すと、図3.3に現象が発生します。
ここに画像の説明を挿入

図3.3

開発ボードのボタンを押すか離すと、対応するコンテンツが端末に出力され、どのボタンが押されたか離されたかを確認できます。Linuxカーネルでは、KEY_0は11です。
さらに、key_input_testアプリケーションを使用せずにドライブをテストすることもできます.hexdumpコマンドを直接使用して/ dev / input / event3ファイルの内容を表示し、次のコマンドを入力できます:
`` `hexdump / dev / input / event3````プレス
開発ボード上のボタンKEY0には、図3.4に示す現象があります。
ここに画像の説明を挿入

図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行目と同じ。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/BeiJingXunWei/article/details/112213266