Viết hệ điều hành bằng Rust
(github.com/phil-opp)- Kho lưu trữ này chứa mã nguồn của loạt bài Writing an OS in Rust được cung cấp tại os.phil-opp.com
- Nếu có câu hỏi, bạn có thể mở issue hoặc trò chuyện trên Gitter
Vị trí mã nguồn
- Mã của mỗi bài viết nằm trên một nhánh git riêng
- Có thể xem trạng thái trung gian sau từng bài viết
- Mã của bài viết mới nhất có thể xem tại đây
- Trong danh sách bài viết, hãy theo liên kết
(source code)để tìm nhánh của từng bài - Các nhánh được đặt tên theo định dạng
post-XX(XXlà số thứ tự bài viết) - Ví dụ: bài VGA Text Mode là
post-03, bài Hardware Interrupts làpost-07 - Hướng dẫn build xem trong Readme của nhánh tương ứng
- Có thể dùng git worktree để checkout nhánh vào một thư mục con
git worktree add code post-10 - Lệnh trên sẽ tạo thư mục con tên
codevà chứa mã của bài viết thứ 10 ("Heap Allocation")
Các bài viết
- Mục tiêu của dự án này là cung cấp hướng dẫn từng bước qua các bài blog riêng lẻ
- Hiện tại có các bài viết sau
Bare Bones:
- A Freestanding Rust Binary (source code)
- A Minimal Rust Kernel (source code)
- VGA Text Mode (source code)
- Testing (source code)
Interrupts:
- CPU Exceptions (source code)
- Double Faults (source code)
- Hardware Interrupts (source code)
Memory Management:
- Introduction to Paging (source code)
- Paging Implementation (source code)
- Heap Allocation (source code)
- Allocator Designs (source code)
Multitasking:
- Async/Await (source code)
Các bài viết của ấn bản đầu tiên
- Phiên bản blog hiện tại là ấn bản thứ hai, và ấn bản đầu tiên không còn được duy trì nữa
- Các bài viết của ấn bản đầu tiên vẫn có thể hữu ích
- Danh sách bài viết như sau
Bare Bones:
- A Minimal x86 Kernel (source code)
- Entering Long Mode (source code)
- Set Up Rust (source code)
- Printing to Screen (source code)
Memory Management:
- Allocating Frames (source code)
- Page Tables (source code)
- Remap the Kernel (source code)
- Kernel Heap (source code)
Exceptions:
- Handling Exceptions (source code)
- Double Faults (source code)
Additional Resources:
- Cross Compile Binutils
- Cross Compile libcore
- Set Up GDB
- Handling Exceptions using Naked Functions
- Catching Exceptions (source code)
- Better Exception Messages (source code)
- Returning from Exceptions (source code)
Giấy phép
- Dự án này, ngoại trừ thư mục
blog/content, được cấp phép theo một trong hai giấy phép sau- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
- Giấy phép của thư mục
blog/contentxem tạiblog/content/README.md
Đóng góp
- Trừ khi có nêu rõ khác đi, mọi đóng góp được gửi một cách có chủ đích, theo định nghĩa trong giấy phép Apache-2.0, sẽ được đưa vào theo cơ chế cấp phép kép như trên
Tóm tắt của GN⁺
- Dự án này cung cấp hướng dẫn từng bước về cách viết hệ điều hành bằng Rust
- Mỗi bài viết xử lý một chủ đề độc lập và đi kèm các ví dụ mã nguồn
- Đây là tài liệu rất hữu ích cho những ai quan tâm đến phát triển hệ điều hành
- Bạn có thể học cách phát triển hệ điều hành bằng cách tận dụng tính an toàn và hiệu năng của Rust
- Một dự án khác có chức năng tương tự là
Redox OS
1 bình luận
Ý kiến trên Hacker News
Đã hoàn thành ấn bản thứ hai vài năm trước và học được rất nhiều
Sau khi hoàn thành hướng dẫn này 5 năm trước, đã bắt đầu làm MOROS
Thay vì viết OS bằng Rust, nên xây dựng một nền tảng dữ liệu có thể chạy DML/DDL
Sau khi tìm hiểu sâu về Rust và phát triển OS, đã phát hiện ra tài liệu này
Tài liệu này là lý do khiến tôi bắt đầu với Rust vào năm 2021
Các bài viết của Phil về phát triển OS luôn rất đáng đọc
Nhóm Harvey OS hiện đang làm việc trên dự án R9OS
Đặc biệt khuyến nghị bài viết của ấn bản gốc
Vừa trở về từ Rustconf, và có khoảng chừng năm bản phát hành OS lớn tập trung vào hệ điều hành thời gian thực
Một tài liệu hay khác là về việc tạo OS RISC-V bằng Rust