Skip to content

feat: Add UEFI HTTP boot support#98

Open
Josen-B wants to merge 31 commits into
drivercraft:mainfrom
Josen-B:http
Open

feat: Add UEFI HTTP boot support#98
Josen-B wants to merge 31 commits into
drivercraft:mainfrom
Josen-B:http

Conversation

@Josen-B
Copy link
Copy Markdown
Collaborator

@Josen-B Josen-B commented May 12, 2026

No description provided.

Josen-B added 26 commits May 9, 2026 06:50
@Josen-B
Copy link
Copy Markdown
Collaborator Author

Josen-B commented May 15, 2026

测试环境: loongarch pc机
当前初步实现通过 u 盘启动 Loader(UEFI),通过 http下载 manifest.json 指定的 kernel

image

@Josen-B
Copy link
Copy Markdown
Collaborator Author

Josen-B commented May 18, 2026

在loongarch-pc机器中传输启动内核成功:

99426b8b350d94eb83595ff12cf2fdcb

Copy link
Copy Markdown

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

Choose a reason for hiding this comment

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

PR #98 Review: feat: Add UEFI HTTP Boot support

变更概览

本 PR 为 ostool 添加了 UEFI HTTP Boot 支持,涉及 45 个文件,新增约 9500 行代码。变更覆盖以下几个层次:

  1. 新增 httpboot crateno_std 的 UEFI manifest 解析核心库,包含手工 JSON 解析器和 device path URI 提取
  2. UEFI 应用入口:通过 efi_main 实现 UEFI HTTP 协议引导流程(manifest 下载 → kernel 下载 → ExitBootServices → 跳转入口)
  3. loongarch64-uefi-loader:原生 C 加载器(TCP4/TLS/HTTP/manifest 支持)
  4. ostool-server 端:新增 HTTP Boot 文件服务、HTTPS 静态文件服务器、ProxyDHCP 服务
  5. ostool CLI 端:新增 run httpboot 子命令,完整的上传→引导→会话管理流程

测例变更分析

本 PR 对现有测试行为的影响:

  • session_ws_lifecycle.rs:最小改动,仅添加了 http_bootproxy_dhcp 配置字段到测试用的 ServerConfig。这两个字段使用 #[serde(default)],不影响已有的解析行为。
  • config.rs 测试:新增 board_config_round_trip_supports_uefi_http_boot 测试,验证新增的 UefiHttpProfile 序列化/反序列化。已有测试中新增了 http_boot.root_dir 相关断言,不影响已有行为。
  • router.rs 测试:新增 http_boot_upload_manifest_and_public_download_use_board_current_pathhttp_boot_upload_rejects_non_uefi_http_board 两个集成测试,验证 HTTP Boot 文件上传/下载流程。已有测试中 BootConfig match 分支新增 UefiHttp 处理(panic),不影响已有逻辑。
  • client.rs 测试:新增 parse_uefi_http_boot_profile 测试。已有 BootConfig match 分支新增 UefiHttp 处理。
  • httpboot crate:12 个单元测试全部通过(本地验证),覆盖 manifest 解析、地址解析、device path URI 提取、边界条件等。
  • http_boot/files.rs:2 个单元测试,验证文件存储路径和路径校验。

结论:对现有行为没有破坏性影响。 所有改动都使用 #[serde(default)] 保证向后兼容,已有 match 分支仅补充了新的变体处理(panic),不改变已有分支行为。

代码质量评价

优点:

  • httpboot crate 的 no_std JSON 解析器实现精简且健壮,错误处理清晰
  • UEFI ABI 绑定手工编写,结构体布局明确
  • 文件上传使用原子 rename(先写临时文件再 rename),保证一致性
  • 路径校验完善,防止目录遍历攻击
  • HTTPS 静态文件服务器实现简洁,读取请求行和头部有长度限制
  • ProxyDHCP 实现完整,包含 arch 匹配、MAC 过滤、IP 校验

建议改进(非阻塞):

  1. httpboot/src/uefi/http.rs:283poll_http_token 使用 busy-wait 轮询(循环 10万次),建议添加注释说明 UEFI 环境下没有更好的等待机制
  2. httpboot/src/uefi/console.rs:10write_console 固定 192 元素 UTF-16 缓冲区,长消息会被静默截断,建议在截断时至少输出 ... 提示
  3. ostool-server/src/api/router.rs:76 — 短路径 /B.EFI/manifest.json/kernel.bin 使用硬编码 board_id "l",建议在文档中说明用途
  4. ostool-server/src/config.rs:74HttpBootHttpsConfig 默认证书路径,如用户启用 HTTPS 但未创建证书,错误信息较底层,建议增加友好提示
  5. ostool-server/src/api/router.rs:1190put_http_boot_file 中读取两次 config,两次读取之间配置可能已变,建议复用

CI 状态

所有 CI 检查均已通过:check (stable, x86_64-unknown-linux-gnu) ✅、Release-plz PR ✅、build ✅、deploy ✅

总结

功能完整、测试覆盖良好、对现有行为无破坏性影响。CI 全绿,12 个 httpboot 单元测试本地验证全部通过。建议合并。

Powered by glm-5.1

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