调研窗口:2026-10-29 08:00 ~ 2026-10-30 08:00(北京时间,24 小时)

信源:RT-Thread 官方新闻接口与社区文章接口、GitHub(主仓库 commits / PR / Issue / releases / tags、RT-Thread/packages、vscode-rt-smart、sdk、pkgs-test、topic:rt-thread 生态检索)、Google News 聚合(中英文五组查询,走代理)、HN Algolia、Hackster 与厂商原站核验(详见附录信源清单)


本期索引

  • 一、内核与版本动态
    • qemu-virt64 两个 BSP 启用 RT-Thread Smart,QEMU 里第一次能完整跑用户态(10-29)
    • 七个半小时后收回默认配置:#11942 把 Smart 退回覆盖层,CI 选择逻辑重写(10-29)
    • lwp 系统调用实现按子系统拆成 20 个文件,lwp_syscall.c 一次删掉 11638 行(10-29)
    • 终端兼容补齐:TIOCLINUX 返回零修饰键,TTY 窗口默认 24×80(10-29)
    • ping 统计修正:首个回包同时定下最小值,单调递增时不再报 minimum = -1(10-29)
  • 二、安全跟进与待合并队列
    • 块设备 ioctl 把 24 字节分区表写到调用者指定的内核指针(10-29)
    • 一天四笔驱动缺陷:三家 ADC 通道越界,DM365 SPI 除零(10-29)
    • 待审队列:RISC-V Smart 缺页处理、RTL8125 2.5G 网卡、RK3588 显示与音频(10-29)
    • K230D 支持与 Smart 改进的提案仍在队列(10-29)
  • 三、官方与社区活动
    • 官方新闻接口连续第五个月停在 6 月 17 日(10-29)
    • 英飞凌 Edgi Talk 桌面伙伴:一句中文交代看守任务,全程 AI 协作开发(10-30)
    • 社区长文用 4.0.3 源码讲内核对象数组与侵入式链表(10-29)
  • 四、生态与厂商适配
    • 海外社区用 RT-Spark 板卡做离线边缘 AI,但固件跑的是 FreeRTOS(10-28)
  • 五、本期趋势与总结
    • 趋势:Smart 落地当天就被收回默认配置,测试覆盖层成为新定位
    • 局限性与去重说明
  • 附录:信源核查表与信源清单

一、内核与版本动态

1.1 qemu-virt64 两个 BSP 启用 RT-Thread Smart,QEMU 里第一次能完整跑用户态(10-29)

日期:2026-10-29 09:29(合入时间) 来源:提案 #11896、主仓库提交记录

10 月 18 日创建、在队列里刷了十天的提案 #11896 于本期合入,涉 14 个文件、新增 1263 行、删除 1075 行、14 笔提交。原因写得直白:qemu-virt64 系列 BSP 一直没开 RT-Thread Smart,用户态与 LWP 相关特性在 QEMU 上根本无法测试,也没有 virtio 块设备与伪终端的标准根文件系统初始化流程。

改动分三层。配置层对 qemu-virt64-riscv 与 qemu-virt64-aarch64 打开 RT_USING_SMART,并按 Smart 的单核前提关掉 riscv64 的 SMP;运行层新增 applications/mnt.c,把 virtio-blk0 挂成根目录(先试 elm,失败再试 ext,设备未就绪时最多重试 100 次、每次间隔 10 毫秒),再把 ptyfs 挂到 /dev/pts、procfs 挂到 /proc;CI 层在 bsp_buildings、membrowse、utest_auto_run 三处工作流里各加对应条目。构建上 riscv64 改用 RISC-V general musl 工具链、aarch64 改用 aarch64 musl 工具链。前置依赖 #11893(lwIP 环回网口支持)已于 10 月 25 日先行合入,本次配置是在该符号落地后重新生成的。

1.2 七个半小时后收回默认配置:#11942 把 Smart 退回覆盖层,CI 选择逻辑重写(10-29)

日期:2026-10-29 16:59(合入时间) 来源:提案 #11942

同一天 16:59,#11942 通过,把上一个提案留下的默认配置整体收回:7 个文件、新增 51 行、删除 220 行。两个 BSP 的 rtconfig.h 去掉 RT_USING_SMART、KERNEL_VADDR_START、ARCH_REMAP_KERNEL 与整组 PAGECACHE 配置,补上 RT_USING_DFS_V2 与 RT_USING_DFS_ELMFAT,RT_VER_NUM 从 0x50301 抬到 0x50400,即主分支已是 5.4.0 开发态。

真正的技术点在 CI。原来 utest_auto_run.yml 对这两个 BSP 的标准内核用例采取「git checkout origin/master 的 .config 与 rtconfig.h」覆盖,这会连带把前面刚追加的 SMP 配置段一起冲掉;本次改成向 .config 直接追加一行 # CONFIG_RT_USING_SMART is not set,只关掉 Smart,不动 SMP。同时 ALL_BSP_COMPILE.json 把 qemu-virt64-aarch64 放回 aarch64 标准编译组、qemu-virt64-riscv 放回 riscv64-unknown-elf 标准组,删掉原先单列的 qemu-smart 编译组;membrowse 的 aarch64 目标工具链由 aarch64-linux-musleabi 改回 aarch64-none-elf。

净效果是 Smart 从「BSP 默认配置」变成「utest 的配置覆盖层」:同一个 BSP 既跑标准内核回归,也通过 rtsmart.cfg 追加 Smart 用例,两条路径互不覆盖。

1.3 lwp 系统调用实现按子系统拆成 20 个文件,lwp_syscall.c 一次删掉 11638 行(10-29)

日期:2026-10-29 14:50(合入时间) 来源:提案 #11894

同为 10 月 18 日创建的提案 #11894 本期合入,22 个文件、新增 12223 行、删除 11638 行。核心动作是把 components/lwp/lwp_syscall.c 这个一万一千多行的单文件整体拆到 syscall/ 目录:按内存、文件、路径、stat、文件系统、套接字、netdb、进程、消息队列、rt_ipc、信号、系统、时间调度、设备、channel 分组成 20 个实现文件,另加 syscall_internal.h 与一份共享的系统调用分发表,并在 lwp 的 SConscript 里注册新目录。

提案自己写明「无功能变更」,这一点可以从随后那笔 clang-format 提交印证:格式化只碰新增文件、注释里也标注不改行为。拆分的价值在评审侧——系统调用实现从「一个大文件里按编号翻」变成「按子系统定位」,后续补 copyin/copyout 这类边界修复(如 2.1 涉及的 ioctl 问题)不必再在万行文件里穿梭。

1.4 终端兼容补齐:TIOCLINUX 返回零修饰键,TTY 窗口默认 24×80(10-29)

日期:2026-10-29 14:48(合入时间) 来源:提案 #11890

2 个文件、新增 18 行、删除 4 行。此前 TIOCLINUX 直接返回失败,而不少终端程序启动时会先探测控制台状态,探测失败就降级或退出;本次改为返回零键盘修饰键状态,让这类程序在 RT-Smart 上继续走正常路径。另一处是窗口尺寸:没有任何来源上报尺寸时,把 TTY 初始化为 24 行 80 列,避免依赖 ioctl 取尺寸的程序读到 0。

配套提交修正了同一批代码里的取长度写法,把 memcpy 的长度参数改用 sizeof(tty_ctrl_charset) 直接表达,顺手清掉 cppcheck 的 sizeofDivisionMemfunc 告警。

1.5 ping 统计修正:首个回包同时定下最小值,单调递增时不再报 minimum = -1(10-29)

日期:2026-10-29 09:33(合入时间) 来源:提案 #11900

只改 components/net/netdev/src/netdev.c 一个文件,新增 5 行、删除 1 行,作者提交于 10 月 19 日。原逻辑把 max_time 初始化为 0、min_time 初始化为 0xFFFFFFFF,然后用 if / else-if 链更新:首个回包的延迟必然大于 0,于是走 max 分支,最小值不被赋值。如果后续回包延迟一路上升,每一笔都只更新 max,min_time 始终停在 0xFFFFFFFF,收尾按 %d 打印就成了 minimum = -1。修法是在 received 等于 1 时把 max 与 min 同时置为该包延迟,之后的两条比较各管一边,统计语义才对齐。

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

2.1 块设备 ioctl 把 24 字节分区表写到调用者指定的内核指针(10-29)

日期:2026-10-29 22:00(报告时间) 来源:缺陷 #11952

RT-Smart 非特权进程可以把一个内核地址当 ioctl 参数传下去:sys_ioctl() 与 blk_fops_ioctl() 不做 copy-in / copy-out,直接转发裸参数,而 blk_dev_control() 在 RT_DEVICE_CTRL_BLK_PARTITION 分支里执行 rt_memcpy(args, &blk->partition, sizeof(blk->partition)),等于把 24 字节分区信息写进攻击者挑选的内核地址。影响范围写明为 master(v5.4.0-dev)以及 v5.2.0 至 v5.3.0,由通用块层提交 c424cb81 引入;在 QEMU vexpress-a9、ARMv7-A、32 位 RT-Smart 加 SD 镜像环境上验证,内核创建 /dev/sd0 后即可触发。

这是连续第二天出现同一类问题:昨日是终端子系统的 ioctl 丢掉了 FreeBSD 的 copyin 前提(缺陷 #11937),今日是块设备子系统同样丢了这一层。共同成因是 RT-Smart 的 ioctl 适配层默认「参数已经是内核地址」,而用户态入口并没有做这一层转换。#11941(终端侧引入 copyin / copyout)目前仍在队列,本缺陷尚无对应修复提案。

2.2 一天四笔驱动缺陷:三家 ADC 通道越界,DM365 SPI 除零(10-29)

日期:2026-10-29 19:25 ~ 19:27(报告时间) 来源:缺陷 #11948、#11949、#11951、#11950

同一报告者在两分钟内提了四笔驱动侧缺陷,主题高度一致:调用方传进来的通道号与频率没被校验。

Bluetrum AB32 的 ADC 先用 ab32_adc_get_channel() 把通道映射后启动转换,随后却用原始通道号去索引数据寄存器数组,超范围时映射函数默默回退到 0、也不报错,最终读到数组外。Bouffalo 的 ADC 读 raw_data[10 + channel],该数组 26 个字,通道取 22 就落到第 32 个字,通道小于 -10 还会越到数组前面。HPM 的 ADC 用原始有符号通道索引 chn_state[16],rt_adc_enable() 不做校验。DM365 的 SPI 则是在 davinci_spi_get_prescale() 里把 max_speed_hz 当除数,为 0 时直接除零,且 DIV_ROUND_UP 的钳位写在除法之后,等于没有保护。

四笔的共同点在于 rt_adc_read() / rt_spi_configure() 这一层没有参数校验,把校验责任下推给了每个驱动,而多数驱动没做。

2.3 待审队列:RISC-V Smart 缺页处理、RTL8125 2.5G 网卡、RK3588 显示与音频(10-29)

日期:2026-10-29 11:02 ~ 19:53(最后更新) 来源:提案 #11892、提案 #11944、提案 #11943、提案 #11947

与 1.1 同批的 #11892(RISC-V 侧 Smart 的 MMU 与用户态缺页处理)本期仍在队列,4 个文件、新增 105 行、删除 8 行,10 月 29 日 11:26 有更新。内容包含增加玄铁架构选择与 SVPBMT 选项、早期页表指针按内核物理偏移换算、允许 MPR 区间延伸到链接基址之下、开 MMU 前清理早期页表、清掉每个 hart 内核页表里的用户地址项、未处理用户缺页时只终止当前 LWP 而不拖垮内核。这批改动与 1.1 是同一目标的另一半:一个让 QEMU 能跑,一个让真实 RISC-V 硬件上的用户态不误杀内核。

其余三笔都是大体量新硬件支持:RTL8125 以太网驱动新增 1934 行,覆盖 RTL8125 / RTL8162 原生 PCI、描述符环 DMA、中断收包与 TX 完成、10/100/1000/2500M 自协商、lwIP 软件校验和,另带可选 PTP 时钟与 PPS;RK3588 与 RK3528 显示与音频支持 36 个文件、新增 5483 行、删除 391 行,含 HDMI 控制器与 HDPTX PHY、VOP2 路由与帧缓冲扫描、SAI 与 codec 音频时钟;DHCP raw 服务器地址池耗尽的无界循环修复不大(新增 17 行、删除 4 行),但附了 3586 组池大小 / 占用位图 / 起始位置组合对照测试以及 ASAN 结果,验证强度在本期队列里最高。另有一笔 clang-format 固定到 22.1.8 的提案涉 75 个文件、3852 行新增。

2.4 K230D 支持与 Smart 改进的提案仍在队列(10-29)

日期:2026-10-29(复核) 来源:提案 #11897

与 Smart 同批的 #11897(K230 增加 K230D 支持并改进 Smart)本期仍未合入,其前身 #11359 已关闭。昨日报告记录的「四笔 10-18 提案」中,#11894、#11896、#11890 三笔已于本期落地,#11892 与 #11897 仍在队列,说明这批工作被拆成两段推进:能独立验证的先行,涉及新硬件的等板卡侧确认。

三、官方与社区活动

3.1 官方新闻接口连续第五个月停在 6 月 17 日(10-29)

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

官方新闻接口返回的最新条目仍是 2026-06-17 的「睿赛德科技受邀出席 2026 阿布扎比投资论坛」,此后六至十月无新增,已连续第五个月静默。官网新闻列表首页同期无新稿。公司侧的对外动态本期在 Google News 中文与英文查询里也没有命中,睿擎与睿擎派的七天内查询同样为空。企业动态这条线目前处于停更状态,日报的主源只能落在 GitHub 与社区文章通道上。

3.2 英飞凌 Edgi Talk 桌面伙伴:一句中文交代看守任务,全程 AI 协作开发(10-30)

日期:2026-10-30 00:54(发布) 来源:社区文章:Little Watcher

2026 嵌入式大赛参赛作品「Little Watcher」发布,作者 Oliver,硬件是英飞凌 Edgi Talk(PSoC Edge E84),系统为 RT-Thread,源码与发布包已公开。功能定位很窄:用一句中文指定一个可见目标的出现或消失,检测到变化就提醒并保存前后画面,解决「临时需求不值得单独写识别程序」的问题。

工程实现上,板卡 M55 侧基于官方 BSP 的 CherryUSB UVC 例程与官方 Wi-Fi 例程配置构建,保留原有 M33 引导固件;RT-Thread 线程分别负责语音录制上传、摄像头采集上传与提醒播放,互斥量保护共享状态与摄像头停止过程,信号量唤醒提醒线程;外设经 LCD、触摸、麦克风与音频设备接口访问,数据走 Wi-Fi 管理接口与 lwIP socket,控制桥用 FinSH/MSH 命令。电脑侧承担语音识别、任务编译与视觉判断,任务计划可缓存复用,不必为每个目标重训模型。边界条件写得具体:单次看守会话上限 300 秒、60 次图像上传(1 张参考帧加至多 59 次比较),网页最多保留最近 100 条事件,无法确定的画面标 uncertain,重启默认暂停。

这篇的看点不在算法——视觉判断跑在电脑侧的现成模型上——而在它把「AI 参与开发」的过程也当作交付物:需求拆解、代码集成、故障排查、测试验证、文档与演示各环节都记录了 AI 的参与方式,并保留失败与通过的分别记录。

3.3 社区长文用 4.0.3 源码讲内核对象数组与侵入式链表(10-29)

日期:2026-10-29 08:28(发布) 来源:社区文章:内核对象分布

一篇面向内核入门的长文在社区文章通道发布,作者 CTIE_4063,取材于 RT-Thread 4.0.3 的 src/object.c 与 include/rtdef.h,声明代码取自实际源码而非手册。文章主线是把「按类型管理、按名字查找、能遍历、能统计」这组需求落到三件东西上:每类对象一个容器 rt_object_information(含类型、链表头、该结构体大小),对象内部自带侵入式 rt_list 节点,查找与遍历因此只需一份通用代码;再由 rt_object_get_information 从类型取容器,用 container_of 从链表节点反推对象。文末附 60 行复刻 rt_list 核心的练习与 GitHub Pages 图解版。

四、生态与厂商适配

4.1 海外社区用 RT-Spark 板卡做离线边缘 AI,但固件跑的是 FreeRTOS(10-28)

日期:2026-10-28(发布)/ 2026-10-29 08:34(聚合命中) 来源:Hackster 项目:Smart Water Bottle Reminder

Hackster 上出现一个以 RT-Spark 板卡为硬件的离线边缘 AI 项目:用六轴 IMU 判断躺放、携带、饮用、晃动四种状态,30 秒未检测到饮用就让 LCD 红字提示并鸣笛,每 10 秒重复一次;深度 5 的决策树经 Python 训练后导出为纯 C,在 STM32F407 上单次推理约 154 微秒,留出集准确率 95%,同数据的阈值规则基线为 97.5%,作者如实写了这个差距。整机 8 个任务、两队列两互斥量,168 MHz 主频,完全离线。

需要分清的是:项目用的是 RT-Thread 的 RT-Spark 开发板,但固件跑的是 FreeRTOS,致谢里 RT-Thread 与 FreeRTOS 并列出现。这属于板卡层面的生态复用,不构成 RT-Thread 内核的采用案例,收录时按生态参考处理,不计入应用落地。同一作者 10 月 26 日还有一篇 RT-Spark 的人体活动识别项目,可见这条线是把这块板当通用 STM32F407 开发板在用。

五、本期趋势与总结

5.1 趋势:Smart 落地当天就被收回默认配置,测试覆盖层成为新定位

本期是 RT-Thread Smart 这条线十天的排队换来的一次集中落地:09:29 合入 #11896 让 QEMU 两个 virt64 BSP 打开 Smart 并补齐根文件系统初始化,14:48 与 14:50 合入 #11890、#11894 补终端兼容与系统调用分层,16:59 便合入 #11942 把 BSP 默认配置整体恢复到标准内核。

这个节奏读起来像反复,实际是维护者在划定 Smart 的位置:默认配置必须保持可预测,让不带 Smart 的常规回归保持稳定;Smart 通过 utest 的配置覆盖层单独跑,两条路径共用一个 BSP。这样既拿到了 QEMU 上的用户态测试覆盖,又不会因为默认配置变化打乱既有的 BSP 编译矩阵。同一批工作里 #11892 与 #11897 仍在队列,说明「能在 QEMU 验证的部分先合、依赖真实硬件与板卡侧确认的部分后合」是这批提案的事实节奏。

第二条线是安全边界。昨天是终端 ioctl,今天是块设备 ioctl,两者成因完全相同:RT-Smart 的 ioctl 适配层默认参数已是内核地址,用户态入口却没做 copy-in。再加上一天四笔驱动侧通道号与除零缺陷,可以看出当前缺陷报告的落点正从「功能不对」转向「边界没校」。第三点值得记的是 1.3 的 lwp 拆分——一万一千行的单文件变成 20 个按子系统分组的文件,这类结构性改动本身不修任何缺陷,但它决定了后面那批边界修复能不能被高效评审。

5.2 局限性与去重说明

官方新闻接口连续第五个月停在 6 月 17 日,企业侧动态本期无命中,报告主体完全依赖 GitHub 与社区文章两条通道。HN Algolia 本窗口返回的 4 条(DissPair、StrictLLM、Help My Sanity、Uji)均为 threads 类关键词误匹配,整批剔除;topic:rt-thread 生态检索本窗口零命中;Google News 英文侧唯一命中即 4.1 的 Hackster 项目,中文侧两篇 RTOS 与具身智能相关稿件与 RT-Thread 无直接关系,未收录。

昨日报告将 #11894 与 #11896 记为「在队列、尚未合入」,本期两笔均已合入,属正常排期推进,不是对前一期结论的更正。4.1 的 RT-Spark 项目因固件为 FreeRTOS,仅列作板卡生态参考,未计入应用落地条目。

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

信源核查表

信源 核查结果
官方新闻接口(rt_org) 24 小时无新增,最新条目停在 2026-06-17
社区文章接口(article) 窗口内新增 1 篇(10-30 00:54,嵌入式大赛作品),另 1 篇内核长文于 10-29 08:28 发布
主仓库 commits 窗口内 7 笔合入,集中在 10-29 09:29 至 16:59
主仓库 PR 合入 5 笔(#11890、#11894、#11896、#11900、#11942),在审提案 13 笔本窗口有更新
主仓库 releases / tags 无新增,最新仍为 v5.3.0(2026-09-10)
主仓库 Issue 新建 5 笔(#11948 至 #11952,驱动边界与块设备 ioctl 安全)
RT-Thread/packages 无推送,最新推送 2026-10-23
vscode-rt-smart 无推送,最新推送 2026-10-26
RT-Thread/sdk 无推送,最新推送 2026-10-25
pkgs-test 无推送,最新推送 2026-10-23
topic:rt-thread 生态检索 窗口内零命中
Google News 英文 1 条命中(Hackster RT-Spark 项目),收录为生态参考
Google News 中文 2 条命中均为 RTOS 回顾与具身智能综述,与 RT-Thread 无直接关系,剔除
HN Algolia 4 条 threads 关键词误匹配,整批剔除

完整信源清单