关于 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
。尽管将它们分类为实际的更符合逻辑输入事件。