已开启
feat: 新内核显示子系统框架redisp #592
feat: 新内核显示子系统框架redisp #592
已开启
jrongtru创建于 9月28日
jrongtru
jrongtru
9月28日

一、内容说明(相关的Issue)

https://gitcode.com/openharmony/kernel_linux_patches/issues/180

redisp 是 OpenHarmony 上的自研轻量级显示框架,不依赖 DRM/KMS,直接驱动 RK3568 的 VOP2 显示控制器与 MIPI DSI 接口,点亮 ILI9881C(720×1280)MIPI 面板,并向上层图形栈(RenderService / 显示 HDI)提供合成结果送显、翻页、vsync 与缓冲区分配能力。

二、建议测试周期和提测地址

测试周期:2026-06-16 至 2026-09-19(一轮验收已完成,结论见第四节)
投产上线时间:无
提测地址:无
测试环境:RK3568 Toybrick X0 设备(OpenHarmony standard,Linux 6.6),SELinux enforcing=1,UART + hdc 双通道

三、变更内容

  • 3.1 关联PR列表

  • 3.2 构建与部署说明

    1. defconfig:CONFIG_REDISP=y、CONFIG_REDISP_ROCKCHIP=y(默认跟随)、CONFIG_REDISP_COMPAT_DRM_CARD0=y(需 CONFIG_DRM=y)。
    2. 设备树:板级 DTS 追加一行 redisp 控制器 include(含 mipi-dsi 子节点与面板子节点,须排在厂商 include 之后)。
    3. 产品侧:同步 SELinux 策略、init 权限配置与 HDF 配置;内核、vendor、system 三个镜像从同一基线同刷。
    4. 设备工具:静态 arm64 工具与测试脚本推入 /data/redisp/,双侧 md5sum 校验(详见构建指南)。
    5. 迁移任务:无。
  • 3.4 其他技术优化内容

    • 内核显示框架本体(core)与 Rockchip 后端模块:设备节点 /dev/redisp、ioctl(REDISP_FB_*,magic 'R',13 个请求码)、debugfs(/sys/kernel/debug/redisp//)、SELinux 类型 dev_redisp_file。
    • 挂起/恢复缺陷修复:预扫描时序寄存器(VP_PRE_SCAN_HTIMING)纳入恢复列表,修复恢复后黑屏。
    • 设备侧测试工具与部署脚本更新:逐周期寄存器与背光探测、内核内存采样、按运行归档目录。
    • 帧率度量内置:内核按帧起始中断统计 vsync 计数与 present 计数,debugfs 只读暴露;HDI 每秒向内核日志输出一次 FPS,两个口径可交叉校验。
    • present fence:送显接口可返回 sync_file fence 与出帧序号,供 OH 原生 FPS 工具与合成器对时;提供运行时开关便于 A/B 诊断。
    • 内存安全:缓冲分配受全局池配额约束(CMA 256 MiB / 系统页 512 MiB),导入缓冲的解除映射经 vsync 门控延迟执行,设备注销时撤销全部用户态映射。
  • 3.5 废弃通知

    • 无接口废弃。ioctl 编号、结构体布局与 errno 语义冻结;用户态 HDI glue 代码随源码一同重编即可。
  • 3.6 后向不兼容变更

    • 内核、vendor、system 三个镜像必须同刷:任一镜像与内核不匹配时,表现为黑屏或设备节点打开失败。复测镜像必须整机构建,不允许只换内核。

四、研发自测点(自测哪些?冒烟用例全部自测?)

自测结论:全部通过。覆盖功能、性能、可靠性、稳定性与兼容性,关键数据如下。

类别 项目 结果
构建 主机侧构建与静态检查 内核自检 18/18 组、模式测试 48/48、KUnit 16/16、checkpatch 0 错 0 警、arm64 交叉构建 0 警告
功能 设备节点与 SELinux /dev/redisp0 存在且标签正确(dev_redisp_file)、旧节点缺席、无 avc 拒绝、HDI 两个宿主进程正常 open/ioctl
功能 ioctl 全量 13 个请求码逐一验证:显示信息查询、提交、翻页、vsync 等待、格式切换、DMA-BUF 导入/释放、overlay、日志写入、缓冲分配、present fence、寄存器 dump(含尺寸协商与负向用例)
功能 送显链路 launcher UI 在 enforcing=1 下正常显示;送显环路逐槽位走查通过,寄存器回读与预期一致
性能 帧率 负载下内容 FPS 贴住面板刷新上限:实测 69.0–69.1 fps,vsync 周期约 14.48 ms;fence 间隔 14.45–14.51 ms,序号严格单调
性能 长时 soak 240 min 与 600 min 连续负载,69.05 Hz 稳定,内核日志 0 错误行
可靠性 挂起/恢复 20/20 周期全部健康:每次均真挂起、恢复后 launcher 画面正常、寄存器逐周期核对无异常
可靠性 异常注入 运行时开关热切换、合成器进程 SIGKILL 后恢复、120 s 负载无 fd/RSS 泄漏;
内存 归因 soak(120 min 负载 + 30 min 空闲) 内核侧 31 万次送显内存全平:SUnreclaim −544 kB(泄漏下限约 19 MB)、无 kmalloc 桶随送显增长、dma-buf 对象数恒定、显示侧 attachment 恒定;
对比 对照 DRM 路径 帧率约 60 fps ≥ DRM 约 57.6 fps;PSS 33.7 MB < 42.6 MB 且无 swap;每帧 CPU 开销相当

五、测试关注点(需要提醒QA重点关注的、可能会忽略的地方)

检查点:

需求名称 是否影响公共模块 是否需要回归 UI 升级是否依赖其他子产品
显示框架整机交付 是(显示 HDI、gralloc、SELinux、init 配置) 需要 需要(vendor + system 镜像同刷)
帧率度量与 present fence 否 需要(滑动帧率) 不需要

接口测试:

  • 13 个 ioctl 需全覆盖,重点:present fence 的签发时机、序号单调性与并发上限;寄存器 dump 的尺寸协商(缓冲不足返回 -ENOSPC 并回填所需大小);缓冲分配的 usage 路由与池配额上限。
  • 负向用例:旧设备节点必须缺席;已移除的寄存器 dump 旧编码必须返回 -ENOTTY;enforcing=1 下节点标签与访问权限。
  • AVC 检查的正则必须同时覆盖新旧两套名字,单按新名字过滤会永远漏报(拒绝行中同时出现节点路径与 SELinux 类型)。

性能测试:

  • 帧率采用双口径交叉校验:debugfs 计数器每秒增量与内核日志中的每秒 FPS 行应一致;负载下应贴住面板刷新上限,静止时内容 FPS 接近 0 属预期(系统按脏区重绘)。
  • soak 不少于 2 小时并附空闲尾段:内核侧内存(SUnreclaim、kmalloc 桶、dma-buf 对象数)不随送显次数增长;用户态进程内存单独归因,不计入本框架结论。

并发与稳定性测试:

  • 挂起/恢复至少 20 周期,必须从 UART 驱动(resume 会复位 USB 控制器,hdc 连接会断开);每周期核对寄存器与背光,恢复后 launcher 必须可见。
  • 一轮一个归档目录,不并行开第二轮;设备 dmesg 环形缓冲仅约四分钟,长测试以脚本全程落盘为准,不以手动 dmesg 判断。
  • 每次 PM 相关运行前后确认 /sys/power/mem_sleep 为 s2idle [deep];异常中止后需手动恢复。

其他:

  • 三镜像同刷检查:内核、vendor、system 任一版本不匹配即黑屏或节点打开失败;复测镜像必须整机构建。
  • 画面证据必须落笔:计数器健康不等于屏幕有图,每次运行记录一行"屏亮/屏黑、画面是否正常"。
likedislike
合并受阻
openharmony_ciopenharmony_ci成员
9月28日 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
9月28日 评论:

感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。


Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
openharmony_ciopenharmony_ci成员
9月28日 添加了label:dco检查成功
jrongtrujrongtru
9月28日 关联了issue:[新需求]: [S9]新内核显示子系统框架redisp
jrongtru
jrongtru
9月28日 评论:

start build

likedislike
此处折叠了70条消息 查看更多
openharmony_ciopenharmony_ci成员
19 天前 删除了label:waiting_on_author
openharmony_ciopenharmony_ci成员
19 天前 添加了label:waiting_for_review
openharmony_ci
openharmony_ci成员
19 天前 评论:

您好,Committer @z-jax @leejiawei @weiyj__lk @xiechang2 ,请分配检视人员检视该PR,可以通过命令"assign [@someone_id]"分配检视人员,也可以直接评论"assign"分配给自己进行检视。


Hello, Committer @z-jax @leejiawei @weiyj__lk @xiechang2 . Please assign someone to review the PR. You can assign a reviewer by using the command "assign [@someone_id]", or you can comment "assign" to review the PR by yourself.

likedislike
lijiawei
lijiawei成员
19 天前 评论:

代码检视完成 — 2026年10月10日 08:09

已完成对 openharmony/kernel_linux_patches#592 的增量代码检视(557e0afd323c → d87294377eb4)。

增量范围: 1 个文件变更(linux-6.6/redisp_patch/redisp.patch),+66 -11 行。

检视结果: 未发现需要开发者处理的问题。

本次增量变更内容为:

  1. redisp_commit.c:新增 4 处注释块,文档化 redisp_check_plane() 的验证策略——UAPI u32 x/y 收窄为 s32 使 INT_MAX+1 变为负值被拒绝、u64 运算防止溢出、验证在 commit 阶段统一完成。
  2. redisp_uapi.c:更新 redisp_overlay_config 路径的注释,引用 redisp_check_plane() 替代 redisp_check(),描述更精确。

所有变更均为注释添加/修改,无代码逻辑变更。

likedislike
jrongtru
jrongtru
16 天前 评论:

没有问题的话麻烦合入, 谢谢

likedislike