第一章:RV64 裸机应用

大多数程序员的第一行代码都从 Hello, world! 开始,当我们满怀着好奇心在编辑器内键入仅仅数个字节,再经过几行命令编译、运行,终于 在黑洞洞的终端窗口中看到期望中的结果的时候,一扇通往编程世界的大门已经打开。时至今日,我们能够隐约意识到编程工作能够如此方便简洁并不是 理所当然的,实际上有着多层硬件、软件隐藏在它背后,才让我们不必付出那么多努力就能够创造出功能强大的应用程序。

本章我们的目标仍然只是输出 Hello, world! ,但这一次,我们将离开舒适区,基于一个几乎空无一物的平台从零开始搭建我们自己的高楼大厦, 而不是仅仅通过一行语句就完成任务。

获取本章代码:

$ git clone https://github.com/rcore-os/rCore-Tutorial-v3.git
$ cd rCore-Tutorial-v3
$ git checkout ch1

在 qemu 模拟器上运行本章代码:

$ cd os
$ make run

将 Maix 系列开发版连接到 PC,并在上面运行本章代码:

$ cd os
$ make run BOARD=k210

警告

FIXME: 提供 wsl/macOS 等更多平台支持

如果顺利的话,以 qemu 平台为例,将输出:

[rustsbi] Version 0.1.0
.______       __    __      _______.___________.  _______..______   __
|   _  \     |  |  |  |    /       |           | /       ||   _  \ |  |
|  |_)  |    |  |  |  |   |   (----`---|  |----`|   (----`|  |_)  ||  |
|      /     |  |  |  |    \   \       |  |      \   \    |   _  < |  |
|  |\  \----.|  `--'  |.----)   |      |  |  .----)   |   |  |_)  ||  |
| _| `._____| \______/ |_______/       |__|  |_______/    |______/ |__|

[rustsbi] Platform: QEMU
[rustsbi] misa: RV64ACDFIMSU
[rustsbi] mideleg: 0x222
[rustsbi] medeleg: 0xb109
[rustsbi] Kernel entry: 0x80020000
Hello, world!
.text [0x80020000, 0x80022000)
.rodata [0x80022000, 0x80023000)
.data [0x80023000, 0x80023000)
boot_stack [0x80023000, 0x80033000)
.bss [0x80033000, 0x80033000)
Panicked at src/main.rs:46 Shutdown machine!

除了 Hello, world! 之外还有一些额外的信息,最后关机。