为什么PC扬声器在内核配置中被视为输入设备?

为什么PC扬声器在内核配置中被视为输入设备?

关于 Linux 内核配置,一直困扰我的事情是:PC 扬声器作为通用蜂鸣声的来源被认为是“杂项”。输入我希望它属于某个与输出相关的类别,或者可能是“Misc.device”。设备”。

  │ CONFIG_INPUT_PCSPKR:
  │ Say Y here if you want the standard PC Speaker to be used for
  │ bells and whistles.
  │ Prompt: PC Speaker support
  │   Location:
  │     -> Device Drivers
  │       -> Input device support
  │         -> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])
  │           -> Miscellaneous devices (INPUT_MISC [=y])

(注意:这与将 PC 扬声器用作 ALSA/OSS 声卡不同。)

答案1

可能是因为它在当时很方便,并且是使用现有内核结构的用户可以访问它的最简单方法。

并不是那么众所周知,一个人可以/dev/input/eventX文件,并以这种方式产生输入级事件。

以同样的方式,人们可以 EV_SND事件到/dev/input/eventX代表扬声器的文件(或符号链接之一,通常/dev/input/by-path/platform-pcspkr-event-spkr),并以这种方式使用扬声器生成声音。这一点更是鲜为人知。 :-)

这是一个用于 32 位系统的 perl oneliner,它生成具有指定音高的音符

perl -e 'print pack("qssl", 0, 0x12, 2, 2000)' > /dev/input/by-path/platform-pcspkr-event-spkr

这是另一个在线用户可以将其关闭

perl -e 'print pack("qssl", 0, 0x12, 2, 0)' > /dev/input/by-path/platform-pcspkr-event-spkr

对于 64 位系统,使用

包("qqssl", 0, 0, 0x12, 2, 间距)

实际布局取决于定义结构的 C 头文件的编译方式。

顺便说一句,HDA 音频设备的插入事件也作为文件显示在输入层中/dev/input/eventX。尽管将它们分类为实际的更符合逻辑输入事件。

相关内容