1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/rcore-os-rCore-Tutorial

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
env.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 21:14 7f8a4fd

Среда развёртывания

Перед началом эксперимента необходимо заранее установить на разные платформы соответствующие зависимости. Среди них:

  • Rust-инструменты:
    • rustup — менеджер версий Rust;
    • cargo — менеджер пакетов Rust;
    • rustc — компилятор Rust.
  • Виртуальная машина QEMU (версия поддерживает RISC-V 64).

Процесс установки на разных платформах схож, но есть небольшие различия. Они будут описаны позже.

Установка QEMU

В зависимости от платформы процесс установки можно разделить на три части.

  1. macOS На macOS для установки последней версии QEMU и его зависимостей можно использовать Homebrew — менеджер пакетов:
brew install qemu
  1. Linux Поскольку в большинстве менеджеров пакетов Linux по умолчанию содержатся устаревшие версии QEMU, рекомендуется компилировать и устанавливать программу из исходного кода:
# Скачиваем исходный код (если скорость загрузки низкая, можно заменить адрес на предоставленный нами: http://42.194.184.212:5212/#/s/4dHZ)
wget https://download.qemu.org/qemu-5.0.0.tar.xz
# Распаковываем архив
tar xvJf qemu-5.0.0.tar.xz
# Компилируем и устанавливаем с поддержкой RISC-V
cd qemu-5.0.0
./configure --target-list=riscv32-softmmu,riscv64-softmmu
make -j$(nproc)
sudo make install

Если при выполнении команды configure возникают проблемы с зависимостями (на примере Ubuntu):

  • Если появляется сообщение об ошибке ERROR: pkg-config binary 'pkg-config' not found, можно установить пакет с помощью команды: sudo apt-get install pkg-config
  • Если возникает ошибка ERROR: glib-2.48 gthread-2.0 is required to compile QEMU, можно установить необходимый пакет командой: sudo apt-get install libglib2.0-dev
  • Если появляется ошибка ERROR: pixman >= 0.21.8 not present, можно установить нужный пакет командой: sudo apt-get install libpixman-1-dev

Если возникают другие проблемы, следует искать и устанавливать необходимые пакеты через менеджер пакетов.

Также можно установить QEMU через менеджер пакетов, если в нём содержится более новая версия программы:

# Ubuntu / Debian / Windows WSL
sudo apt-get install qemu

# CentOS / Fedora / RedHat / SUSE
sudo yum install qemu
  1. Windows WSL 2 WSL (Windows Subsystem for Linux) — это подсистема Windows, которая позволяет запускать Linux-среду. С её помощью можно разрабатывать приложения на Linux, используя Windows, и наоборот. Однако при установке Rust могут возникнуть проблемы с конфигурацией среды, поэтому рекомендуется использовать новую версию WSL — WSL 2.

Следует учесть, что версия Ubuntu 20.04 может иметь некоторые проблемы.

Для установки WSL 2 и Ubuntu выполните следующие шаги:

  • Обновите Windows 10 до последней версии (не ниже Windows 10 версии 18917). Если у вас не Windows 10 Pro, возможно, потребуется обновить систему вручную.
  • В настройках Windows включите режим разработчика.
  • Откройте PowerShell с правами администратора и введите следующие команды:
# Включаем функции Windows для работы с Linux
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# Включаем функцию «Установленные виртуальные машины»
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# Замените <Distro> на имя дистрибутива Linux, который вы скачали из Microsoft Store, например: wsl --set-version Ubuntu 2
# Если вы не скачали дистрибутив заранее, пропустите этот шаг
wsl --set-version <Distro> 2

# Устанавливаем WSL 2 по умолчанию, если версия Windows позволяет
wsl --set-default-version 2
  • Загрузите дистрибутив Ubuntu из Microsoft Store.
  • После установки Ubuntu откройте её и выполните инициализацию.
  • Вернитесь в PowerShell и введите команду:
# Проверяем, установлена ли версия WSL 2
# Можно сократить до wsl -l -v
wsl --list --verbose

После завершения установки WSL 2 и Ubuntu можно легко развернуть Linux-окружение в Windows. Для этого следуйте шагам, описанным выше для Linux.

Завершение

После установки QEMU можно проверить успешность установки с помощью команды qemu-system-riscv64 --version.

Установка Rust

Сначала установите менеджер версий Rust rustup и менеджер пакетов cargo с помощью официального скрипта:

curl https://sh.rustup.rs -sSf | sh

Если скрипт не работает, можно загрузить его вручную из браузера или изменить серверы обновлений в скрипте на китайские, чтобы ускорить загрузку:

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
curl https://sh.rustup.rs -sSf | sh

Или можно настроить прокси для ускорения загрузки:

# Например, Shadowsocks
export https_proxy=http://127.0.0.1:1080
export http_proxy=http://127.0.0.1:1080
export ftp_proxy=http://127.0.0.1:1080

После успешной установки откройте новый терминал, чтобы активировать переменные окружения. Также можно применить их к текущему терминалу с помощью команды:

source $HOME/.cargo/env

Затем проверьте правильность установки Rust:

rustc --version

Должна отобразиться текущая версия инструментария.

rustc 1.46.0-nightly (7750c3d46 2020-06-26)

Рекомендуется также изменить адрес сервера crates.io, используемого менеджером пакетов cargo, на китайский сервер для ускорения скачивания сторонних библиотек. Откройте или создайте файл ~/.cargo/config и измените его содержимое на:

``` ## Установка завершена

После установки соответствующего программного обеспечения, для запуска всей системы rCore на вашем компьютере достаточно выполнить следующую команду:  

```bash
# Клонирование репозитория и компиляция запуска
git clone https://github.com/rcore-os/rCore-Tutorial
cd rCore-Tutorial
git checkout master

# Добавление некоторых зависимостей компиляции
# Добавление триады RISC-V
rustup target add riscv64imac-unknown-none-elf
# Добавление необходимых cargo-binutils
cargo install cargo-binutils
rustup component add llvm-tools-preview

# Компиляция и запуск
make run

Если всё прошло успешно, то процессор RISC-V 64, смоделированный QEMU, выведет следующее:

OpenSBI v0.5 (Oct  9 2019 12:03:04)
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name          : QEMU Virt Machine
Platform HART Features : RV64ACDFIMSU
Platform Max HARTs     : 8
Current Hart           : 0
Firmware Base          : 0x80000000
Firmware Size          : 116 KB
Runtime SBI Version    : 0.2

PMP0: 0x0000000080000000-0x000000008001ffff (A)
PMP1: 0x0000000000000000-0xffffffffffffffff (A,R,W,X)
mod memory initialized
mod interrupt initialized
mod driver initialized
.
..
hello_world
notebook
mod fs initialized
hello from kernel thread 7
thread 7 exit
hello from kernel thread 6
thread 6 exit
hello from kernel thread 5
thread 5 exit
hello from kernel thread 4
thread 4 exit
hello from kernel thread 3
thread 3 exit
hello from kernel thread 1
thread 1 exit
hello from kernel thread 8
thread 8 exit
hello from kernel thread 2
thread 2 exit
src/process/processor.rs:87: 'all threads terminated, shutting down'

Следует отметить, что Rust включает в себя stable, beta и nightly версии. По умолчанию мы устанавливаем стабильную версию. Поскольку при написании операционной системы необходимо использовать некоторые нестабильные экспериментальные функции Rust, мы используем ежедневную сборку nightly.

Однако, поскольку официальная версия nightly не гарантирует стабильность ABI, это означает, что код, написанный сегодня с использованием nightly, может быть не скомпилирован в будущем. Поэтому обычно при использовании nightly следует зафиксировать дату.

Поэтому в нашем рабочем каталоге будет файл с именем rust-toolchain (без расширения), который содержит требуемую версию инструментальной цепочки:

nightly-2020-06-27

При первой компиляции проекта rustup автоматически загрузит соответствующую версию инструментальной цепочки. В дальнейшем, при использовании Rust в этом каталоге или его подкаталогах, автоматически будет использоваться эта версия инструментальной цепочки. С последующими обновлениями дата может измениться, поэтому рекомендуется использовать версию из репозитория GitHub.

Теперь, когда всё готово, давайте начнём эксперимент!

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/rcore-os-rCore-Tutorial.git
git@api.gitlife.ru:oschina-mirror/rcore-os-rCore-Tutorial.git
oschina-mirror
rcore-os-rCore-Tutorial
rcore-os-rCore-Tutorial
master