当前位置: 首页 > 文档资料 > systemd 中文手册 >

hwdb 中文手册

优质
小牛编辑
140浏览
2023-12-01

名称

hwdb — 硬件数据库

描述

硬件数据库是一个由"modalias"风格的键(key)与"udev属性"风格的值(value)组成的 key-value 文本数据库。主要用于 udev 为匹配到的硬件设备添加关联属性,但也可以用于直接查询。

硬件数据库文件

硬件数据库文件(hwdb)位于操作系统发行商维护的 /usr/lib/udev/hwdb.d 目录中,以及系统管理员维护的 /etc/udev/hwdb.d 目录中。所有的 hwdb 文件(无论位于哪个目录中),统一按照文件名的字典顺序处理。对于不同目录下的同名 hwdb 文件,仅以 /etc/udev/hwdb.d 目录中的那一个为准。依据这个特性,系统管理员可以使用 /etc/udev/hwdb.d 目录中的自定义文件替代 /usr/lib/udev/hwdb.d 目录中的同名文件。如果系统管理员想要屏蔽 /usr/lib/udev/hwdb.d 目录中的某个 hwdb 文件,那么最佳做法是在 /etc/udev/hwdb.d目录中创建一个指向 /dev/null 的同名符号链接,即可彻底屏蔽 /usr/lib/udev/hwdb.d 目录中的同名文件。注意,硬件数据库文件必须以 .hwdb 作为后缀名,否则将被忽略。

每个硬件数据库文件(hwdb)都包含一系列由"matche"与关联的"key-value"组成的记录。每条记录由一个或多个用于匹配的"matche"字符串(可包含shell风格的通配符)开头,多个"matche"字符串之间使用换行符分隔,但必须是依次紧紧相连的行(也就是中间不能出现空行),每一行都必须是一个完整的"matche"字符串(也就是不能将一个"matche"字符串分为两行),多行之间是逻辑或(OR)的关系。每一个"matche"字符串都必须顶行书写(也就是行首不能是空白字符)。

"matche"行之后是一个或多个以空格开头的"key-value"行(必须以空格开头作为区分), "key-value"行必须符合 "key=value" 格式。一个空白行表示一条记录结束。以 "#" 开头的行将被视为注释而被忽略。

如果有多条记录的"matche"串都匹配同一个给定的查找字符串,那么所有匹配记录中的"key-value"都将被融合在一起。如果某个"key"出现了多次,那么仅以最高优先级记录中的"value"为准(每个"key"仅允许拥有一个单独的"value")。对于不同硬件数据库文件(hwdb)中的记录来说,文件名的字典顺序越靠后,优先级越高;对于同一个硬件数据库文件(hwdb)中的记录来说,记录自身的位置越靠后,优先级越高。

所有 hwdb 文件都将被systemd-hwdb(8)编译为二进制格式的数据库,并存放在 /etc/udev/hwdb.bin 文件中。注意,操作系统发行商应该将预装的二进制格式的数据库存放在 /usr/lib/udev/hwdb.bin 文件中。系统在运行时,仅会读取二进制格式的硬件数据库。

例子

例 1.  hwdb 文件的一般语法

# /usr/lib/udev/hwdb.d/example.hwdb
# 注释一般放在记录之前。
# 用于描述该文件的用途、定义了哪些属性、
# 以及排序规则。

# 下面这条记录有三个 match 以及一个属性
mouse:*:name:*Trackball*:
mouse:*:name:*trackball*:
mouse:*:name:*TrackBall*:
 ID_INPUT_TRACKBALL=1

# 下面这条记录有一个 match 以及五个属性
mouse:usb:v046dp4041:name:Logitech MX Master:
 MOUSE_DPI=1000@166
 MOUSE_WHEEL_CLICK_ANGLE=15
 MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL=26
 MOUSE_WHEEL_CLICK_COUNT=24
 MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL=14

例 2. 属性值的覆盖

# /usr/lib/udev/hwdb.d/60-keyboard.hwdb
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn*
 KEYBOARD_KEY_a1=help
 KEYBOARD_KEY_a2=setup
 KEYBOARD_KEY_a3=battery

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn123*
 KEYBOARD_KEY_a2=wlan

# /etc/udev/hwdb.d/70-keyboard.hwdb
# 禁用所有AT键盘上的 wlan 按钮
evdev:atkbd:*
 KEYBOARD_KEY_a2=reserved

如果硬件数据库仅由上述两个文件组成,那么查找字符串为"evdev:atkbd:dmi:bvnAcer:bdXXXXX:bd08/05/2010:svnAcer:pn123"的键盘将会匹配上述全部三条记录,并且最终获得如下"属性=值":

KEYBOARD_KEY_a1=help
KEYBOARD_KEY_a2=reserved
KEYBOARD_KEY_a3=battery

参见

systemd-hwdb(8)