调研窗口:2026-10-30 08:00 ~ 2026-11-02 08:00(北京时间,72 小时,覆盖周六与周日)

信源:RT-Thread 官方新闻接口与社区文章通道、GitHub(主仓库 commits / PR / Issue / releases / tags,RT-Thread org 全部 35 个仓库按推送时间核查,packages / vscode-rt-smart / sdk / pkgs-test 单列)、GitHub 仓库检索(rt-thread 关键词,按创建时间过滤)、Google News 中英文六组查询(走代理)、HN Algolia、电子工程专辑 RT-Thread 官方专栏、club.rt-thread.org 论坛(本期受站点 WAF 限制,列表与正文不可直接核读)


本期索引

  • 一、内核与版本动态
    • clang-format 锁到 22.1.8,src/ 下 73 个内核源文件一次性重排(10-30)
    • dlmodule 收掉 2022 年报告的 #5705:未初始化全局变量的四个根因一并修(10-30)
    • 版本管理 CI 与发布流程进入计划:Z 月度报告、Y 每 3 至 6 个月评审(10-30)
  • 二、安全跟进与待合并队列
    • RT-Smart mailbox 不校验内核对象指针,伪造对象可读写内核内存(10-31)
    • pipe 的 FIONREAD 直接写用户给的指针,同型缺陷连续第三次出现(10-30)
    • poll 与 epoll 的计数乘法回绕:校验按 8 字节过,遍历却走 5.3 亿项(10-30)
    • RISC-V AIA:APLIC 电平中断 EOI 无条件写 setipnum,旧版 QEMU 下延时线程不恢复(11-01)
  • 三、官方与社区活动
    • 武汉场巡回培训 10-31 落地:Edgi-Talk 双核四大实验,工程代码现场带走(10-31)
    • 11 月 4 日直播:把大模型留在 PC,用睿擎 3576 复刻 DeepSeek 蓝鲸鱼桌宠(10-30)
    • 官方新闻接口仍停在 6 月 17 日,发布侧改由媒体专栏承担(11-02)
  • 四、生态与厂商适配
    • NXP RT1180 工业以太网链接脚本进入待审队列(10-30)
    • 上一期报的两笔驱动缺陷已有补丁:DM365 SPI 除零、Bluetrum AB32 ADC 通道(10-30 ~ 10-31)
  • 五、行业应用
    • 大赛作品赛后集中开源:四个边缘 AI 视觉项目压在两款板卡上(10-30 ~ 11-01)
    • 从赛题板到产线:双 Cortex-M7 的 20 kHz 无感 FOC 与编码器闭环定位(10-31)
  • 六、本期趋势与总结
    • 趋势:合入端静、补丁端密,RT-Smart 的边界在被系统性清账
    • 局限性与去重说明

一、内核与版本动态

1.1 clang-format 锁到 22.1.8,src/ 下 73 个内核源文件一次性重排(10-30)

日期:2026-10-30 18:20(合入时间) 来源:提案 #11936

75 个文件、新增 3852 行、删除 3023 行,作者 CYFS3,关联此前的 #11653 与已合入的 #11859。问题不在格式本身:格式检查 CI 通过 pip 安装 clang-format,手动格式化工作流通过 apt 安装,两处都没有固定版本,同一份代码在不同时间可能跑出不同结果,格式检查因此不可复现。

改动拆成三个独立提交。一,新增 tools/ci/requirements-format.txt,把版本固定为 22.1.8,两条工作流都改为从该文件安装,手动工作流补上 actions/setup-python 提供 Python 环境;二,.clang-format 打开 AllowShortLoopsOnASingleLine、关闭 BraceWrapping.BeforeWhile,空循环保持单行、do-while 统一写成 } while (...);三,用同一版本递归格式化 src/ 下 73 个 C 与头文件,含 klibc、utest、perf、smp 子目录,69 个产生改动、4 个本已合规。中英文编码规范同步补上安装、版本确认与编辑器配置三节。

Kconfig、SConscript 与其他目录不在本次范围内,说明这是一次按目录推进的格式收敛,而不是全仓重排。

1.2 dlmodule 收掉 2022 年报告的 #5705(10-30)

日期:2026-10-30 10:54(合入时间) 来源:提案 #11915、缺陷 #5705

2 个文件、新增 215 行、删除 45 行,改动落在 dlelf.c 与 dlelf.h。修的是 2022 年 3 月报告、挂了四年多的缺陷 #5705:动态模块里访问未初始化全局变量时地址重叠或无法重定位。作者在最新 master 上复现后,把根因拆成四条。

一,BSS 段(SHT_NOBITS)加载后分配指针不推进,多个 NOBITS 段会重叠在同一块内存;二,原实现按段名共用 rodata、bss、data 三类的基址,没有按符号所属段的实际加载地址算重定位地址,多段场景会指错位置;三,SHN_COMMON 符号(tentative 定义的未初始化全局变量)的重定位被静默跳过——代码去读 shdr[0xfff2],拿到垃圾段名后不匹配;四,这条路径从不构建 module->symtab,导致 dlsym() 对 ET_REL 模块永远失败。

修法对应四条:BSS 段加载完成后推进分配指针;rodata、bss、data 段符号统一按「段加载地址加段内偏移」计算;为 SHN_COMMON 单独分配公共块,尺寸核算与重定位共用同一套对齐算法,并把该分支的处理提前到段名匹配之前,避免越界读;从 .symtab 收集 GLOBAL FUNC 符号构建 module->symtab,与 ET_DYN 路径从 .dynsym 构建的做法对齐。

验证在 qemu-vexpress-a9 上完成,开启 RT_USING_MODULE,运行三个测试模块,覆盖 ET_DYN 标准流程与内核符号经 GOT 导入两条路径。影响面是走 ET_REL 加载路径的 BSP,Cortex-M 系列开启动态模块的工程首当其冲。

1.3 版本管理 CI 与发布流程进入计划(10-30)

日期:2026-10-30 16:04(报告)/ 15:29(文档提案) 来源:缺陷 #11956、提案 #11955

#11956 由 kurisaW 提出,标签 enhancement,正文写明「计划中,未实现」,里程碑待 B01 盘点后排期。核心是把版本策略落到可运行的 CI、报告与发布任务上:Z 版本每月生成报告和发布提议,由人工决定是否发布;Y 版本每 3 至 6 个月结合硬件验证评审发布;对外优先推荐开发者使用 X 与 Y 基线。文中强调复用现有 GitHub Actions、QEMU BSP 与测试框架,不另起一套系统。

同日 15:29 提交的 #11955 是配套文档,把主线版本号规则与发布流程写进文档目录,尚在评审。两笔都还没合入,但方向清楚:把一个长期靠人工整理、基线容易漂移的环节改成可检查的流程。


二、安全跟进与待合并队列

2.1 RT-Smart mailbox 不校验内核对象指针,伪造对象可读写内核内存(10-31)

日期:2026-10-31 14:26(报告时间) 来源:缺陷 #11960

报告者 XueDugu,核对的基线是当天 master cbc19778。问题在 mailbox 的系统调用入口:它把用户传进来的内核对象指针直接转发给内核 mailbox API,没有校验这个对象是否属于调用者 LWP、是不是 mailbox、是否落在内核内存。于是一个非特权进程可以构造「伪造对象」,让内核按自己的规则去读写它,效果等价于一个任意内核读写的原语。

报告把时间线写得很完整:缺陷由提交 ecf2d8215961(2022-12-03,RT-Smart 系统调用边界调整)引入,首个受影响版本 v5.0.0,v5.3.0 与当前 master(5.4.0-dev)仍在。验证做了两层——QEMU 的 qemu-virt64-aarch64 全系统运行(virt、GICv2、单核、128 MiB、开 RT_USING_SMART 与 RT_USING_MAILBOX)证明用户态到内核的越界路径;Raspberry Pi Pico 2 W(RP2350)在板级验证内核 mailbox API 原语本身,后者跑的是单地址空间的普通 RT-Thread,用来说明问题不止于 Smart 的隔离层。

截至发稿,这笔缺陷没有认领、没有对应修复提案,评论只有 CI 机器人的 /claim 提示。

2.2 pipe 的 FIONREAD 直接写用户给的指针,同型缺陷连续第三次出现(10-30)

日期:2026-10-30 19:13(报告时间) 来源:缺陷 #11958

同一报告者的第二笔。pipe 的 ioctl 在 FIONREAD 与 FIONWRITE 两个分支里直接 *((int *)args) = ...,把环形缓冲的数据长度或剩余空间写进 args 指向的地址;RT-Smart 的 sys_ioctl() 把原始用户参数一路转发、没有 copyout,pipe 这一层也不判断该地址是不是用户地址。结果是普通进程可以指定任意内核地址,让内核往里写四个字节,写入的值受 pipe 当前状态约束。

影响范围 v5.0.0 至 v5.3.0 与 master(5.4.0-dev),验证在 QEMU vexpress-a9、Cortex-A9、32 位 RT-Smart、开 RT_USING_POSIX_PIPE、pipe 缓冲 512 字节的环境上完成。

这是同型缺陷连续第三次出现:先是终端子系统的 ioctl 丢掉 FreeBSD 的 copyin 前提(缺陷 #11937),接着是块设备把 24 字节分区表写到调用者指定的内核指针(#11952),本期是 pipe(#11958)。三处成因一致——fops 层沿用「参数已经是内核地址」的老假设,而用户态入口没有补上转换层。2.1 的 mailbox 缺陷属于同一个引入提交留下的家族,只是越界方式从「往里写」变成「把用户指针当内核对象」。

2.3 poll 与 epoll 的计数乘法回绕(10-30)

日期:2026-10-30 11:59(提案时间) 来源:提案 #11954

1 个文件、新增 28 行,修 #11925 的前半部分。sys_poll() 用用户给的数量算内核缓冲区大小,32 位下乘法会回绕,但随后仍用未回绕的原始数量遍历:nfds 取 0x20000001、pollfd 结构 8 字节时,乘积 0x1_00000008 被截成 8;访问校验与 kmem_get 都按 8 字节通过,poll() 却会遍历 536,870,913 项,do_pollfd() 里读 pollfd->fd、写 revents 全部落在分配块之外。64 位构建不受影响,乘积提升到 64 位,超大分配直接返回 ENOMEM。

sys_epoll_pwait() 是同一形状,且它的计数是 int,负值也要一并拒绝。修法是在拿这些数量算任何大小之前先判:nfds 大于 SIZE_MAX / sizeof(*fds) 就返回 -EINVAL;epoll 侧再加计数小于 0 的判断。写法与 sys_sendmsg、sys_recvmsg 里对 msg_iovlen 的校验保持一致。

同一批在途的还有 #11899(sys_sigaction 校验信号号)与 #11895(信号投递顺序与 ELF 段保护),共同点是把用户态传入的编号、长度、指针在进入内核逻辑前先校一遍。

2.4 RISC-V AIA:APLIC 电平中断 EOI 无条件写 setipnum(11-01)

日期:2026-11-01 20:40(提案时间) 来源:提案 #11966

8 个文件、新增 1367 行、删除 10 行。现象是 QEMU 8.2.2 上跑 bsp/qemu-virt64-riscv、RV64、四核 SMP 加 AIA(APLIC 与 IMSIC)配置时,一个带 rt_thread_mdelay(1000) 的计数程序只打印出 RISC-V test: 0 就停住,延时线程再也回不来。

定位结果是 APLIC 驱动在处理电平中断的 EOI 时无条件写 setipnum_le。旧版 QEMU 在设备已经撤销中断之后,仍可能因为这次写入产生新的 MSI,形成持续的虚假中断,把系统定时器的处理压住,延时线程因此无法恢复。修法是先读 in_clrip 里对应的有效输入状态(rectified input,已考虑中断极性),只在设备仍保持中断有效时才写 setipnum_le——既保住电平中断的重触发能力,也不给已撤销的中断补一发。

复现程序也一并改了:BSP 的 main.c 从「打印一次 Hello RISC-V」改成 0 到 9 的计数循环,每次打印后延时一秒。验证环境为 QEMU 8.2.2、OpenSBI v1.3、riscv64-unknown-elf-gcc 13.2.0;开着 AIA、四核、关掉网络与 NVMe 与 virtio-console 与 PCI 串口的三组配置都能完整输出。


三、官方与社区活动

3.1 武汉场巡回培训 10-31 落地,Edgi-Talk 双核四大实验(10-31)

日期:2026-10-31 10:00 ~ 17:30(活动时间) 来源:官方专栏:武汉场实操

RT-Thread 巡回培训武汉场在武汉地质大学西区教二楼 801 教室举行,硬件是英飞凌 PSoC Edge E84 的 Edgi-Talk 双核开发板,四个实验串起来讲:GUI 显示、手写识别、LLM 网页端部署、小智 AI。工程代码与配置文件现场全量提供。

LLM 那一段走的是 llmchat 软件包加通义千问(默认 qwen-plus),再开 llmchat 的 webnet 模式,用浏览器访问板子 IP 就能对话。文章把踩坑点写得很细:webnet 线程栈要提到 8K,mbedtls 的最大分片长度要改成 6144,否则 TLS 握手失败;lwIP 线程栈要 4096;html 要用 ymodem 传到 /flash/webnet 目录。

小智 AI 那一段用官方的 Edgi_Talk_M55_XiaoZhi 工程,首次配网默认进 AP 模式,手机连上板子发出的热点后打开默认网关页面选 Wi-Fi;唤醒词「小睿,小睿」,再说「打开灯」「调亮屏幕」这类指令,由 MCP 落到 LED、背光与音量三个外设上。这块板卡是本届嵌入式大赛的指定平台之一,培训实际上承担了赛前带练的角色。

3.2 11 月 4 日直播:把大模型留在 PC,用睿擎 3576 复刻蓝鲸鱼桌宠(10-30)

日期:2026-10-30 11:50(发布) 来源:官方专栏:睿擎 3576 桌宠直播

11 月 4 日(周三)20:00,睿擎技术直播间做一场「用睿擎 3576 复刻 DeepSeek 蓝鲸鱼桌宠」的实机演示。作者已经把 PC 端的 DeepSeek 与 3576 开发板连起来,复刻的是 DeepSeek Harness 里的桌宠形象。

架构选择值得记一笔:不在板子上跑大模型,把「大脑」留在 PC,把「肉体」交给 3576。直播要讲四段——算力放在哪、人设怎么定;板子与电脑不在同一网段时怎么通过 DSH 的手机桥入口配对,现场用 curl 拿短时 Token 换通信用的 Cookie 再发 RPC;session.create、session.prompt 这些接口怎么把文字发出去、把回复读回来;后续用 LVGL 画倾听、思考、说话三种状态,接 ASR 与 TTS,再让大模型直接控外设。

这条线对做端侧 AI 的团队有参考价值:它承认端侧算力边界,把交互与呈现放在板端、把推理留在上游——与大赛作品里「NPU 跑小模型、复杂判断上云」是同一套取舍。

3.3 官方新闻接口仍停在 6 月 17 日(11-02)

日期:2026-11-02(核查) 来源:RT-Thread 官方新闻列表

官方新闻接口返回的最新条目仍是 2026-06-17 的「睿赛德科技受邀出席 2026 阿布扎比投资论坛」,本期无新增。官网新闻列表首页同期也没有新稿。

发布侧的实际出口已经转到媒体专栏:电子工程专辑的 RT-Thread 官方专栏在窗口内更新两篇(10-30 的武汉场与 11-04 直播预告),另有一篇 11-01 的双十一促销稿未收录。社区侧的作品帖与讨论仍在论坛,但站点前置了 WAF 挑战页,本期无法直接读取列表,参赛作品信息改由 GitHub 仓库自述与媒体专栏交叉核验。


四、生态与厂商适配

4.1 NXP RT1180 工业以太网链接脚本进入待审队列(10-30)

日期:2026-10-30 19:57(提案时间) 来源:提案 #11959

一笔针对 NXP i.MX RT1180 的 BSP 提案,补的是工业以太网场景需要的链接脚本。RT1180 带多路千兆以太网与 TSN 交换,这类工程对内存分区与段布局的要求比通用 BSP 严格,链接脚本往往要先落地,驱动与其他外设才好接。提案仍在队列,尚无合入时间。

同窗口的硬件侧与底层小修还有三笔在排队:#11961 为 C++ 线程初始化静态 TLS;#11965 阻止 gcc 把 klibc 里 kstring.c 的字节循环识别成 memset 与 memcpy 调用——自实现的字符串函数被编译器改写成库函数调用,这类改写在内核自举语境下需要单独交代;#11963 与 #11964 是两笔 utest 补测,分别让 mailbox 用例可以重复运行、覆盖信号投递到 mdelay 阻塞线程的情形。

4.2 上一期报的两笔驱动缺陷已有补丁(10-30 ~ 10-31)

日期:2026-10-30 18:16 / 10-31 21:11(提案时间) 来源:提案 #11957、提案 #11962

上一期报告里那四笔驱动侧缺陷,已有两笔等到了补丁。#11957 对应 DM365 SPI 的除零:在 setup 阶段拒绝 max_hz 为 0,避免预分频计算把它当除数。#11962 对应 Bluetrum AB32 的 ADC:在读取前校验通道号,不再让映射失败后默默回退到 0、再拿原始通道号索引数据寄存器数组。

两笔都还没合入,另外两笔(Bouffalo ADC 越界读 #11949、HPM ADC 通道状态索引 #11951)本期仍无对应提案。这类缺陷的共同点没变:rt_adc_read() 与 rt_spi_configure() 这一层不做参数校验,把责任下推给每个驱动,而多数驱动没有做。


五、行业应用

5.1 大赛作品赛后集中开源:四个边缘 AI 视觉项目压在两款板卡上(10-30 ~ 11-01)

日期:2026-10-30 ~ 2026-11-01(仓库创建时间) 来源:仓库:Titan Mini PCB Inspector

窗口内 GitHub 上出现 15 个新建的 RT-Thread 相关仓库,其中 7 个自述为 2026 RT-Thread 嵌入式大赛参赛作品,集中开源时间落在 10-30 至 11-01,与大赛「作品在论坛发帖并把代码开源」的要求对得上。

瑞萨 Titan Board Mini(RA8P1,Cortex-M85 加 Ethos-U55)上有两个。一是 Titan Mini PCB Inspector:摄像头看板、800×480 LCD 显示、串口 HMI 交互,Ethos-U55 做本地推理、云端大模型写建议,断网时退回表驱动专家规则,不静默失效。二是灵犀智眸:INT8 量化的姿态模型单帧检测最多 10 人、每人 17 个关键点,再按规则判举手、趴桌、站立、坐正四类行为,加权后输出 0 到 100 的专注度评分,事件带时间戳写 SD 卡 CSV,原始画面不出教室。

富瀚 MC632X(Cortex-A7)上有两个同名 SENTINEL。一个接 M5Stack AtomS3R 小智做语音播报,双路 800×480 MJPEG 网页预览、人形检测与绊线进出统计,夜间转周界布防与录像留证;另一个强调脱离 PC 独立运行,一根电源线一根网线,上电后自动完成配网、媒体管线与 Web 服务启动。

四个项目的取舍一致:模型压到端侧 NPU 或 MCU,复杂判断上云或交给规则引擎,原始画面不出设备。这与 3.2 直播里「大脑在 PC、肉体在板端」是同一套工程判断。

5.2 从赛题板到产线:双 Cortex-M7 的 20 kHz 无感 FOC 与编码器闭环定位(10-31)

日期:2026-10-30 ~ 2026-11-01(仓库创建时间) 来源:仓库:NS800RT7P65D FOC 与 CANopen

纳芯微 NS800RT7P65D 是双 Cortex-M7 的电机控制芯片,这个项目把它拆成两个逻辑 CPU:一个跑 20 kHz 的 ADC 采样与 PWM,做无感 FOC、滑模观测器与 PLL 估算,带硬件关断;另一个跑 UART 与 FinSH、CANopenNode v4.1 与 CiA 402 桥接、CAN 收发。跨核只走异步命令邮箱和一份六字段、24 字节的一致性快照,不做共享内存乱读。底层是 RT-Thread 5.3.1 的 SMP 配置。

英飞凌 PSoC Edge E84 上的 EdgeDoctor-RT 走另一条路:每 20 毫秒处理一个振动数据块,1 秒滑动窗口提 64 维频带特征,送 64-32-5 的 MLP 判正常、轴承内圈故障、轴承外圈故障、不对中、不平衡五类状态,并给置信度与处置建议;基线是官方的 Edgi_Talk_M55_XiaoZhi v1.4.0,只叠应用层,不改启动、链接、HAL 与 Wi-Fi 资源。

两例运控作品更能说明赛题板的下沉程度:NXP FRDM-MCXA346 上一个做步进电机闭环定位,编码器反馈加 Python 与 Tkinter 上位机,跑 10 度与 90 度定位、相对反转 45 度与回软件零点;另一个做超声波避障加烟雾检测的检测小车,视觉识别放在 PC 侧。

平台分布值得记一笔:Titan Board Mini 与 MC632X 各两块、PSoC Edge E84 一块、NS800RT7P65D 一块、FRDM-MCXA346 两块,覆盖大赛板卡清单里的五款。


六、本期趋势与总结

6.1 趋势:合入端静、补丁端密,RT-Smart 的边界在被系统性清账

本期 72 小时里主仓库只有 2 笔合入(10-30 10:54 的 dlmodule 修复、18:20 的 clang-format 重排),但新建提案 11 笔、新建缺陷 3 笔,全部落在 10-30 至 11-01。周末窗口「合入少、提交多」属常态,值得看的不是数量而是落点。

第一条线是工程基础设施。clang-format 锁版本解决的是同一份代码在不同机器上格式结论不同;版本管理 CI 与发布流程解决的是基线漂移、Z 与 Y 的发布边界不清。两件事都不改一行内核逻辑,却决定了后面所有补丁能不能被稳定评审——上一期把 lwp 那一万一千行的单文件拆成 20 个文件,走的是同一条路。

第二条线是 RT-Smart 的用户态边界。终端 ioctl、块设备 ioctl、pipe ioctl、mailbox 对象指针,四处问题形状一致:fops 与系统调用层沿用「参数已是内核地址、对象已是内核对象」的老假设。报告者把引入提交追到 2022-12-03 的 ecf2d8215961,说明这不是新代码引入的回归,而是这条边界从建立起就没做过系统性校验。在途补丁覆盖 poll 与 epoll 的计数回绕、sigaction 的信号号、ELF 段保护与静态 TLS,方向对,但 mailbox 与 pipe 两笔还没有人认领。

第三条线是生态侧的表达方式。官方新闻接口停在 6 月 17 日已进入第六个月,对外发布改由媒体专栏承担;社区活跃度则明显转到「作品」上——一个周末 7 个大赛作品开源到 GitHub,五个落在边缘 AI 视觉与诊断,两个落在电机与运动控制。对关注 RT-Thread 落地的人来说,这批仓库比官方通稿更能说明板卡厂商与开发者在拿它做什么。

6.2 局限性与去重说明

论坛 club.rt-thread.org 本期前置 WAF 挑战页,作品帖列表与文章正文无法直接读取,参赛作品信息改由 GitHub 仓库自述(README、目录结构、创建时间)与电子工程专辑官方专栏交叉核验,未逐帖比对论坛原文。

HN Algolia 窗口内 5 条命中全部是 thread 的词义误匹配(Pulling on a Thread、HN Replies、法国下载税等),整批剔除;Google News 英文侧零命中,中文侧 3 条命中里 2 条收录(武汉培训、11-04 直播),11-01 的双十一促销稿未收录。上一期列入待审队列的 #11897(K230D)、#11892(RISC-V Smart MMU)、#11944(RTL8125)、#11943(RK3588 显示音频)本期仍在队列、未有合入,故不重复成条。


附录:信源核查表与信源清单

信源核查表

信源 核查结果
官方新闻接口(rt_org) 72 小时无新增,最新条目停在 2026-06-17
社区文章接口 站点前置 WAF 挑战页,列表与正文本期无法直接读取
主仓库 commits 窗口内 2 笔(10-30 10:54、18:20)
主仓库 PR 合入 2 笔(#11915、#11936);新建 11 笔,全部在审
主仓库 Issue 新建 3 笔(#11956、#11958、#11960)
主仓库 releases 与 tags 无新增,最新仍为 v5.3.0(2026-09-10)
RT-Thread org(35 仓库) 仅主仓库窗口内推送;packages 10-23、pkgs-test 10-23、sdk 10-25、vscode-rt-smart 10-26 均在窗口外
GitHub 仓库检索(rt-thread) 新建 15 个,其中 7 个自述为 2026 嵌入式大赛作品
Google News 中文 3 条命中,收录 2 条,1 条促销稿未收录
Google News 英文 零命中
HN Algolia 5 条 thread 词义误匹配,整批剔除
电子工程专辑官方专栏 窗口内 2 篇(10-30),均已收录

完整信源清单