私はPS / 2を介してキーボードで接続されたLinux Mint 19.1で動作する古いポータブルバーコードリーダーを入手しようとしています。バーコードをスキャンするたびに、キーボードに入力したものなどのバーコードテキストが送信されます。
バーコードリーダーはGrubコマンドラインなどから起動すると機能しますが、Linux起動時に出力を生成しません。しかし、バッファをPCに送信できることを示しています。それ以外の場合は、再スキャンする準備ができていないためです。だから何らかの関連性があったに違いありません。比較のために:同じPCのWindows 10でも試してみましたが、バッファをまったくフラッシュできず、スキャナがフリーズしました。
dmesg
以下のように、i8042ドライバがPS / 2を担当していることがわかりました。起動パラメータを追加して実行してみましたが、役に立ちませんでした。
# dmesg | grep i8042
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.15.0-43-generic root=UUID=dfc4afd2-a995-48d8-8538-355cba9f9eda ro atkbd.reset i8042.nomux=1 i8042.reset quiet splash vt.handoff=1
[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.15.0-43-generic root=UUID=dfc4afd2-a995-48d8-8538-355cba9f9eda ro atkbd.reset i8042.nomux=1 i8042.reset quiet splash vt.handoff=1
[ 0.827672] i8042: PNP: No PS/2 controller found.
[ 0.827673] i8042: Probing ports directly.
[ 0.832411] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 0.832414] serio: i8042 AUX port at 0x60,0x64 irq 12
PS / 2デバイスのエントリがありません/dev/input
。
カーネルは次のとおりです
Linux version 4.15.0-43-generic (buildd@lgw01-amd64-001) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 (Ubuntu 4.15.0-43.46-generic 4.15.18)
これは廃止された問題と非常によく似ています。PS / 2キーボードはGRUBでのみ機能し、オペレーティングシステムが完全に起動した後は使用できません。Archの代わりにLinux Mintを使用してください。
追加情報:
マザーボードとUEFIバージョン:ASRock Z77 Pro3 P1.30
PS / 2はマザーボードにあり、カードリーダーは起動前に接続されています。
ブート後の全体dmesg
:https://pastebin.com/Pse6aCUE
私はatkbd serio0: keyboard reset failed on isa0060/serio0
そこにいくつか見つかりました。
evtest
:
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Power Button
/dev/input/event2: Video Bus
/dev/input/event3: Logitech USB Receiver
/dev/input/event4: Logitech USB Receiver
/dev/input/event5: Logitech M705
/dev/input/event6: Logitech K360
/dev/input/event7: Logitech Logitech G35 Headset
/dev/input/event8: HDA Intel PCH Front Mic
/dev/input/event9: HDA Intel PCH Rear Mic
/dev/input/event10: HDA Intel PCH Line
/dev/input/event11: HDA Intel PCH Line Out Front
/dev/input/event12: HDA Intel PCH Line Out Surround
/dev/input/event13: HDA Intel PCH Line Out CLFE
/dev/input/event14: HDA Intel PCH Line Out Side
/dev/input/event15: HDA Intel PCH Front Headphone
/dev/input/event16: HDA NVidia HDMI/DP,pcm=3
/dev/input/event17: HDA NVidia HDMI/DP,pcm=7
/dev/input/event18: HDA NVidia HDMI/DP,pcm=8
/dev/input/event19: HDA NVidia HDMI/DP,pcm=9
lsusb
:
Bus 002 Device 003: ID 046d:c531 Logitech, Inc. C-U0007 [Unifying Receiver]
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 002: ID 2109:0812 VIA Labs, Inc. VL812 Hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 003: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 005 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 8087:0a2b Intel Corp.
Bus 001 Device 003: ID 05e3:0745 Genesys Logic, Inc. Logilink CR0012
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 003 Device 004: ID 046d:0a15 Logitech, Inc.
Bus 003 Device 002: ID 05e3:0606 Genesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
内部には、およびサブディレクトリが/sys/devices/platform/i8042/
あります。power
serio0
serio1
ベストアンサー1
部分的な答え:
BIOSで動作し、i8042ハードウェアが認識されるため、デフォルトのドライバスタック層は問題ありません。 i8042の上にはカーネルモジュールがありserio
、ソースコードはdrivers/input/serio
。おそらくこれは「実際の」キーボードを必要とし、スキャナを認識しないでしょう。
ただし、ネイティブPS / 2ポートアクセスを使用することもできますserio_raw
。する
echo -n "serio_raw" > /sys/bus/serio/devices/serio0/drvctl
デバイスを入手する必要があります/dev/psaux
(表示するにはdmesg
バグもあります)。hexdump -C /dev/psaux
バーコードリーダーを使用するときに何かを取得することを確認してください(行をバッファリングするか、行ごとに1バイトを変更するコマンドを覚えてください)。
機能している場合は、元のプロトコルで使用するか(直接デコード)ソースコードを調べて、serio
バーコードリーダーが気に入らない理由を見つけることができます。プロトコルを参照serio_raw
)。
それでもできなければ、失敗点をさらに絞り込んだのですが、この場合はどのように進めるべきかわかりません。
serio
動作しているドライバでこの記事を読んで遊びたい人は、次のコマンドを使用してドライバを再接続serio_raw
できます。serio
echo -n "rescan" > /sys/bus/serio/devices/serio0/drvctl
編集する
これは「make」(キー押下)と「break」(キー解除)スキャンコードです.たとえば、1e 9e
キーがオンまたはオフになりますA。
これはキー自体Shiftなどに割り当てられることに注意してください。製造および中断コードもあります。したがって、バーコードスキャナが大文字や小文字などを読むと、これらの「偽の」コードが表示されます。
通常、atkbd
モジュールはそれを処理してカーネル入力層に渡してデバイス/dev/input/eventX
ノードに表示されます。ルーチンを調べると、atkbd_probe
キーボードIDを読み取り、失敗した場合はLEDをリセットしようとします。それも失敗すると、キーボードではないと見なされます。同様に、IDが既知のキーボードIDと一致しない場合、キーボードではないと判断する。
だから私はバーコードリーダーがこのテストに失敗したと思います。ネイティブシリアルデバイスから一意のコマンドを送信してこれを確認できます。