Linux内核删除自定义键盘扫描代码


16

我有一个老式的IBM 122键型号M键盘,适合在现代计算机上使用。我正在使用Teensy 2.0进行编码并处理USB方面的问题。我从Humble Hacker键盘项目(https://github.com/humblehacker/keyboard)借用了固件,并在构建配置中添加了额外的键。到目前为止,一切都很好。

所有“常规”键都可以使用,但是内核似乎正在删除多余的键(F13- F24等)。

运行/lib/udev/keymap -i input/event0显示所有正常键的扫描代码,但多余键则无显示。

运行wireshark以捕获数据包的USB端口表明键盘正在发送扫描代码,但是看起来内核在原则上只是丢弃了它们。

我觉得这是内核驱动程序中的某些东西,根本没有提供它不期望的扫描代码。

我认为.h在内核源代码的某个文件中的某处会存在某种“主”键映射,但是到目前为止,我一直没有成功找到它。

值得强调的是,我没有像在我之前的其他许多人一样要求在X中映射额外的键。这是一个低级的,显然与内核相关的问题。暂时假设我根本不会使用X。我需要的是扫描代码在我运行时显示/lib/udev/keymap -i,我可以从那里开始其余的工作。


我知道这无济于事,但:您为什么要使用Teensy?该键盘应与直PS2 / USB适配器一起使用。
goldilocks 2014年

键盘来自旧的IBM终端,它不使用PS / 2兼容协议。
user2543941 2014年

哇。确实可能是驱动程序没有传递事件(请看这里的最后一部分)。如果结果不一样,您可以尝试使用dunno evtest代替/lib/udev/keymap -i
goldilocks 2014年

1
使用额外的键时,evtest也不显示任何内容。
user2543941 2014年

1
看起来,如果您想使用这些键,您的项目可能会更大一些,哈哈。编写键盘驱动程序最难的是学习API,否则它们看起来并不那么复杂。我有一段时间没有做任何内核工作了,但这是:我认为LDD3对于3.x仍然有效。
goldilocks 2014年

Answers:


1

内核会看到奇怪的扫描代码并将其丢弃。我将尝试获取那些扫描代码值,然后更新硬件数据库索引。简而言之,计划是这样的:

  • 从dmesg输出获取代码-按下未知的键码时dmesg应该输出类似以下内容的代码:

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
    

a0 是代码值。

  • 创建自定义键码映射文件。示例和帮助位于默认文件中
    /usr/lib/udev/hwdb.d/60-keyboard.hwdb对于Arch,在其他发行版中可能有所不同)。

  • 通过运行以下命令来更新和触发硬件数据库:

    > udevadm hwdb --update
    > udevadm trigger /dev/input/eventXX
    

其中eventXX对应于您的键盘(您可以通过运行来获取它evtest)。您也可以重新启动而不是触发。

Arch Wiki和默认的键码映射文件中查找更详细的描述(如果不是Arch,则在发行文档中)。

这是一种可靠且简单的方法,可以在内核级别进行映射,因此无论显示服务器,DE等等都可以使用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.