Lintel: различия между версиями

Материал из Базы знаний сообщества разработчиков Эльбрус
Перейти к навигации Перейти к поиску
(Заготовка статьи)
 
(Установка транслятора с помощью Windows)
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
'''Двоичный транслятор уровня системы''' или просто ''транслятор системы'', он же '''Lintel''' (Эль–Intel) — программное обеспечение для платформы Эльбрус, позволяющее запускать операционные системы в машинных кодах x86 (x86-64). Данная разновидность двоичного транслятора действует аналогично гипервизору первого уровня: запускается как нативная ОС в машинных кодах e2k и затем своими средствами стартует гостевую ОС в машинных кодах x86, как на обычном x86-компьютере со своим BIOS и набором эмулируемых и пробрасываемых устройств. В отличие от обычного гипервизора, позволяющего создавать множество виртуальных машин, Lintel обеспечивает работу только одной гостевой ОС. Однако сам Lintel может быть запущен внутри виртуальной машины (под управлением нативного гипервизора для архитектуры Эльбрус — начиная с 6-го поколения), и таким образом на одном компьютере может быть запущено несколько гостевых ОС одновременно. Обратное невозможно, однако: Lintel не позволяет использовать x86-гипервизоры, чтобы создавать виртуальные машины x86 внутри одного гостевого домена.
+
'''Двоичный транслятор уровня системы''' или просто ''транслятор системы'', он же '''Lintel''' (Эль–Intel или просто Линтел) — программное обеспечение для платформы Эльбрус, позволяющее запускать операционные системы в машинных кодах x86 (x86-64). Данная разновидность двоичного транслятора действует аналогично гипервизору первого уровня: запускается как нативная ОС в машинных кодах e2k и затем своими средствами стартует гостевую ОС в машинных кодах x86, как на обычном x86-компьютере со своим BIOS и набором эмулируемых и пробрасываемых устройств. В отличие от обычного гипервизора, позволяющего создавать множество виртуальных машин, Lintel обеспечивает работу только одной гостевой ОС. Однако сам Lintel может быть запущен внутри виртуальной машины (под управлением нативного гипервизора для архитектуры Эльбрус — начиная с 6-го поколения), и таким образом на одном компьютере может быть запущено несколько гостевых ОС одновременно. Обратное невозможно, однако: Lintel не позволяет использовать x86-гипервизоры, чтобы создавать виртуальные машины x86 внутри одного гостевого домена.
  
 
[[Двоичная трансляция]] проходит в режиме реального времени, «на лету», с адаптивной многопроходной оптимизацией, что в сочетании с аппаратными средствами поддержки трансляции, заложенными в архитектуру Эльбрус и обеспечивающими низкие накладные расходы, даёт высокую скорость работы гостевой системы. В отличие от транслятора приложений ([[RTC]]), транслятор уровня системы создаёт наиболее полное подобие имитируемого x86-компьютера, но вместе с тем и бо́льшую поверхность атаки для типовых уязвимостей платформы x86, а также более высокие накладные расходы и ограничения по части использования аппаратных ресурсов, поскольку операции ввода-вывода проходят через слои эмуляции.
 
[[Двоичная трансляция]] проходит в режиме реального времени, «на лету», с адаптивной многопроходной оптимизацией, что в сочетании с аппаратными средствами поддержки трансляции, заложенными в архитектуру Эльбрус и обеспечивающими низкие накладные расходы, даёт высокую скорость работы гостевой системы. В отличие от транслятора приложений ([[RTC]]), транслятор уровня системы создаёт наиболее полное подобие имитируемого x86-компьютера, но вместе с тем и бо́льшую поверхность атаки для типовых уязвимостей платформы x86, а также более высокие накладные расходы и ограничения по части использования аппаратных ресурсов, поскольку операции ввода-вывода проходят через слои эмуляции.
Строка 11: Строка 11:
 
Сам транслятор представляет собой машинный код для конкретной модели процессора Эльбрус и запускается как нативная операционная система из [[ПНС]] или [[МикроОС]].
 
Сам транслятор представляет собой машинный код для конкретной модели процессора Эльбрус и запускается как нативная операционная система из [[ПНС]] или [[МикроОС]].
  
Сопутствующие утилиты в машинных кодах Эльбрус, такие как <code>bcd_read</code> и <code>bcd_write</code>, являются статически скомпонованными программами Linux, то есть не зависят от внешних библиотек, и соответственно могут работать практически в любой Linux-системе для архитектуры Эльбрус.
+
Сопутствующие утилиты в машинных кодах Эльбрус, такие как <code>bcd_read</code> и <code>bcd_write</code>, являются статически скомпонованными программами Linux, то есть не зависят от внешних библиотек, и соответственно могут работать практически в любой Linux-системе для архитектуры Эльбрус. Прочие сопутствующие утилиты, такие как <code>place_lintel.sh</code>, <code>erase_lintel.sh</code> и <code>prepare_log.sh</code>, являются текстовыми скриптами для оболочки Bash и могут работать на любых компьютерах, где работает Bash. Все сопутствующие утилиты являются лишь вспомогательными инструментами и предназначены для удобства выполнения сервисных операций, как то установка и удаление транслятора, извлечение отладочных журналов работы. При отсутствии возможности запускать эти утилиты на самом компьютере Эльбрус под управлением нативной ОС семейства Linux, или на ином компьютере, где есть <code>bash</code> и <code>dd</code>, выполнить все те же операции можно самостоятельно с помощью любых других аналогичных средств, в том числе Windows-программ и т. п. — подробнее см. далее в соответствующих разделах статьи.
  
Прочие сопутствующие утилиты, такие как <code>place_lintel.sh</code>, <code>erase_lintel.sh</code> и <code>prepare_log.sh</code>, являются текстовыми скриптами для оболочки Bash и могут работать на любых компьютерах, где работает Bash.
+
Транслятор может размещаться на следующих видах накопителей:
  
Все сопутствующие утилиты являются лишь вспомогательными инструментами и предназначены для удобства выполнения сервисных операций, как то установка и удаление транслятора, извлечение отладочных журналов работы. При отсутствии возможности запускать эти утилиты на самом компьютере Эльбрус под управлением нативной ОС семейства Linux, или на ином компьютере, где есть <code>bash</code> и <code>dd</code>, выполнить все те же операции можно самостоятельно с помощью любых других аналогичных средств, в том числе Windows-программ и т. п. — подробнее см. далее в соответствующих разделах статьи.
+
* карта памяти, жёсткий диск или твердотельный накопитель с интерфейсом ATA IDE (CompactFlash) или SATA — в этом случае доступны все режимы работы;
 +
* флешка USB — доступна установка на накопитель ATA/SATA или работа в ограниченном режиме без ведения отладочных журналов.
 +
 
 +
Транслятор может размещаться на накопителях следующим образом:
 +
 
 +
* монопольное использование накопителя;
 +
* совместное использование накопителя с гостевой ОС — т. н. «однодисковый» режим, при котором транслятор помещается в конец диска и «откусывает» эту часть, представляя гостевой ОС эмулируемый диск соответственно меньшего размера (требует использования эмуляции IDE со всеми вытекающими ограничениями и накладными расходами — подробнее см. в документации).
 +
 
 +
 
 +
 
 +
== Установка ==
 +
 
 +
Рекомендуется использовать штатную версию пакета '''lintel''', поставляемую разработчиком операционной системы. Однако на данный момент такой пакет штатно входит только в дистрибутив ОС Эльбрус Линукс, поэтому для всех остальных систем предусмотрен универсальный пакет.
 +
 
 +
 
 +
 
 +
=== Установка штатного пакета ===
 +
 
 +
В операционной системе Эльбрус Линукс установка и удаление пакета производятся следующим образом:
 +
 
 +
<pre>
 +
apt-get install lintel
 +
apt-get remove lintel
 +
</pre>
 +
 
 +
Ранее также поставлялись специализированные пакеты ''lintel-apmdz'' и ''lintel-raid'' — они потеряли актуальность.
 +
 
 +
 
 +
=== Установка универсального пакета ===
 +
 
 +
Пакет находится по ссылке в описании {{mcstlink|Lintel}} на сайте МЦСТ — во вкладке «Поддержка»: https://storage.mcst.ru/index.php/s/IU9uIAzuqSWPp7h — перейдя по ссылке и войдя в директорию с нужной версией транслятора, например «''Lintel_5.0''», следует скачать deb-файл с пометкой «'''anyos'''» в имени, например ''lintel_5.0-anyos0u1_all.deb''.
 +
 
 +
В операционных системах на базе пакетов ''deb'' и пакетного менеджера <code>apt</code> (Астра, Эльбрус, Эльбрус-Д) установка производится как обычно, но не по имени пакета, а с указанием пути к deb-файлу, в том числе даже если он находится в текущей директории; а вот удаление — как обычно, по имени пакета:
 +
 
 +
<pre>
 +
apt-get install ./lintel_5.0-anyos0u1_all.deb
 +
apt-get remove lintel
 +
</pre>
 +
 
 +
В операционных системах на базе пакетов ''rpm'' (Альт, Ред ОС, РОСА) необходимо сначала установить низкоуровневый пакетный менеджер <code>dpkg</code> и инициализировать его пакетную базу, после чего работать с deb-пакетами через него:
 +
 
 +
<pre>
 +
#  Ред ОС, РОСА  || Альт
 +
dnf install dpkg || apt-get install dpkg
 +
touch /var/lib/dpkg/status
 +
 
 +
dpkg --install ./lintel_5.0-anyos0u1_all.deb
 +
dpkg --remove lintel
 +
</pre>
 +
 
 +
В последнем случае следует иметь в виду на будущее, что пакетные базы штатного менеджера <code>rpm</code> (<code>apt</code>, <code>dnf</code>) и нештатного менеджера <code>dpkg</code> в таких системах не пересекаются, и необходимо самостоятельно следить за предотвращением конфликтов между пакетами: например, если уже установлен штатный пакет версии 4.3, а вы хотите установить универсальный пакет версии 5.0; или если вы установили универсальный пакет версии 5.0 вместо штатного пакета версии 4.3, а в будущем разработчик ОС выпустит обновление штатного пакета версии 5.0, 5.1 или 6.0, и она будет автоматически выбрана для установки.
 +
 
 +
В качестве крайней альтернативы, при невозможности использования <code>dpkg</code>, распаковать содержимое пакета и запустить процедуру его настройки можно самостоятельно:
 +
 
 +
<pre>
 +
ar -p ./lintel_5.0-anyos0u1_all.deb data.tar.xz | tar --verbose --extract --xz --directory /
 +
</pre>
 +
 
 +
В этом случае вообще никакого контроля со стороны пакетных менеджеров не будет — все операции обновления или удаления придётся осуществлять так же самостоятельно.
 +
 
 +
Универсальный пакет помечен как архитектурно-независимый («all»), потому что содержит в себе исполняемые файлы для всех моделей процессоров Эльбрус. Выбор нужного образа транслятора, соответствующего процессору Эльбрус, производится при записи транслятора на носитель (см. далее) автоматически, если явным образом не указано иное имя файла образа.
 +
 
 +
 
 +
=== Установка транслятора на загрузочный накопитель ===
 +
 
 +
Запись образа транслятора на загрузочный накопитель осуществляется командой:
 +
 
 +
<pre>
 +
/opt/mcst/lintel/bin/place_lintel.sh
 +
</pre>
 +
 
 +
Данный скрипт автоматически выбирает нужный образ транслятора, соответствующий модели процессора, и целевой накопитель, куда будет производиться установка (но только если в компьютере есть карта памяти CompactFlash или иное дисковое устройство с интерфейсом ATA IDE). Если автоматический выбор не срабатывает или нежелателен, можно указать параметры явным образом:
 +
 
 +
<pre>
 +
/opt/mcst/lintel/bin/place_lintel.sh -I lintel_e8c.disk -D /dev/sdx -F -E
 +
# -I имя_образа_транслятора
 +
# -D имя_загрузочного_накопителя
 +
# -F — принудительная перезапись накопителя, несмотря на наличие таблицы разделов MBR
 +
# -E — запись транслятора в конец диска (для «однодискового» режима, где гостевая ОС располагается на одном диске с Lintel)
 +
</pre>
 +
 
 +
То же самое можно сделать самостоятельно с помощью стандартных инструментов Linux, например:
 +
 
 +
<pre>
 +
dd if=/opt/mcst/lintel/bin/lintel_e8c.disk of=/dev/sdx oflag=direct,sync bs=32M
 +
</pre>
 +
 
 +
Но, разумеется, в этом случае придётся самостоятельно определять имя нужного образа и целевой накопитель, не будет страховочной защиты от перезаписи используемого для других задач накопителя, и не получится легко записать образ в конец диска — для этого надо будет самостоятельно рассчитывать нужное смещение с учётом занимаемого пространства (по умолчанию — 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 и т. п., а именно само его содержимое прямо начиная с нулевого сектора дискового устройства. Сделать это можно с помощью программ типа [https://rufus.ie/ru/ Rufus] и [https://etcher.balena.io/ Balena Etcher]; для тех, кто предпочитает интерфейс командной строки, существует также Windows-порт утилиты <code>dd</code> — [http://www.chrysocome.net/dd dd for Windows], равно как и порт [https://gnuwin32.sourceforge.net/packages/coreutils.htm GNU coreutils].

Версия 17:26, 24 сентября 2025

Двоичный транслятор уровня системы или просто транслятор системы, он же 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.