Среда развёртывания
Перед началом эксперимента необходимо заранее установить на разные платформы соответствующие зависимости. Среди них:
Процесс установки на разных платформах схож, но есть небольшие различия. Они будут описаны позже.
Установка QEMU
В зависимости от платформы процесс установки можно разделить на три части.
brew install 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
Следует учесть, что версия Ubuntu 20.04 может иметь некоторые проблемы.
Для установки WSL 2 и Ubuntu выполните следующие шаги:
# Включаем функции 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
# Проверяем, установлена ли версия 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 )