Skip to content

feat(boot)!: add host initramfs handoff across runners - #194

Open
ZR233 wants to merge 2 commits into
mainfrom
codex/initramfs-boot
Open

ZR233 wants to merge 2 commits into
mainfrom
codex/initramfs-boot

Conversation

@ZR233

@ZR233 ZR233 commented Sep 24, 2026 •

Copy link
Copy Markdown
Member

问题

现有 QEMU、U-Boot 和 board 启动配置只能交接内核,无法一致地把宿主 initramfs 与内核命令行交给 TGOS。直接给裸 x86 ELF 使用 Linux -initrd ABI 也不成立;HTTP Boot 需要保证镜像与内核来自同一会话,并防止旧 loader 静默忽略新制品。

改动

  • 增加可选的 BootPayloadConfig { initramfs, cmdline },供 QEMU、U-Boot 和 board 配置复用。AArch64/RISC-V QEMU 直启使用 -initrd/-append;UEFI QEMU 在 ESP 的 EFI/BOOT/ 放置归档和命令行文件,裸 x86 直启请求明确报错。
  • U-Boot FIT 配置包含 ramdisk 节点,启动前设置 bootargs。串口命令对参数整体加引号,含单引号的值明确拒绝,避免命令解析改写。
  • HTTP Boot 协议升级为 v3:board 先把归档上传到内核所在 session,server 在发布清单时核对文件并记录大小、SHA-256;axloader 从同一 session 下载后再次校验。服务端继续接受 v2 loader,但只有不带新归档、cmdline 字段的旧启动可交付;遇到新字段时返回明确拒绝。HTTP 归档上限为 256 MiB,命令行上限为 4095 字节,发布前检查。

配套 TGOS 改动仍在本地联调:someboot/ax_hal 校验并预留 FDT 或 UEFI 镜像物理范围,axloader 传递 v3 制品,ax-fs-ng 与 ax-runtime 共享解包和内存根,Starry 按 Linux initramfs 顺序选择 PID 1。TGOS 目前只通过本地 Cargo patch 联调;本 PR 不包含任何指向本机的依赖。待本 PR 合并且相关 crate 发布到 crates.io 后,才会更新 TGOS 的正式依赖和锁文件并提 TGOS PR。

验证

  • 已变基到上游 ee8061c(feat(ostool): 支持可选 ELF 调试产物与元数据解析 #193)。其 artifacts.analysis 及各分析开关均默认关闭;省略新字段的旧 .build.toml 和仅启用部分开关的配置测试通过,现有配置文件无需补字段。feat(ostool): 支持可选 ELF 调试产物与元数据解析 #193 新增的公开 Rust BuildConfig.artifacts 会影响直接构造该结构体的调用方;配套 TGOS 本地调用已改用 ..Default::default(),cargo xtask clippy --package axbuild 和完整 cargo xtask test 均通过。
  • cargo fmt --all -- --check
  • cargo test -p ostool -p fitimage -p httpboot-protocol -p ostool-server,含 API 编译测试、FIT 结构、HTTP 会话及 v2/v3 拒绝路径。
  • cargo clippy --target x86_64-unknown-linux-gnu --all-features、cargo build --target x86_64-unknown-linux-gnu --all-features。
  • cargo publish --workspace --dry-run --locked:各包完成打包与验证;现有版本已发布的警告符合预期,没有上传。
  • 本地 TGOS 配套工作树以临时 path patch 运行:ArceOS AArch64 QEMU 外部/内置归档、x86 UEFI ESP 归档与 cmdline、Starry AArch64 /init 优先与磁盘回退、Axvisor AArch64 无块设备宿主根均通过;cargo xtask axloader test qemu 验证 HTTP loader 下载、哈希与 UEFI 交接前的制品就绪。

FIT 的归档关联由单元测试验证;没有实体板卡,因此 U-Boot bootm 和板端 HTTP Boot 到内核的完整链路尚未验证。此 PR 不请求也不执行合并或 crates.io 发布。

Review 后续

  • 3fb76d6 将 board 配置 wire 中的宿主字段改为显式可选项,消除 flatten 与 deny_unknown_fields 的组合;TOML/JSON 未知字段及旧配置省略字段均有回归测试。
  • 已同步英文 README、REST API 和 axloader 网络控制文档,明确同 Session 归档上传、请求头、大小/摘要核验、v2/v3 兼容及限制。
  • 本地 cargo fmt --all -- --check、cargo clippy --target x86_64-unknown-linux-gnu --all-features、cargo build --target x86_64-unknown-linux-gnu --all-features、cargo test --target x86_64-unknown-linux-gnu -- --nocapture 通过;PR 新 CI 待完成。

Add optional host initramfs and cmdline artifacts to QEMU, U-Boot FIT, and board HTTP Boot runs. Bump the HTTP Boot wire protocol to v3 while retaining v2 loader sessions without new payload fields.
@ZR233
ZR233 force-pushed the codex/initramfs-boot branch from 72b6895 to 1d1b47e Compare September 24, 2026 04:21

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查总结:本 PR 将宿主 initramfs/cmdline 统一接入 QEMU、U-Boot、FIT 和 board HTTP Boot,并把 HTTP Boot 控制协议扩展到 v3;同时保留 v2 loader 的无新 payload 启动路径。影响范围覆盖公开配置 schema、U-Boot/QEMU 启动行为、session 文件上传以及 loader poll 响应,改动不是局部实现。当前没有历史 review、review comment 或 issue comment 需要跟进,也未发现独立的重复 initramfs PR。

验证情况:PR head 上的两个 GitHub Actions check 均为 completed/success,git diff --check origin/main...HEAD 通过。审查环境没有安装 cargo,因此按 rust-plan 建议的 cargo fmt --check、各变更 crate 的 clippy 和 test 均无法在本地运行;这不是 PR 导致的失败。实体板卡和完整 U-Boot/HTTP Boot handoff 也未在本地复现。

仍有两项 advisory 问题:

  1. README.md:336-337 新增的配置与 HTTP Boot v3 契约没有同步到 README.en.md、docs/api.md 和 docs/axloader-network-control.md;这些权威文档仍描述仅上传内核的旧接口。请补齐新字段、请求头、限制、v2 拒绝规则和 session/hash 语义。
  2. ostool/src/board/config.rs:47 的 typed serde(flatten) 与 deny_unknown_fields 组合不受 Serde 支持,可能让未知 board TOML key 被静默忽略;请保留未知字段拒绝并补回归测试。具体意见见行内评论。

Powered by gpt-5.6-luna

Comment thread ostool/src/board/config.rs Outdated
@ZR233

ZR233 commented Sep 24, 2026

Copy link
Copy Markdown
Member Author

已按审查意见在 3fb76d6 同步 README.en.md、docs/api.md、docs/axloader-network-control.md,并更新 README.md 中协议版本表述。文档现列出可选 initramfs/cmdline 字段、同 Session 先上传归档再发布内核的请求头和顺序、256 MiB/4095 字节限制、大小与 SHA-256 双端核对,以及 v2 loader 遇到新字段时的 boot_payload_unsupported 拒绝规则。配置解析意见已在行内回复。当前本地 cargo fmt --all -- --check、cargo clippy --target x86_64-unknown-linux-gnu --all-features、cargo build --target x86_64-unknown-linux-gnu --all-features、cargo test --target x86_64-unknown-linux-gnu -- --nocapture 均通过;新提交的 PR CI 仍在运行,尚未视为绿色。实体板卡 U-Boot/HTTP Boot 仍未验证。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 将宿主 initramfs/cmdline 统一接入 QEMU、U-Boot、FIT 和 board HTTP Boot,并将 HTTP Boot 控制协议扩展到 v3,同时保留 v2 loader 的兼容启动路径。改动影响公开配置 schema、启动参数生成、session 文件上传以及 loader poll 响应,属于跨模块协议与启动流程变更,而非局部实现;未发现会破坏现有 v2 路径的具体问题。

验证情况:PR head 上的两个 GitHub Actions check 均为 completed/success,且 git diff --check origin/main...HEAD 通过。本审查环境未安装 cargo,因此 cargo fmt --check、相关 clippy 和 test 无法本地执行;这属于环境限制,不是 PR 导致的失败。实体板卡及完整 U-Boot/HTTP Boot handoff 未在本地复现,保留该验证风险。

我已核对历史 review 及评论:此前关于配置未知字段处理和文档同步的意见已在当前 head 修复,未发现仍未解决且需要阻止合并的合理意见。当前未发现剩余阻塞问题或需要追加的审查意见。

Powered by gpt-5.6-luna

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant