1 分钟阅读 次阅读

由于该功能进行了多次迭代,编译方式有所修改,故写此文章,说明在新的分支上如何应用该功能和编译出完整的固件。

1. 概述

HWDTB(Hardware DTB)是一套通过硬件拨码开关自动选择不同 LVDS 屏参的方案。核心思路:

拨码开关(4位GPIO) → U-Boot 读取 → 选择对应 DTB → 内核加载匹配的屏参
  • 一套固件兼容 16 种 LVDS 屏幕,无需为每种屏幕单独编译刷机
  • 4 位拨码对应 16 种组合(0000 ~ 1111),分别绑定到 GPIO2_D4GPIO2_D3GPIO2_D2GPIO2_D1

2. 系统架构

2.1 相关 Commit

  • cherry-pick 应用顺序如下: | Commit | 说明 | |——–|——| | 21a81579b5 feat(HWDTB): 支持拨码开关选择屏参 | 核心功能,25 文件 +3109 行 | | a7a3d95965 fix(HWDTB): 多设备树无法正常打包到 update.img | 编译前 make clean 修复 DTB 合并异常 | | 43a7e07372 fix(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 参数的编译流程:

  1. 执行 make ARCH=arm64 NK_RK3568_defconfig
  2. 循环编译 16 个 hw-t3568i-lvds-*.dtb
  3. 调用 mkmultidtb.py RK3568-HW 将所有 DTB 打包到 resource.img
  4. 使用多 DTB 的 resource.img 重新生成 boot.img
  5. 最终打包 update.img

留下评论