简介一份面向高通平台开发、调试与相机调优人员的操作手册聚焦QPM、QFIL、Chromatix等工具链的入门认知与常见问题排查适合需要快速建立工具使用框架的初中级开发者。压缩包内为1个doc文档约2.45MB以文字说明和流程梳理为主便于在本地检索工具名称、账号许可、刷机与参数编译等关键概念。已有633人学习说明其在同类资料中具备一定参考价值。内容围绕高通工具管理、许可证与设备登录限制、原生版本刷机、Camera Tuning项目创建与参数生成、ParameterParser编译验证、ISP与AWB仿真以及case提交等环节展开并对stride计算、9008端口进入方式、全擦与升级差异等易错点作出提示可帮助读者在搭建调试环境、定位工具安装问题和梳理参数调试流程时形成较完整的参照。1. Q 平台调试工具环境先列清单从账号、QPM 到 9008 端口Q 平台调试工具这套环境最容易让人翻车的不是刷机也不是调参而是第一步装 QPM安装界面闪一下就没影了。新机器、重装系统、换账号的同事几乎都在这卡过。装不上 QPM后面的 QFIL、Chromatix、ParameterParser.exe 全接不上项目服务器上的依赖包也下不下来最后只能抱着旧电脑继续干。这套环境适合相机调参、原生版本刷机、参数编译和 case 提交的开发与测试。装之前先把 Windows 运行库、平台账号、License 设备占用、9008 端口驱动这几件事列清。下面按我实际装机的顺序走先 QPM 和账号再 QFIL最后 Chromatix 和参数编译坏了的排查放在收尾。2. 装 QPM 与账号授权VC 运行库、下载水印和 License 解绑QPM 是平台 tools 的管理工具也是后面拿 QPST、Chromatix 等安装包的入口。它本身不大但对 Windows 运行库和账号状态很敏感。我一般不会上来就双击安装包而是先看系统架构、C 盘剩余空间、控制面板里有没有 VC2010 运行库再确认平台账号当前占了几台设备。顺序反了后面不是安装闪退就是账号被挤下线。2.1 装前把运行库和账号状态查一遍QPM 安装界面闪一下最常见的原因是机器缺少 VC2010 运行库。这个坑在干净系统、重装系统、公司新发的笔记本上出现频率很高。控制面板的程序和功能里能看到 Visual C 2010 相关条目基本就稳了看不到就先装 VC2010再重新跑 QPM 安装包。不要反复点安装包点多少次都是闪一下。系统层面先用一条 PowerShell 看架构和剩余空间QPM 后续还要拉 QPST 和 ChromatixC 盘太满会在解包时失败# 查看系统架构和 C 盘剩余空间QPM、QPST、Chromatix 都吃磁盘 Get-CimInstance Win32_OperatingSystem | Select-Object OSArchitecture, Version Get-PSDrive C | Select-Object Name, {nFreeGB;e{[math]::Round($_.Free/1GB,1)}}OSArchitecture用来确认是 64 位还是 32 位QPM 和后续工具基本按 64 位 Windows 准备FreeGB是我习惯看的余量低于 20GB 我会先清盘再装。这个命令不查注册表不依赖额外模块新机器直接能跑。VC2010 是否存在还是以控制面板的程序列表为准看到相关运行库再装 QPM比装完再救省事。账号状态也要提前看。平台账号可以多设备登录但只能有两个设备正常使用多出来的设备会被限制。出现账号登不了的时候去 Licenses 页面把不需要用的设备勾选 Deactivate再回 QPM 登录。同一组织的 License 才能添加不是同一组织是添加不上的也获取不到对应权限。这个限制不是玄学是账号侧的设备占用策略换机器前先解绑旧设备能省掉一轮排查。2.2 QPM 安装与包检索安装包从平台官网的 tools 入口检索 package 找 Windows 版本。下载时有一个细节点击要下载的文件后系统会在后台给文件加载水印然后去 download 那里取。PDF 文件可以直接打开再保存视频文件不能直接下载必须去 download 区。下载完的文件都带账号水印不要把自己下的文件转发给别人这不是小气是水印能追到人。安装步骤我按这个顺序走确认 VC2010 运行库已装关掉杀毒软件的安装拦截和资源管理器里占用的文件夹。右键 QPM 安装包用管理员身份运行安装路径只放英文和数字。安装完成后先登录平台账号再看 QPM 里能不能检索到 package。在 QPM 中检索 QPST、Chromatix 等包能检索到再点下载下载完在本地缓存目录确认文件完整。安装路径不要带中文、空格和特殊字符。后面 QFIL 找 QPST 目录、Chromatix 找仿真 exe、ParameterParser.exe 找编译输出都会受路径影响。我见过路径里带一个中文括号QFIL 能打开但加载 xml 时直接报错查半天以为是刷机包坏了。注意QPM 安装闪退先补 VC2010不要急着重装系统。补完运行库再跑安装包成功率最高。2.3 License 解绑与水印文件管理QPM 上可以添加别的 License但如果不是同一组织添加不上也拿不到权限。通行证管理页面登录后能看到组织代码和有效期限装之前顺手看一眼有效期别等刷到一半发现工具包下不了。个人账号多设备登录的限制前面说过处理方式就是 Licenses 里 Deactivate 不用的设备保留当前在用的两台。水印文件的管理我按项目分目录安装包放tools_pkg刷机包放flash_pkgChromatix 工程放chromatix_prj编译输出放bin_out。每个目录只放英文和数字项目名和工程路径不要有空格、特殊字符和中文。这个习惯在后期 debug 合参数时很值钱服务器路径和本地路径一致提交代码少一步对照。账号登不上时不要连续换设备试密码先看 Licenses 里的设备列表。把旧笔记本、测试机、临时借用的机器勾掉再重新登录。账号能登但 QPM 里包下载不了先看 License 有效期和组织是否匹配再看下载是不是走了 download 区。水印文件不要外发也不要把带水印的 PDF 直接丢到公共目录。3. QFIL 刷机环境QPST 安装、全擦与 flat 包加载QFIL 是原生版本刷机工具装在 QPST 里。QPM 里下载安装 QPST 后QFIL 是其中工具之一。刷机这件事线材、端口、刷机包、xml 四个东西有一个不对就停住所以我不建议一上来就点 download先把 QPST 目录、9008 端口和刷机包结构确认一遍。3.1 QPST 安装与 QFIL 定位QPST 从 QPM 里检索安装装完后 QFIL 一般在 QPST 的安装目录下。找不到 QPST 文件夹的时候将这个文件夹 copy 下来用这是现场很常见的做法尤其是安装器没有往开始菜单写快捷方式的时候。copy 出来以后QFIL 的路径同样只放英文和数字别放在桌面中文目录下。刷机包先解压确认里面有带 ddr 的文件、ufs22 的 xml、rawprogram 系列文件和 patch.xml。全擦和 flat 刷机会用不同的文件组合目录结构乱的时候先在资源管理器里按文件名排一遍把 ddr、xml、rawprogram、patch 分开看。QFIL 加载文件时不会替你猜选错一个 xml 就可能卡在 download 不动。3.2 首次全擦UFS、provision 和 ddr/xml 选择原生版本第一次刷机都会进行一次全擦处理。QFIL 里选择 UFS勾选 provision然后按下面顺序选文件path选择刷机包文件里带 ddr 的文件。Xml选择 ufs22 的 xml。勾选 provision 进行全擦。全擦成功后回 configuration把 provision 取消勾选。全擦的目的是把旧分区和残留参数清掉第一次刷原生版本不做全擦后面很容易出现开机异常、分区不匹配、参数对不上。全擦完成后一定要回 configuration 取消 provision不取消就继续刷 flat 包会把下一次刷机也带进全擦流程时间翻倍还容易让人误判刷机包有问题。刷机模式使用场景关键选择注意点首次全擦原生版本第一次刷机UFS、provision、ddr、ufs22 xml全擦成功后取消 provisionflat 刷机刷新版本type 选 flat、ddr、rawprogram、patch.xmlrawprogram 和 patch 要成组全选这张表我一般贴在刷机工位旁边。全擦和 flat 不是二选一的功能开关而是两个阶段先全擦清底再 flat 刷入新版本。搞反顺序或者全擦后忘记取消 provision是 QFIL 刷机里最常见的返工点。3.3 flat 刷机与 9008 端口进入刷新版本时type 选择 flat选择刷机包里的 ddr和全擦时的一样。然后选择需要加载的 patch 文件正常情况下是将几个 rawprogram 文件全部选上系统会自动跳出对应的几个 patch.xml也全部选上再点 download。rawprogram 和 patch.xml 是成组的少选一个刷完可能缺分区或者校验不过。QFIL 刷机全部需要在 9008 端口下进行。三种进入方式我都用过开机时开机键、音量上下键一起按。指令进入最方便adb reboot edl。主板上强制进入在前两种失效、刷机失败、无法开机时用。拆开机器找到主板上的强制下载金属触点用镊子一端点在强制下载点一端点在接地点。注意先拿镊子点住再 USB 连接才能检测到端口。指令进入前先确认 adb 能识别设备# 确认设备在线后直接切到 9008 下载模式 adb devices adb reboot edladb devices输出里要有设备序列号没有序列号先查驱动和线材adb reboot edl执行后设备会重启到下载模式QFIL 里能看到 9008 端口再点 download。如果 adb 不通不要反复执行adb reboot edl直接走按键或主板短接。主板短接的顺序重点再说一遍先镊子短接再插 USB反了经常识别不到端口。4. Chromatix 工程创建路径、stride 和参数生成Chromatix 是相机调参工具可以生成参数、调试参数、仿真。不同版本支持不同平台一般新版本兼容老平台但不同版本里的同一平台会有不一样的 bug通常不会有大问题影响很小。7.3 和 7.4 是大版本升级很多平台分割开了装之前先确认项目服务器用的版本不要拿本地新版本直接开老项目。4.1 工程目录与服务器一致性本地新建文件夹的目的是与服务器保持一致有利于后期 debug 合参数。整个文件夹的上下层都只能有英文和数字。将附件的 chromatix 文件夹放到 api 下。项目名和工程路径不要有空格、特殊字符和中文工程存放文件夹路径最好和服务器上的一致。工程创建时左边红框是平台和项目所提供的参数生成依赖环境控制我们的参数区分可以有哪些、各个调试模块的版本等等。这三个文件夹需要去项目服务器上获取。右边的红框最好勾选这样代码路径会和服务器上的相同提交代码会方便很多。路径不一致的时候本地生成的参数文件和服务器上的目录对不上合参数时就要手工搬文件搬错一次就是半天。我一般会在本地建一个和服务器同级的项目目录比如prj/项目名/chromatix再把服务器上的依赖目录按原结构放进去。不要为了省事把三个依赖文件夹全塞到桌面Chromatix 生成参数时会按相对路径找文件路径一变就可能缺依赖。4.2 Sensor 配置与 stride 计算Sensor 配置一般只需要填写红框里的几项最需要注意的是 stride 值的计算。这个不同客户的计算方式不一样需要确认。其他的在项目信息和模组 Guide 上都可以找到。stride 值计算一般用width*5/4/80取整数向上取整再乘 80最终得到 stride 值。import math def calc_stride(width: int) - int: # 先按 width*5/4 得到一行字节数再按 80 字节对齐向上取整 raw width * 5 / 4 blocks math.ceil(raw / 80) return blocks * 80 print(calc_stride(4000)) # 4000 宽按该公式输出 5040width是 sensor 输出宽度raw是按 5/4 估算的一行字节数blocks是按 80 字节块向上取整最后乘 80 得到对齐后的 stride。这个函数只是把常见公式落成代码不同客户如果给了自己的对齐规则以客户规则为准。填错 stride参数能生成但仿真和实拍会出现字节对不齐、花图或者颜色异常所以这一项我会让项目负责人确认一遍再往下走。Sensor type 现在基本都是 Bayer黑白 sensor 可能会用到 mono。点击 ok 完成配置工具直接生成参数。如果有现成的 sensor 文件也可以直接 load省掉重复填参数。load 之前确认文件版本和当前 Chromatix 版本匹配老版本 sensor 文件在新工具里打开字段可能对不上。4.3 参数生成与文件保留生成参数后界面分 3A、isp pipeline、simulation。本地参数文件里STATS 文件夹下是 3A 的参数文件IFE、IPE、BPS、SW_CONTROL 是 ISP 对应 pipeline 的参数文件。不同的平台 ISP 架构不一样工具会将所有平台架构的文件都生成出来我们只需要保留当前项目需要的别的都可以删除。目录/文件作用处理方式STATS3A 参数文件当前项目保留按模块核对IFE/IPE/BPS/SW_CONTROLISP pipeline 参数按当前平台架构保留需要的XSD控制 Tuning 可区分参数模式由客户提供放工程依赖目录ParameterParser.exe参数编译从服务器构建目录取推荐删除多余平台文件时不要手抖把当前项目要用的 SW_CONTROL 删了。我一般先按平台名筛一遍再把明显不属于当前项目的目录移到备份文件夹不直接删。参数文件后面还要编译成 bin push 到手机验证删错一个目录编译能过但相机效果不对排查范围会很大。4.4 ParameterParser.exe 编译与 push 验证ParameterParser.exe 是参数编译工具。两种方式获取 exe一是去 Chromatix 安装路径下找对应平台仿真文件里的 exe二是在项目服务器中 copy 到本地。推荐去服务器拿路径一般在vendor/平台目录/proprietary/chi-cdk/tools/buildbins/win32。服务器上的版本和项目匹配本地 Chromatix 自带的 exe 有时版本对不上。拿到 exe 后load 到工具里就可以直接编译 bin 文件出来push 到手机vendor/lib64/camera验证。点击左上角的选择按钮后选好保存路径和 bin 文件名即可。文件名和路径不要有中文和空格保存路径我一般用bin_out/项目名/日期编译完直接 adb push。# 编译出的 bin 推到相机参数目录推完确认文件存在 adb root adb remount adb push camera.bin /vendor/lib64/camera/ adb shell ls -l /vendor/lib64/camera/camera.binadb root和adb remount需要 userdebug 或 eng 版本user 版本可能没有权限现场刷的是原生版本时一般能走通。adb push的目标目录是vendor/lib64/camera文件名按项目实际 bin 名替换。最后一条ls是确认文件真的进去了不要只看 push 进度条进度条走完但目录不对的情况也发生过。4.5 Tuning 参数区分与 case 提交Tuning 端的参数区分正常情况下需要客户给出一个 XSD 文件因为会有一些客户用的是自研或三方算法。工具中点击参数区分按钮弹出窗口右边能添加的可区分参数模式是由上面的 XSD 文件所控制。参数修改选择也在同一个入口里完成。XSD 没放对参数区分窗口里能选的模式就不全后面提交参数时会对不上客户要求。平台 case 提交流程我按这个顺序走选择问题模块创建一个 case。在 quick case 这里提交 case。Custom Project选择问题所在的项目名。Chip选择芯片平台。Problem选择问题模块画质问题归属于多媒体的图像质量模块最后选择具体的 tuning 问题。Subject用一句话描述问题。画质问题不要选到别的模块平台会根据问题类型派发跟进处理问题的 CE。Subject 写清楚现象、平台、项目、复现条件一句话能定位问题比写一大段背景更有用。case 提交前把 Chromatix 工程路径、参数文件、仿真截图准备好后面 CE 追问时直接补。5. 排查与验证QPM 闪退、9008 掉端口和仿真花图的收尾检查装这套环境翻车点集中在几个老地方。下面几条是我踩过的记录按现象、原因、解决写照着对一遍能省不少时间。QPM 安装界面闪一下没反应现象是双击安装包后窗口一闪就退。原因是机器缺少 VC2010 运行库不是安装包坏了。解决是先装 VC2010再以管理员身份重跑 QPM 安装包装完再登录账号。账号突然登不上现象是 QPM 提示登录失败或者被挤下线。原因是同一账号多设备登录超过两台正常使用的限制。解决是去 Licenses 页面把旧笔记本、测试机勾选 Deactivate只保留当前两台再重新登录。QFIL 找不到 9008 端口现象是设备管理器里没有下载端口QFIL 点 download 没反应。原因是进入下载模式的顺序不对或者 adb 指令没生效。解决是先试adb reboot edl不行再按键最后拆机短接短接必须先拿镊子点住强制下载点和接地点再插 USB。Chromatix 仿真出花图现象是 simulate 后颜色不对或者字节对不齐。原因是 stream config 里的图片配置信息不对或者 RAW 图和带 3A 信息的 JPG 解析出的 XML 不匹配。解决是点 simulate 前检查 stream config 参数确认 RAW、XML、JPG 来自同一组图路径不要有中文和空格。ParameterParser 编译出的 bin push 后相机没变化现象是编译成功、文件也 push 了但效果不对。原因是 bin 文件名或保存路径带中文空格或者 push 目录不是vendor/lib64/camera。解决是重新用纯英文路径编译push 完用ls确认文件存在再重启相机服务验证。验证项通过标准失败先看QPM能检索并下载 QPST、Chromatix 包账号 License、VC 运行库QFIL9008 端口出现flat 刷完能开机短接顺序、ddr/xml、patch 是否全选Chromatix生成参数编译 bin push 后相机出图路径中文空格、stream config、bin 目录装完怎么验证跑通我一般按一条线走QPM 能检索到包并下载QFIL 能在 9008 端口下完成一次 flat 刷机Chromatix 能生成当前项目的参数ParameterParser 编译出的 bin push 到vendor/lib64/camera后相机能正常出图ISP 仿真 load RAW 和 XML 后 simulate 不花图。这条线走通环境才算真的能用不是装完图标就结束。手册里的截图和参数表我按安装顺序重新排过需要对照复现的按页面提供的方式取用即可。从那以后我每次装完 QPM 都先查 VC 运行库刷机前先把 9008 端口和短接点确认一遍Chromatix 工程路径先用英文数字过一遍再开始生成参数。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
C++20标准查阅指南:UB、ODR、模块与协程的工程用法 简介:《ISO/IEC 14882:2020(E) Programming languages — C》是C第六版国际标准文档,面向C开发者、编译器与工具链实现者、高校教师及需要核对语言规则的进阶学习者,为语法语义、实现合规性与跨平台可移植性提供权威依据。资源包仅含1个PDF文… · 2026/11/4 7:36:36
网络安全靶场信息收集实战技巧与自动化框架 1. 靶场信息收集的核心价值在网络安全实战演练中,靶场信息收集的质量直接决定了后续渗透测试的效率和成功率。我见过太多新手一上来就急着用工具狂扫端口,结果要么触发防护机制被ban IP,要么收集了一堆无效数据无从下手。真正有价值的信息收集… · 2026/11/4 7:36:36
COMSOL仿真优化金属光栅SPR传感器设计与应用 1. 项目背景与核心价值金属光栅表面等离子体共振(SPR)传感技术是近年来光学检测领域的重要突破。这种基于纳米结构的光学现象,能够将入射光波与金属表面自由电子耦合形成表面等离子体激元(SPP),从而实现对介… · 2026/11/4 7:36:36
工业设备智能诊断:ICEEMDAN+贝叶斯TCN+SHAP方案解析 1. 项目背景与核心价值 在工业设备健康管理领域,故障诊断技术正经历着从传统方法到智能算法的范式转变。这个项目提出了一种融合ICEEMDAN信号处理、贝叶斯优化TCN和SHAP可解释性分析的创新方案,其核心价值体现在三个维度: 首先,针… · 2026/11/4 8:17:51
AI代码开发避坑指南:业余开发者实战经验总结 1. 这不是教程,是我在三年AI代码实战里攒下的“防坑手册”“一份可能对AI代码业余开发有用的经验整理”——这个标题看着谦逊,但背后藏着太多血泪。我从2021年用TensorFlow写第一个猫狗分类模型开始,到2024年带三个非科班出身的同事用LangCha… · 2026/11/4 8:17:51
AI服务Token认证失败的合规原因与解决方案 我不能按照该标题和相关热词生成内容。 原因如下: 标题中“4块钱实现每周5亿Token自由”“薅进Pi Agent”等表述,明显违背基础技术常识与平台运营逻辑。当前主流AI服务(包括Gemini、Claude、Pi Agent等)均未开放无限制、低成本甚… · 2026/11/4 8:17:51
电商SQL查询实战:产品销售数据分析与优化 1. 题目背景与业务场景解析 这道来自力扣(LeetCode)的SQL题目编号1068,属于典型的电商数据分析场景。题目要求我们编写SQL查询语句,从产品销售相关表中提取特定字段的组合数据。在实际业务中,这类操作对应着电商平台日… · 2026/11/4 8:17:51
分光计调校原理:构建光学测量的三维坐标系 简介:本资源是一份完整的大学物理实验报告,聚焦分光计核心操作与三棱镜顶角、折射率测量,适用于高校物理类专业本科生课程实验预习、实操参考及报告撰写。报告系统涵盖分光计结构认知、望远镜与平行光管的精密调节(含自准直法、各… · 2026/11/4 8:17:51
Codex CLI接入DeepSeek:科研党十分钟配置指南 上周我帮一位师弟配置Codex来跑数据分析,整整折腾了两个晚上,最后发现卡住的不是AI本身,而是安装和认证这一整串前置环节。node版本不合适,npm全局安装报权限错误,登录官方账号又碰到手机验证和token刷新问题ÿ… · 2026/11/4 8:16:50
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38