Lintel

Материал из Базы знаний сообщества разработчиков Эльбрус
Перейти к навигации Перейти к поиску

Двоичный транслятор уровня системы или просто транслятор системы, он же Lintel (Эль–Intel или просто Линтел) — программное обеспечение для платформы Эльбрус, позволяющее запускать операционные системы в машинных кодах x86 (x86-64). Данная разновидность двоичного транслятора действует аналогично гипервизору первого уровня: запускается как нативная ОС в машинных кодах e2k и затем своими средствами стартует гостевую ОС в машинных кодах x86, как на обычном x86-компьютере со своим BIOS и набором эмулируемых и пробрасываемых устройств. В отличие от обычного гипервизора, позволяющего создавать множество виртуальных машин, Lintel обеспечивает работу только одной гостевой ОС. Однако сам Lintel может быть запущен внутри виртуальной машины (под управлением нативного гипервизора для архитектуры Эльбрус — начиная с 6-го поколения), и таким образом на одном компьютере может быть запущено несколько гостевых ОС одновременно. Обратное невозможно, однако: Lintel не позволяет использовать x86-гипервизоры, чтобы создавать виртуальные машины x86 внутри одного гостевого домена.

Двоичная трансляция проходит в режиме реального времени, «на лету», с адаптивной многопроходной оптимизацией, что в сочетании с аппаратными средствами поддержки трансляции, заложенными в архитектуру Эльбрус и обеспечивающими низкие накладные расходы, даёт высокую скорость работы гостевой системы. В отличие от транслятора приложений (RTC), транслятор уровня системы создаёт наиболее полное подобие имитируемого x86-компьютера, но вместе с тем и бо́льшую поверхность атаки для типовых уязвимостей платформы x86, а также более высокие накладные расходы и ограничения по части использования аппаратных ресурсов, поскольку операции ввода-вывода проходят через слои эмуляции.

Подробнее на сайте МЦСТ: Lintel


Системные требования

Сам транслятор представляет собой машинный код для конкретной модели процессора Эльбрус и запускается как нативная операционная система из ПНС или МикроОС.

Сопутствующие утилиты в машинных кодах Эльбрус, такие как bcd_read и bcd_write, являются статически скомпонованными программами Linux, то есть не зависят от внешних библиотек, и соответственно могут работать практически в любой Linux-системе для архитектуры Эльбрус. Прочие сопутствующие утилиты, такие как place_lintel.sh, erase_lintel.sh и prepare_log.sh, являются текстовыми скриптами для оболочки Bash и могут работать на любых компьютерах, где работает Bash. Все сопутствующие утилиты являются лишь вспомогательными инструментами и предназначены для удобства выполнения сервисных операций, как то установка и удаление транслятора, извлечение отладочных журналов работы. При отсутствии возможности запускать эти утилиты на самом компьютере Эльбрус под управлением нативной ОС семейства Linux, или на ином компьютере, где есть bash и dd, выполнить все те же операции можно самостоятельно с помощью любых других аналогичных средств, в том числе Windows-программ и т. п. — подробнее см. далее в соответствующих разделах статьи.

Транслятор может размещаться на следующих видах накопителей:

  • карта памяти, жёсткий диск или твердотельный накопитель с интерфейсом ATA IDE (CompactFlash) или SATA — в этом случае доступны все режимы работы;
  • флешка USB — доступна установка на накопитель ATA/SATA или работа в ограниченном режиме без ведения отладочных журналов.

Транслятор может размещаться на накопителях следующим образом:

  • монопольное использование накопителя — весь накопитель используется для хранения образа транслятора, его настроек и отладочных журналов;
  • совместное использование накопителя с гостевой ОС — т. н. «однодисковый» режим, при котором транслятор помещается в конец диска и «откусывает» эту часть, представляя гостевой ОС эмулируемый диск соответственно меньшего размера (требует использования эмуляции IDE со всеми вытекающими ограничениями и накладными расходами — подробнее см. в документации).

Транслятор использует под собственные нужды 1 или 2 процессорных ядра, в зависимости от настроек. Функционирование транслятора на 1-ядерном процессоре, таком как Эльбрус-1С+, теоретически реализуемо, однако представляется нецелесообразным с точки зрения скорости работы.

Транслятор может работать на многопроцессорных серверах. Ранние версии транслятора имели ограничения в части использования оперативной памяти и контроллеров периферии (и подключённых к ним устройств), подключённых к вторичным процессорам (AP — application processor) — использовались только ресурсы, подключённые к первичному процессору (BSP — bootstrap processor), тогда как процессорные ядра были доступны все без ограничений. В актуальных версиях транслятора эти ограничения сняты, как и многие другие. Подробнее см. в документации конкретной версии транслятора.

Установка

Рекомендуется использовать штатную версию пакета lintel, поставляемую разработчиком операционной системы. Однако на данный момент такой пакет штатно входит только в дистрибутив ОС Эльбрус Линукс, поэтому для всех остальных систем предусмотрен универсальный пакет.


Установка штатного пакета

В операционной системе Эльбрус Линукс установка и удаление пакета производятся следующим образом:

apt-get install lintel
apt-get remove lintel

Ранее также поставлялись специализированные пакеты lintel-apmdz и lintel-raid — они потеряли актуальность.


Установка универсального пакета

Пакет находится по ссылке в описании Lintel на сайте МЦСТ — во вкладке «Поддержка»: https://storage.mcst.ru/index.php/s/IU9uIAzuqSWPp7h — перейдя по ссылке и войдя в директорию с нужной версией транслятора, например «Lintel_5.0», следует скачать deb-файл с пометкой «anyos» в имени, например lintel_5.0-anyos0u1_all.deb.

В операционных системах на базе пакетов deb и пакетного менеджера apt (Астра, Эльбрус, Эльбрус-Д) установка производится как обычно, но не по имени пакета, а с указанием пути к deb-файлу, в том числе даже если он находится в текущей директории; а вот удаление — как обычно, по имени пакета:

apt-get install ./lintel_5.0-anyos0u1_all.deb
apt-get remove lintel

В операционных системах на базе пакетов rpm (Альт, Ред ОС, РОСА) необходимо сначала установить низкоуровневый пакетный менеджер dpkg и инициализировать его пакетную базу, после чего работать с deb-пакетами через него:

#  Ред ОС, РОСА  || Альт
dnf install dpkg || apt-get install dpkg
touch /var/lib/dpkg/status

dpkg --install ./lintel_5.0-anyos0u1_all.deb
dpkg --remove lintel

В последнем случае следует иметь в виду на будущее, что пакетные базы штатного менеджера rpm (apt, dnf) и нештатного менеджера dpkg в таких системах не пересекаются, и необходимо самостоятельно следить за предотвращением конфликтов между пакетами: например, если уже установлен штатный пакет версии 4.3, а вы хотите установить универсальный пакет версии 5.0; или если вы установили универсальный пакет версии 5.0 вместо штатного пакета версии 4.3, а в будущем разработчик ОС выпустит обновление штатного пакета версии 5.0, 5.1 или 6.0, и она будет автоматически выбрана для установки.

В качестве крайней альтернативы, при невозможности использования dpkg, распаковать содержимое пакета и запустить процедуру его настройки можно самостоятельно:

ar -p ./lintel_5.0-anyos0u1_all.deb data.tar.xz | tar --verbose --extract --xz --directory /

В этом случае вообще никакого контроля со стороны пакетных менеджеров не будет — все операции обновления или удаления придётся осуществлять так же самостоятельно.

Универсальный пакет помечен как архитектурно-независимый («all»), потому что содержит в себе исполняемые файлы для всех моделей процессоров Эльбрус. Выбор нужного образа транслятора, соответствующего процессору Эльбрус, производится при записи транслятора на носитель (см. далее) автоматически, если явным образом не указано иное имя файла образа.


Установка фирменного пакета МЦСТ

Рядом с универсальным пакетом выложены для скачивания deb-пакеты из состава Эльбрус Линукс. Их отличие от универсального пакета в том, что они содержат исполняемые файлы только для одной модели процессора Эльбрус. Они предназначены в первую очередь для предоставления новых версий Lintel для старых выпусков ОС Эльбрус Линукс, а также для обновления Lintel в текущем выпуске ОС Эльбрус Линукс без подключения к онлайн-репозиторию обновлений. Использование этих пакетов в других ОС возможно наравне с универсальным пакетом, но в некоторых ОС могут возникнуть неудобства из-за несоответствия в обозначении архитектуры процессора: например, в Астра Линукс все прикладные пакеты должны быть помечены как «e2k-8c» (Эльбрус-8С), и чтобы установить пакет для Эльбрус-2С3 («e2k-2c3»), придётся использовать опции принудительной установки с игнорированием несоответствия архитектуры. Далее предполагается, что пакеты устанавливаются в Эльбрус Линукс.

Чтобы выбрать пакет для скачивания, необходимый вашей системе, сверьтесь с таблицей Идентификаторы процессоров (графа «deb-arch») для определения суффикса имени пакетов, соответствующего модели процессора, либо запросите пакетный менеджер:

dpkg-architecture --query DEB_TARGET_ARCH
# Эльбрус-2С3 = e2k-2c3
# Эльбрус-4С  = e2k-4c
# Эльбрус-8С  = e2k-8c
# Эльбрус-8СВ = e2k-8c2
# Эльбрус-16С = e2k-16c

Установите новый пакет из скачанного файла:

apt install ./lintel_5.0-vd9u5_e2k-8c2.deb

В старых версиях ОС, где apt ещё не поддерживал установку из файла, можно использовать dpkg:

dpkg --install ./lintel_5.0-vd9u5_e2k-8c2.deb

Несмотря на то, что в имени файла пакета упоминается конкретная версия Эльбрус Линукс — например, «vd9» означает версию 9.x — в случае пакета Lintel это всего лишь обозначение номера версии дистрибутива, для которой этот пакет был штатно собран. Использовать его можно и в других версиях ОС Эльбрус Линукс — как более новых, так и старых.

В сторонних ОС, где пакетный менеджер dpkg настроен на другое обозначение процессорной архитектуры, установить пакет с игнорированием несоответствия можно следующим образом:

dpkg --force-architecture --install ./lintel_5.0-vd9u5_e2k-8c2.deb


Установка транслятора на загрузочный накопитель

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

/opt/mcst/lintel/bin/place_lintel.sh

Данный скрипт автоматически выбирает нужный образ транслятора, соответствующий модели процессора, и целевой накопитель, куда будет производиться установка (но только если в компьютере есть карта памяти CompactFlash или иное дисковое устройство с интерфейсом ATA IDE). Если автоматический выбор не срабатывает или нежелателен, можно указать параметры явным образом:

/opt/mcst/lintel/bin/place_lintel.sh -I lintel_e8c.disk -D /dev/sdx -F -E
# -I имя_образа_транслятора
# -D имя_загрузочного_накопителя
# -F — принудительная перезапись накопителя, несмотря на наличие таблицы разделов MBR
# -E — запись транслятора в конец диска (для «однодискового» режима, где гостевая ОС располагается на одном диске с Lintel)

То же самое можно сделать самостоятельно с помощью стандартных инструментов Linux, например:

dd if=/opt/mcst/lintel/bin/lintel_e8c.disk of=/dev/sdx oflag=direct,sync bs=32M

Но, разумеется, в этом случае придётся самостоятельно определять имя нужного образа и целевой накопитель, не будет страховочной защиты от перезаписи используемого для других задач накопителя, и не получится легко записать образ в конец диска — для этого надо будет самостоятельно рассчитывать нужное смещение с учётом занимаемого пространства (по умолчанию — 4 Гбайт) и размером буфера (для утилиты dd смещения указываются в единицах, кратных размеру буфера, задаваемому параметром bs).


Установка транслятора с помощью Windows

Если нет возможности установить пакет в Linux-систему на самом компьютере Эльбрус, и в распоряжении нет других компьютеров с Linux-системой, а только с Windows, то распаковать содержимое deb-пакета можно с помощью архиватора 7-Zip, например: при открытии deb-пакета в графической оболочке архиватора (7zFM) отображается вложенный архив data.tar — надо войти внутрь него и оттуда распаковать директорию opt или её поддиректорию lintel в любую временную директорию. В результате там появятся 2 директории:

  • bin — программы;
  • doc — документация.

Зайдите в директорию bin и выберите файл образа, соответствующий модели процессора на целевом компьютере Эльбрус, — например, lintel_e2c3.disk для процессора Эльбрус-2С3.

Возьмите USB-флешку (или SATA-накопитель, который потом сможете вставить в компьютер Эльбрус) и запишите на неё этот образ транслятора в блочном режиме — то есть не в виде файла lintel_e2c3.disk в файловой системе FAT32 и т. п., а именно само его содержимое прямо начиная с нулевого сектора дискового устройства. Сделать это можно с помощью программ типа Rufus и Balena Etcher; для тех, кто предпочитает интерфейс командной строки, существует также Windows-порт утилиты dd — dd for Windows, равно как и порт GNU coreutils.