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 со всеми вытекающими ограничениями и накладными расходами — подробнее см. в документации).
Установка
Рекомендуется использовать штатную версию пакета 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»), потому что содержит в себе исполняемые файлы для всех моделей процессоров Эльбрус. Выбор нужного образа транслятора, соответствующего процессору Эльбрус, производится при записи транслятора на носитель (см. далее) автоматически, если явным образом не указано иное имя файла образа.
Установка транслятора на загрузочный накопитель
Запись образа транслятора на загрузочный накопитель осуществляется командой:
/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 Гбайт) и размером буфера.
Установка транслятора с помощью 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.