【YSOS】实验零:环境搭建与实验准备

总所周知Web手除了Web啥都学

最近开了个新坑,在学Rust和OS,就在想为什么不结合起来rCore!

实验使用的文档为中山大学YatSenOS操作系统时间课程v2

引用实验文档中的实验说明

本文档提供了一套基于 Rust、面向 UEFI 和 x86_64 的操作系统课程实验方案。

本实验设计期望基于低汇编、避免重复造轮子的宗旨,利用 Rust 语言优秀的包管理和底层支持,借助现有的优秀工程化底层封装,为学生提供一个低负担、现代、面向高级语言的操作系统实验指南。

废话少说,直接开始干活

MacOS环境配置

实验支持使用MacOS with Apple Silicon,但是没有给出相应的配置方法(其实就是Linux:P)
1. 安装brew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. 安装qemu
brew install qemu
  1. 安装rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"

QEMU启动UEFI Shell

初始化仓库、代码完整性等不再赘述,后续如有类似跳过部份不再提示,请以实验调试指南为准

测试qemu能否正常工作

qemu-system-x86_64 -bios ./assets/OVMF.fd -net none -nographic

跑起来了

BdsDxe: failed to load Boot0001 "UEFI QEMU DVD-ROM QM00003 " from PciRoot(0x0)/Pci(0x1,0x1)/Ata(Secondary,Master,0x0): Not Found
BdsDxe: loading Boot0002 "EFI Internal Shell" from Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)
BdsDxe: starting Boot0002 "EFI Internal Shell" from Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)
UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (EDK II, 0x00010000)
Mapping table
     BLK0: Alias(s):
          PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell> 

运行第一个UEFI程序

\#![no_std]
#![no_main]

#[macro_use]
extern crate log;
extern crate alloc;

use core::arch::asm;
use uefi::prelude::*;

#[entry]
fn efi_main(image: uefi::Handle, mut system_table: SystemTable<Boot>) -> Status {
    uefi_services::init(&mut system_table).expect("Failed to initialize utilities");
    log::set_max_level(log::LevelFilter::Info);

    let std_num = "2021280167";

    loop {
        info!("Hello World from UEFI bootloader! @ {}", std_num);

        for _ in 0..0x10000000 {
            unsafe {
                asm!("nop");
            }
        }
    }
}

TODO:关于我在Mac按Control + A + X关不掉QEMU这件事(很奇怪,有点影响效率)
IDE我没有像教程使用VScode,而是采用了Jetbrain的RustRover但Preview版
我会针对RustRover改动一些配置以匹配我的开发习惯

也不知道以后有没有用,就先写着好了,相比于直接Build&Run我这里多了一步Check,电脑垃圾Build得慢

发布者

正汰

永远是这样,山前面是山,天空上面是天空,道路前面还是道路,迷茫之后还有迷茫。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注