通过拨码开关选择初始化不同的硬件(屏参) —— 应用与编译指南
由于该功能进行了多次迭代,编译方式有所修改,故写此文章,说明在新的分支上如何应用该功能和编译出完整的固件。
1. 概述
HWDTB(Hardware DTB)是一套通过硬件拨码开关自动选择不同 LVDS 屏参的方案。核心思路:
拨码开关(4位GPIO) → U-Boot 读取 → 选择对应 DTB → 内核加载匹配的屏参
- 一套固件兼容 16 种 LVDS 屏幕,无需为每种屏幕单独编译刷机
- 4 位拨码对应 16 种组合(0000 ~ 1111),分别绑定到
GPIO2_D4、GPIO2_D3、GPIO2_D2、GPIO2_D1
2. 系统架构
2.1 相关 Commit
- cherry-pick 应用顺序如下:
| Commit | 说明 |
|——–|——|
|
21a81579b5feat(HWDTB): 支持拨码开关选择屏参 | 核心功能,25 文件 +3109 行 | |a7a3d95965fix(HWDTB): 多设备树无法正常打包到 update.img | 编译前 make clean 修复 DTB 合并异常 | |43a7e07372fix(HWDTB): 不兼容 TKUN_MEKT_T3568I 导致的编译失败 | 产品名匹配兼容 |
2.2 拨码编码规则
命名格式:hw-t3568i-lvds-{GPIO编码}-{分辨率}-{通道数}{颜色深度}.dts
| GPIO 编码 | 分辨率 | 通道/色深 | 文件名 |
|---|---|---|---|
| 0000 | 1024x768 | 单通道 18bit | hw-t3568i-lvds-0000-1024x768-s18.dts |
| 0001 | 1680x1050 | 双通道 24bit | hw-t3568i-lvds-0001-1680x1050-d24.dts |
| 0010 | 1600x1200 | 双通道 24bit | hw-t3568i-lvds-0010-1600x1200-d24.dts |
| 0011 | 1920x1080 | 双通道 18bit | hw-t3568i-lvds-0011-1920x1080-d18.dts |
| 0100 | 1280x800 | 单通道 24bit | hw-t3568i-lvds-0100-1280x800-s24.dts |
| 0101 | 1366x768 | 单通道 24bit | hw-t3568i-lvds-0101-1366x768-s24.dts |
| 0110 | 1366x768 | 单通道 18bit | hw-t3568i-lvds-0110-1366x768-s18.dts |
| 0111 | 1280x1024 | 双通道 24bit | hw-t3568i-lvds-0111-1280x1024-d24.dts |
| 1000 | 1280x1024 | 双通道 18bit | hw-t3568i-lvds-1000-1280x1024-d18.dts |
| 1001 | 1024x768 | 单通道 24bit | hw-t3568i-lvds-1001-1024x768-s24.dts |
| 1010 | 1920x1080 | 双通道 24bit | hw-t3568i-lvds-1010-1920x1080-d24.dts |
| 1011 | 1024x600 | 单通道 24bit | hw-t3568i-lvds-1011-1024x600-s24.dts |
| 1100 | 1024x600 | 单通道 18bit | hw-t3568i-lvds-1100-1024x600-s18.dts |
| 1101 | 800x600 | 单通道 24bit | hw-t3568i-lvds-1101-800x600-s24.dts |
| 1110 | 800x600 | 单通道 18bit | hw-t3568i-lvds-1110-800x600-s18.dts |
| 1111 | 1280x800 | 单通道 18bit | hw-t3568i-lvds-1111-1280x800-s18.dts |
编码含义:
s= Single Link(单通道),d= Dual Link(双通道)18= 18bit 色深,24= 24bit 色深- GPIO 位顺序:
GPIO2_D4 | GPIO2_D3 | GPIO2_D2 | GPIO2_D1(高位在前)
3. 新增或修改拨码对应的屏参
如果需要替换某个槽位的屏参,可参考f9f2215ffe06e63e3d246d65db4f40b20d408e55:feat(display): 将拨码0001改为显示LVDS_1920x1200
4. 编译固件
# 带 -m 参数,将 16 个 DTB 全部编译并打包进 resource.img
./build_hw.sh -UCKAmu
-m 参数的编译流程:
- 执行
make ARCH=arm64 NK_RK3568_defconfig - 循环编译 16 个
hw-t3568i-lvds-*.dtb - 调用
mkmultidtb.py RK3568-HW将所有 DTB 打包到resource.img - 使用多 DTB 的
resource.img重新生成boot.img - 最终打包
update.img
留下评论