Содержание статьи
Вклад
HermitCore-rs разрабатывается на GitHub.
Создайте свою собственную вилку, отправьте нам запрос на тяну и поговорите с нами на Slack.
Требования
Процесс сборки работает в настоящее время только на системах на базе x86 Linux . Строить
ядро и теги HermitCore-rs, которые вам нужны:
- CMake
- Netwide Assember (NASM)
- Недавний компилятор хоста, такой как GCC
- Крест-инструментальная цепочка HermitCore, то есть Binutils, GCC, newlib, pthreads
- Компилятор ржавчины (ночной выпуск)
- xargo, который может быть установлен с
грузовой установкой xargo
- Исходный код Rust для Xargo, который может быть установлен с
компонентом rustup, добавляет rust-src
.
Перекрестная инструментальная нить HermitCore-rs
Мы предоставляем готовые пакеты (в настоящее время только Ubuntu 18.04) от HermitCore-rs
Набор инструментов. Пакеты могут быть установлены следующим образом:
$ echo " deb [trusted=yes] https://dl.bintray.com/hermitcore/ubuntu bionic main " | sudo tee -a /etc/apt/sources.list
$ sudo apt-get -qq update
$ sudo apt-get install binutils-hermit newlib-hermit-rs pte-hermit-rs gcc-hermit-rs libomp-hermit-rs
Если вы хотите самостоятельно построить инструментальную цепочку, посмотрите на ветку path2rs
в репозитории
отшельник-набор инструменты.
Он содержит скрипты для создания всей инструментальной цепочки для HermitCore-rs.
В зависимости от того, как вы хотите использовать HermitCore-rs, вам могут потребоваться дополнительные пакеты
таких как:
- QEMU (
apt-get install qemu-system-x86
)
Строительство
Предварительная работа
В качестве первого шага необходимо клонировать хранилище и его подмодули:
$ git clone git@github.com: hermitcore / libhermit-rs.git
$ cd libhermit-rs
$ git подмодуль init
Обновление $ git subodule
Построение библиотечных операционных систем и их примеров
Чтобы построить ядро Rust и его примеры, перейдите в каталог с исходным кодом
и выполните следующие команды:
$ mkdir build
$ cd сборка
$ cmake ..
$ make
$ sudo make install
Если ваша инструментальная цепочка не находится в / opt / hermit / bin
тогда вам нужно поставить
его расположение к команде cmake
выше, например:
$ cmake -DTOOLCHAIN_BIN_DIR = / home / user / hermit / bin ..
Предполагая, что бинарные файлы, такие как x86_64-hermit-gcc
и друзья, находятся в этом
каталог.
Чтобы установить новую версию в тот же каталог, вам необходимо установить путь установки и установить HermitCore-rs следующим образом:
$ cmake -DTOOLCHAIN_BIN_DIR = / home / user / hermit / bin -DCMAKE_INSTALL_PREFIX = / home / user / hermit ..
$ make
$ make install
Примечание: Если вы используете кросс-компилятор вне этого репозитория, он использует библиотечную операционную систему, расположенную
с помощью инструментальной цепочки (например, /opt/hermit/x86_64-hermit/lib/libhermit.a
).
Прокси
Часть HermitCore — это небольшой вспомогательный инструмент, который называется прокси .
Этот инструмент помогает запускать приложения HermitCore на виртуальной машине или голой части на узле NUMA.
В принципе это мост к системе Linux.
Если прокси зарегистрирован как загрузчик системы Linux, приложения HermitCore могут запускаться как обычные приложения Linux.
Прокси можно зарегистрировать с помощью следующей команды:
$ sudo -c sh ' echo ": отшельник: M: 7: \ x42 :: / opt / hermit / bin / proxy:"> / proc / sys / фс / binfmt_misc / регистр
Приложения могут быть затем вызваны так:
$ / opt / отшельник / x86_64-отшельник / дополнительные / тесты / привет
В противном случае прокси-сервер должен быть запущен напрямую и в качестве аргумента нуждается в пути к приложению HermitCore:
$ # с использованием QEMU
$ HERMIT_ISLE = qemu / opt / hermit / bin / proxy / opt / hermit / x86_64-отшельник / дополнительные / тесты / привет
После этого прокси-сервер запускает приложение HermitCore внутри виртуальной машины или голосовой металл на узле NUMA.
Тестирование
Как классический автономный одноядерник в виртуальной машине
Приложения HermitCore могут быть непосредственно запущены как автономное ядро в пределах
виртуальная машина:
$ cd сборка
$ make install DESTDIR = ~ / отшельник
$ cd ~ / hermit-build / opt / отшельник
$ # с использованием QEMU
$ HERMIT_ISLE = qemu bin / proxy x86_64-отшельник / дополнительные / тесты / привет
$ # с использованием uHyve
$ HERMIT_ISLE = uhyve bin / proxy x86_64-отшельник / дополнительные / тесты / привет
С HERMIT_ISLE = qemu
приложение будет запущено в виртуальной машине QEMU.
Обратите внимание, что загрузчик требует QEMU и использует KVM по умолчанию.
Кроме того, он ожидает, что исполняемый файл называется qemu-system-x86_64
.
С HERMIT_ISLE = uhyve
приложение будет запущено в тонком
гипервизор, основанный на KVM API Linux, и поэтому требуется поддержка KVM .
uhyve имеет значительно меньшее время запуска, чем QEMU.
В принципе, это расширение уквм.
В этом контексте переменная среды HERMIT_CPUS
указывает количество
CPU (и уже не диапазон идентификаторов ядра). Кроме того, переменная HERMIT_MEM
определяет размер памяти виртуальной машины. Суффиксы M и G могут быть
используется для указания значения в мегабайтах или гигабайтах соответственно. По умолчанию
loader инициализирует систему с одним ядром и 2 гигабайтами RAM.
Например, следующая команда запускает тест потока на виртуальной машине, который
имеет 4 ядра и 6 ГБ памяти:
$ HERMIT_ISLE = qemu HERMIT_CPUS = 4 HERMIT_MEM = 6G bin / proxy x86_64-отшельник / дополнительные / контрольные точки / поток
Чтобы включить устройство Ethernet для uhyve
мы должны настроить устройство крана на
хост-системы. Например, следующая команда устанавливает устройство крана
tap100
на Linux:
$ sudo ip tuntap add tap100 mode tap
$ sudo ip addr Добавить 10.0.5.1/24 broadcast 10.0.5.255 dev tap100
$ sudo ip link set dev tap100 up
$ sudo bash -c ' echo 1> / proc / sys / net / ipv4 / conf / tap100 / proxy_arp '
По умолчанию сетевой интерфейс uhyve
использует 10.0.5.2
как IP-адрес, 10.0.5.1
для шлюза и 255.255.255.0
в качестве сетевой маски.
Конфигурация по умолчанию может быть перезаписана переменными окружения
HERMIT_IP
HERMIT_GATEWAY
и HERMIT_MASk
.
Чтобы включить устройство, HERMIT_NETIF
должно быть установлено на имя устройства крана.
Например, следующая команда запускает приложение HermitCore в ухиве
и позволяет поддерживать сеть:
$ HERMIT_ISLE = uhyve HERMIT_IP = " 10.0.5.3 " HERMIT_GATEWAY = " 10.0.5.1 HERMIT_MASK = " 255.255.255.0 " HERMIT_NETIF = tap100 bin / proxy x86_64-hermit / extra / tests / hello
Если qemu
используется как hyervisor, виртуальная машина эмулирует интерфейс Ethernet RTL8139 и открывает по крайней мере один порт TCP / IP.
Он используется для связи между приложением HermitCore и его прокси.
Используя переменную окружения HERMIT_PORT
порт связи по умолчанию (18766) можно изменить.
В качестве многоядерного ядра на реальной машине
Скоро …
Создание собственных приложений HermitCore
Вы можете взять usr / tests
в качестве отправной точки для создания собственных приложений. Все
требуется, чтобы вы включили
[...] /HermitCore/cmake/HermitCore-Application.cmake
в приложении
CMakeLists.txt
. Он не должен находиться внутри репозитория HermitCore.
Кроме этого, он должен вести себя как обычный CMake.
Отладка
Если приложение запущено через сделайте qemu
отладка через GDB включена
по умолчанию на порту 1234. При запуске через прокси ( HERMIT_ISLE = qemu
) установите
HERMIT_DEBUG = 1
.
$ gdb x86_64-отшельник / дополнительные / тесты / привет
(gdb) target extended-remote: 1234
Удаленная отладка с использованием: 1234
0xffffffff8100b542 в ?? ()
Советы
Оптимизация
Вы можете настроить флаг компилятора -mtune = name
добавив -DMTUNE = имя
в
команда cmake
при настройке проекта.
Обратите внимание: если приложения запускаются в виртуальной машине, гипервизор должен
поддерживают указанное имя архитектуры.
Если QEMU запущен нашим прокси и переменной окружения установлен HERMIT_KVM
к 0
виртуальная машина не будет ускорена KVM. В этом случае
-mtune
следует избегать.
TCP-соединения
Используя переменную окружения HERMIT_APP_PORT
можно открыть дополнительный порт
установить соединение TCP / IP с вашим приложением.
Сбрасывание журнала ядра
Установив переменную окружения HERMIT_VERBOSE
на 1
прокси-печать
сообщения журнала ядра на экран при завершении.
Трассировка сети
Установив переменную окружения HERMIT_CAPTURE_NET
на 1
и
HERMIT_ISLE
— qemu
QEMU фиксирует сетевой трафик и создает трассировку
файл qemu-vlan0.pcap . Вы можете проанализировать файл, например.
Wireshark.
Монитор
Если HERMIT_MONITOR
установлено в 1
и HERMIT_ISLE
— qemu
QEMU устанавливает
монитор, который доступен через telnet в порту 18767.
Используя переменную окружения HERMIT_PORT
порт по умолчанию (18766) можно изменить для связи между приложением HermitCore и его прокси.
Подключение к системному монитору автоматически устанавливается на HERMIT_PORT + 1
то есть порт по умолчанию — 18767.
Кредиты
Emoji от HermitCore предоставляется бесплатно от EmojiOne.