

这是一个针对Hobby OS开发人员的教程系列,他们是ARM 64位ARMV8-A架构的新手。这些教程将对如何从头开始为embedded system编写整体操作系统kernel进行指导,逐步的旅行。它们涵盖了常见操作系统任务的实现,例如写入串行控制台,设置虚拟内存和处理HW异常。在利用Rust的独特功能提供安全性和速度的同时。
玩得开心!
此致,
安德烈(@andre-richter)
PS:对于其他语言,请注意替代的读数文件。例如, README.CN.md或README.ES.md 。非常感谢我们的翻译?
kernel二进制文件。README都会有一个简短的tl;dr部分,简要概述了添加的内容,并将源代码diff显示给上一个教程,以便您可以方便地检查更改/添加。tl;dr部分外,一些教程还具有完整的详细文本。长期计划是所有教程都会获得全文,但是目前,这是教程独有的,我认为tl;dr and diff不足以理解这个想法。QEMU中运行才有意义。UART上观察输出。make doc命令。它使您可以以方便的方式浏览广泛记录的代码。make doc的输出
这些教程主要针对基于Linux的分布。大多数东西也将在MacOS上使用,但这只是实验性。
安装Docker引擎。
(仅Linux )确保您的用户帐户位于Docker组中。
准备Rust工具链。大部分将在首次使用Rust-Toolchain.toml文件时处理。我们剩下的是:
如果您已经安装了Rust版本:
cargo install cargo-binutils rustfilt如果您需要从头开始安装Rust:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt如果您使用Visual Studio Code ,我强烈建议您安装Rust Analyzer扩展程序。
(仅MACOS )安装一些Ruby宝石。
这是作者在macOS Monterey上的Ruby 3.0.2版本进行的最后测试。如果您使用的是rbenv ,则相应的.ruby-version文件已经到位。如果您从未听说过rbenv ,请尝试使用此小指南。
在存储库根文件夹中运行此操作:
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install该系列试图将重点放在用户友好上。因此,为消除尽可能多的嵌入式开发中最大的痛苦而做出了努力: Toolchain hassle 。
在这方面,Rust本身已经在很大程度上有所帮助,因为它具有内置的跨补给支持。从x86主机到Raspberry Pi的AArch64体系结构,我们所需的一切将由rustup自动安装。但是,除了生锈的编译器外,我们还将使用更多工具。等等:
QEMU在主机系统上模仿我们的内核。Minipush的自制工具,将内核加载到UART上方的Raspberry Pi上。OpenOCD和GDB用于对目标进行调试。在安装和/或编译主机机器上每个工具的正确版本时,可能会出错很多。例如,您的发行版可能无法提供所需的最新版本。或者,您缺少一些难以确定的依赖关系来编译其中一种工具。
这就是为什么我们会尽可能利用Docker的原因。我们提供一个随附的容器,该容器具有预装的所有必需工具或依赖项,并且一旦需要,它就会自动拔出。如果您想了解更多有关Docker并查看提供的容器的信息,请参阅存储库的Docker文件夹。
由于教程中的内核在真正的硬件上运行,因此强烈建议获得USB串行电缆以获得完整的体验。
CP2102芯片。GND和GPIO引脚14/15 ,如下所示。chainloader ,这将是您需要在SD卡上手动复制一段时间的最后一个文件。它将使您能够在UART时加载教程内核。 
这些教程的原始版本最初是作为Zoltan Baldaszti在C的rpi3上的裸金属编程的出色教程的叉子。感谢您给我一个开头!
根据任何一个
可以选择。
除非您另有明确说明,否则任何有意提交的捐款(如Apache-2.0许可证中定义)应为双重许可,如上所述,没有任何其他条款或条件。