修改DTS适配遥控用户码
在将该DTS文件提交到Kernel后,若需适配遥控用户码,需修改 红外遥控(remote-controller)相关节点配置,具体对应DTS中的 pwm@ff420030 节点(RK3399常见红外遥控驱动节点),以下是具体修改位置及步骤:
一、定位需修改的核心节点
在你的DTS文件中,红外遥控配置集中在 /pwm@ff420030 节点(关键词:rockchip,remotectl-pwm,对应红外遥控功能的PWM驱动),该节点下包含 ir_key1/ir_key2/ir_key3 三个子节点,分别对应不同用户码的遥控配置,需修改的核心参数如下:
| 参数 | 含义 |
|---|---|
rockchip,usercode |
遥控的用户码(16进制),需替换为目标遥控的实际用户码(如原配置中的 0x4040/0xff00) |
rockchip,key_table |
按键码映射表(16进制),每组两个值分别为「遥控发送的按键码」和「Linux内核对应的键值」 |
二、具体修改步骤
步骤1:找到DTS中的红外遥控节点
在DTS文件中搜索 pwm@ff420030,定位到如下配置段(已在你的DTS中存在):
pwm@ff420030 {
compatible = "rockchip,remotectl-pwm";
reg = <0x00 0xff420030 0x00 0x10>;
#pwm-cells = <0x03>;
pinctrl-names = "default";
pinctrl-0 = <0x99>;
clocks = <0x86 0x1e>;
clock-names = "pwm";
status = "okay";
interrupts = <0x00 0x3d 0x04 0x00>;
remote_pwm_id = <0x03>;
handle_cpu_id = <0x01>;
remote_support_psci = <0x04>;
phandle = <0x12f>;
// 以下为3组遥控用户码配置,需根据实际遥控修改
ir_key1 {
rockchip,usercode = <0x4040>; // 第1组用户码
rockchip,key_table = <0xf2 0xe8 0xba 0x9e ...>; // 对应按键映射
};
ir_key2 {
rockchip,usercode = <0xff00>; // 第2组用户码
rockchip,key_table = <0xf0 0x74 0xad 0x66 ...>; // 对应按键映射
};
ir_key3 {
rockchip,usercode = <0x1dcc>; // 第3组用户码
rockchip,key_table = <0xee 0xe8 0xf0 0x9e ...>; // 对应按键映射
};
};
步骤2:修改用户码(rockchip,usercode)
- 获取目标遥控的用户码:
通过工具(如irrecord或红外接收设备)读取你要适配的遥控用户码(16进制格式,如0x8080); - 替换原有用户码:
若只需适配1组遥控,可直接修改ir_key1的rockchip,usercode为目标值(如将0x4040改为0x8080);若需适配多组,可保留/修改ir_key2/ir_key3的用户码(最多支持3组)。
示例修改(适配用户码 0x8080):
ir_key1 {
rockchip,usercode = <0x8080>; // 替换为目标遥控的用户码
rockchip,key_table = <0xf2 0xe8 0xba 0x9e ...>; // 后续需同步修改按键映射
};
步骤3:修改按键码映射(rockchip,key_table)
key_table 是「遥控按键码」与「Linux内核键值」的映射表,格式为 <遥控按键码> <Linux键值>,需根据目标遥控的实际按键码调整:
- 获取遥控按键码:
使用irrecord -d /dev/lirc0(需内核支持LIRC驱动)录制目标遥控的每个按键对应的16进制按键码; - 对应Linux内核键值:
参考Linux内核键值定义(路径:include/uapi/linux/input-event-codes.h),如:- 电源键:
KEY_POWER(对应值0x74) - 音量+:
KEY_VOLUMEUP(对应值0x73) - 音量-:
KEY_VOLUMEDOWN(对应值0x72)
- 电源键:
- 替换按键映射表:
将rockchip,key_table中的原有值替换为「目标遥控按键码 + 对应Linux键值」,每组两个值,按实际按键数量调整。
示例修改(适配某遥控的电源/音量键):
ir_key1 {
rockchip,usercode = <0x8080>;
// 映射规则:<遥控按键码> <Linux键值>
rockchip,key_table = <
0x12 0x74 // 遥控电源键(0x12)→ KEY_POWER(0x74)
0x1a 0x73 // 遥控音量+(0x1a)→ KEY_VOLUMEUP(0x73)
0x1e 0x72 // 遥控音量-(0x1e)→ KEY_VOLUMEDOWN(0x72)
0x0c 0x66 // 遥控Home键(0x0c)→ KEY_HOME(0x66)
// 其他按键按实际情况补充
>;
};
步骤4:验证节点依赖(可选)
确保该节点的依赖配置正确,避免修改后功能失效:
- Pinctrl配置:
节点中pinctrl-0 = <0x99>对应红外接收引脚的引脚配置,需确认0x99指向的pinctrl节点(在DTS的pinctrl段中搜索phandle = <0x99>)是否为实际使用的红外引脚,若引脚不同需同步修改pinctrl-0的值; - 时钟配置:
clocks = <0x86 0x1e>对应红外驱动的时钟源,无需修改(0x86是pmucru时钟控制器节点的phandle,0x1e是红外对应的时钟索引)。
三、提交Kernel后的验证步骤
- 重新编译内核与DTS:
将修改后的DTS文件放入Kernel的arch/arm64/boot/dts/rockchip/目录(RK3399对应的DTS路径),编译生成dtb文件并烧录到开发板; - 测试遥控功能:
开发板启动后,通过evtest工具(需安装)测试按键是否被正确识别:
按下遥控按键,若终端输出对应的键值(如evtest /dev/input/eventX # X为红外对应的input设备号(可通过cat /proc/bus/input/devices查看)KEY_POWER),说明适配成功。
关键注意事项
- 用户码格式:需使用16进制格式,且与遥控实际发送的用户码一致(部分遥控可能为32位用户码,需拆分为两个16进制值,具体参考驱动要求);
- 按键码顺序:
key_table中每组值的顺序不可颠倒(必须是「遥控按键码在前,Linux键值在后」); - 多组用户码:若需适配多个不同用户码的遥控,可保留
ir_key1/ir_key2/ir_key3三个节点,分别配置不同的usercode和key_table。

浙公网安备 33010602011771号