Skip to content

Contribution

Runji Wang edited this page Apr 2, 2020 · 9 revisions

开发目标

目前的开发目标有两个主线任务和一个支线任务:

  1. 主线:实现 Zircon 原始启动流程,支持运行到 shell(@PanQL @wangrunji0408)
  2. 主线:支持图形应用(@rzswh @heheda12345)
  3. 支线:补充功能和修复 bug,通过官方的单元测试

帮助修复单元测试

为了快速上手 zCore 的开发,一个可以马上拿来练手的小任务就是修复单元测试。

单元测试的状态在 Core tests 中维护。

Fuchsia 官方提供了一些用户态的测例,代码位于 zircon/system/utest 目录中,生成的程序位于 bootfs 中的 test/core/standalone-test。在我们预编译好的 core-tests.zbi 中可以找到它。

zCore 运行这些测试的方法:

# zCore
# 首先修改 rboot.conf 中的 cmdline 为:
#   cmdline=LOG=error:userboot=test/core/standalone-test
make run zbi_file=core-tests

# libos
cargo run -p zircon-loader prebuilt/zircon userboot=test/core/standalone-test

默认情况下会按顺序运行所有测试。如果想运行指定测试,可以给这个程序传启动参数,不过 userboot 并不支持给下一个程序传参数,因此这里需要一些 hack 的方法:参考这个 commit,我们截获了新进程读取 bootstrap channel 的操作,向启动信息中注入 args。通过修改硬编码的 test_args 变量,我们就可以给程序传不同的参数。如果不确定该传些什么,可以先传个 -h 试试。注意参数用\0分割,且第一项是程序名。

修复测试的一般流程是这样的:

  • 首先根据名字,找一个看上去容易修复的测试点
  • 根据错误信息,推测导致测试挂掉的原因
  • 查看文档,理解接口和对象的正确行为
  • 如有必要,查看测试源码,了解具体操作过程
  • 查看 zCore 现有实现代码,找到导致错误的原因(完全没实现?实现了但没导出syscall?实现得不正确?)
  • 尝试修复并重新测试,重复以上过程直到测试通过

这个过程可以帮助你熟悉 Zircon 对象设计、具体接口语义,以及 zCore 的实现状态。

假如你完成了修复工作,希望能及时通报进展,并尽快 merge 到开发分支中(目前是 executor 分支)。

Clone this wiki locally