

這是一個針對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許可證中定義)應為雙重許可,如上所述,沒有任何其他條款或條件。