rust-raspberrypi-OS-tutorials README

The project's README from github.com/rust-embedded/rust-raspberrypi-OS-tutorials. As one markdown file: README.md.

Operating System development tutorials in Rust on the Raspberry Pi


ℹ️ Introduction

This is a tutorial series for hobby OS developers who are new to ARM's 64 bit ARMv8-A architecture. The tutorials will give a guided, step-by-step tour of how to write a monolithic Operating System kernel for an embedded system from scratch. They cover implementation of common Operating Systems tasks, like writing to the serial console, setting up virtual memory and handling HW exceptions. All while leveraging Rust's unique features to provide for safety and speed.

Have fun!

Best regards,
Andre (@andre-richter)

P.S.: For other languages, please look out for alternative README files. For example, README.CN.md or README.ES.md. Many thanks to our translators 🙌.

📑 Organization

Output of make doc

make doc

🛠 System Requirements

The tutorials are primarily targeted at Linux-based distributions. Most stuff will also work on macOS, but this is only experimental.

🚀 The tl;dr Version

  1. Install Docker Engine.

  2. (Linux only) Ensure your user account is in the docker group.

  3. Prepare the Rust toolchain. Most of it will be handled on first use through the rust-toolchain.toml file. What's left for us to do is:

    1. If you already have a version of Rust installed:

      cargo install cargo-binutils rustfilt
      
    2. If you need to install Rust from scratch:

      curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      
      source $HOME/.cargo/env
      cargo install cargo-binutils rustfilt
      
  4. In case you use Visual Studio Code, I strongly recommend installing the Rust Analyzer extension.

  5. (macOS only) Install a few Ruby gems.

This was last tested by the author with Ruby version 3.0.2 on macOS Monterey. If you are using rbenv, the respective .ruby-version file is already in place. If you never heard of rbenv, try using this little guide.

Run this in the repository root folder:

bundle config set --local path '.vendor/bundle'
bundle config set --local without 'development'
bundle install

🧰 More Details: Eliminating Toolchain Hassle

This series tries to put a strong focus on user friendliness. Therefore, efforts were made to eliminate the biggest painpoint in embedded development as much as possible: Toolchain hassle.

Rust itself is already helping a lot in that regard, because it has built-in support for cross-compilation. All that we need for cross-compiling from an x86 host to the Raspberry Pi's AArch64 architecture will be automatically installed by rustup. However, besides the Rust compiler, we will use some more tools. Among others:

There is a lot that can go wrong while installing and/or compiling the correct version of each tool on your host machine. For example, your distribution might not provide the latest version that is needed. Or you are missing some hard-to-get dependencies for the compilation of one of these tools.

This is why we will make use of Docker whenever possible. We are providing an accompanying container that has all the needed tools or dependencies pre-installed, and it gets pulled in automagically once it is needed. If you want to know more about Docker and peek at the provided container, please refer to the repository's docker folder.

📟 USB Serial Output

Since the kernel developed in the tutorials runs on the real hardware, it is highly recommended to get a USB serial cable to get the full experience.

UART wiring diagram

🙌 Acknowledgements

The original version of the tutorials started out as a fork of Zoltan Baldaszti's awesome tutorials on bare metal programming on RPi3 in C. Thanks for giving me a head start!

Translations of this repository

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

rust-raspberrypi-OS-tutorials (rust-embedded/rust-raspberrypi-OS-tutorials)

Searching Database…

这是什么?这是一套分步骤的教程,教你如何用 Rust 从零开始编写自己的嵌入式操作系统内核,目标平台是树莓派 3 和树莓派 4。
这是现成的操作系统,还是一门学习课程?这是一门学习课程,由循序渐进的课时组成。每一课都包含一个可独立启动的内核二进制文件,并在上一课的基础上继续开发;每课还附有与上一教程的差异对比,方便你看清具体改动了什么。
我该如何运行教程中的内核?安装 Docker Engine,准备 Rust 工具链(大部分由 rust-toolchain.toml 自动处理),然后在 QEMU 中构建并运行内核;从第 5 课开始,你还可以通过 UART 把内核加载到真实的树莓派上。
除了 Rust 本身,还需要什么工具?你需要 Docker(项目会拉取一个预装了 QEMU、OpenOCD 和 GDB 的容器),需要 rustup 来进行交叉编译;如果你用的是 macOS,还需要几个 Ruby gem。若要使用真实硬件,建议准备一根 USB 转串口线,最好是基于 CP2102 芯片的。
在 macOS 上和在 Linux 上的效果一样吗?教程主要针对 Linux 设计;对 macOS 的支持还只是实验性的。第 1 至第 5 课是基础部分,只能在 QEMU 中运行,无法在真实硬件上运行。
这门课程适合谁学习?适合刚接触 64 位 ARMv8-A 架构、想用 Rust 编写内核级代码并希望获得循序渐进指导的业余操作系统开发者。
这套教程实际会讲哪些内容?会逐步讲解常见的操作系统任务,例如写入串口控制台、配置虚拟内存、处理硬件异常,并借助 Rust 的安全特性一步步实现。
跟着学需要特殊的硬件吗?不需要。前五课是完全在 QEMU 中运行的基础内容;从第 5 课开始,你可以把内核刷入真实的树莓派 3 或 4,并通过 USB 串口线查看输出。
能把它移植到其他开发板或架构上吗?可以。作者特意以模块化的方式编写代码,以便移植到其他 CPU 架构或开发板,还欢迎贡献者尝试移植到 RISC-V 上。
Size
20.7 MB
Stars
14.7K
Updated
CommitDec 14
Age
8y
Commits · 90 Days