jailhouse

Гипервизор (в рамках данной статьи гипервизор jailhouse) — программа или аппаратная схема, обеспечивающая или позволяющая одновременное, параллельное выполнение нескольких операционных систем на одном и том же хост-компьютере. Гипервизор также обеспечивает изоляцию операционных систем друг от друга, защиту и безопасность, разделение ресурсов между различными запущенными ОС и управление ресурсами[1].

Обзор jailhouse

(назвали тюрьмой, если переводить с английской, подчеркивая раздельное выполнение каждой из ОС).

Jailhouse — статический гипервизор разбиения, который запускает bare metal бинари. Он близко взаимодействует с Linux.  Jailhouse не эмитирует ресурсы, которые не существуют. Он только разбивает существующие аппаратные ресурсы на изолированные отсеки, которые называются клеткам (как в тюрьме) — «cells», данная особенность полностью предназначена чтобы гостевое программное обеспечение было изолировано, такое изолированное программное обеспечение называется заключенным — «inmate». Одна из cell запускается на ОС Linux. Другие cell занимают CPU и устройства из root (корневой) cell, когда они создаются.

На рисунке выше показан jailhouse на ОС Linux. a) Linux до включения jailhouse б) После включения jailhouse в) Linux после создания cell.

Jailhouse состоит из 3 частей: модуль ядра (драйвер), прошивка гипервизора и инструменты, которые пользователь использует чтобы включить гипервизор, создать cell, загрузить inmate бинарь, запустить и остановить. Jailhouse это пример асинхронной мультипроцессорной архитектуры (AMP). Когда вы загружаетe linux на AM57xx-EVM, который имеет 2 arm ядра, linux использует оба ядра (SMP). После разрешения (включения) гипервизора, гипервизор переводит linux на корневую cell. Корневая cell по прежнему использует оба ядра arm. Когда вы создаете новую cell, гипервизор вызывает cpu_down() для arm1 ядра (на рисунке cpu 0), оставляя для linux только arm0. Новая cell будет исполняться на arm1 ядре и аппаратные ресурсы предназначены для cell в сell конфигурационном файле.

Jailhouse — это открытый проект, который можно найти на https://github.com/siemens/jailhouse .

Демо

Процессор Linux SDK предоставляет для Jailhouse готовые бинарные файлы. Вы можете попробовать запустить их сразу после установки. В этом разделе предполагается, что вы уже установили PLSDK и загрузили Linux на AM572X-EVM или AM572x-IDK.
Примечание: чтобы использовать гипервизор jailjouse:

  1. Установите переменную среды u-boot bootargs: setenv bootargs vmalloc=512M
  2. Используйте am572x-evm-jailhouse.dtb для AM572x-EVM или am572x-idk-jailhouse.dtb для AM572x-IDK

Компоненты с предварительной сборкой:

Как уже упоминалось в предыдущем разделе, Jailhouse состоит из следующих компонентов, которые предварительно созданы и скопированы в целевую файловую систему:

  1. jailhouse.ko kernel модуль расположен по следующему пути /lib/modules/4.9.28-<gitid>/extra/driver;
  2. jailhouse.bin — гипервизор расположен в директории /lib/firmware;
  3. Jailhouse инструмены управления jailhouse расположены по следующему пути /usr/local/libexec/jailhouse and /usr/sbin;

Чтобы создать корневую cell и inmate cell, нам необходимо предоставить файлы конфигурации cell. Эти файлы конфигурации и бинарные файлы примеров находятся в каталоге /usr/share/jailhouse/examples:

где

  • am57xx-evm.cell — файл конфигурации корневой cell;
  • ti-app.bin и am57xx-evm-ti-app.cell — bare metal (firmware) inmate и его cell конфигурация;
  • led_test.bin и am57xx-pdk-leddiag.cell — пример для inmate PDK led_test и его конфигурация cell (led_test.bin может работать только на AM572x-EVM);
  • pruss.bin и am572x-rtos-pruss.cell — примеры inmate TI-RTOS PRUSS и конфигурация его cell (pruss.bin может работать только на AM572x-IDK);
  • icss_emac.bin и am572x-rtos-icss.cell — пример inmate ICSS-EMAC TI-RTOS и конфигурация его cell (icss_emac.bin может работать только на AM572x-IDK);
  • linux-loader.bin — загрузчик, необходимый для запуска inmates, начальный адрес которого не равен 0x0;

Запуск демо на AM572x-EVM
Запуск bare-metal ti-app.bin
Вот шаги для запуска демо:

  • Загрузите Linux
  • Вставить модуль ядра jailhouse.ko

  • Включите гипервизор используя am57xx-evm.cell корневой cell конфигурационный файл

  • Создайте cell для inmate

  • Загрузите ti-app.bin inmate бинарь.

  • Старт бинаря.

ПРИМЕЧАНИЕ: все компоненты: корневая cell, гипервизор и демо inmate используют один и тот же UART, и за этого конфликт. Как только inmate начал использовать UART, Linux перестает получать какие-либо данные с консоли. Чтобы обойти это и продолжить управление гипервизором, вы можете подключиться к EVM и отправить все команды из telnet-оболочки (можно использовать ssh). Гипервизор все еще будет использовать консоль Linux для печати отладочных сообщений.

  • Остановка бинаря.

ПРИМЕЧАНИЕ. Вы можете восстановить консоль Linux, убив процесс «/bin/login» из сеанса telnet.

  • Уничтожить cell

  • Отменить (остановить) гипревизор

Примечание:

Вы можете выключить и запустить один и тот же бинарный файл несколько раз. Каждый раз, когда вы запускаете бинарный файл, он стартует с самого начала. Если у вас есть разные бинарные файлы, которые используют одни и те же ресурсы cell, вы можете использовать созданную cell для их запуска. Вам нужно просто закрыть cell, загрузить другой бинарный файл и запустить его. Если вам нужно запускать различные двоичные файлы, требующие разных ресурсов, вам нужно закрыть текущую ячейку, уничтожить ее, создать новую с необходимыми ресурсами, загрузить новый бинарный файл и запустить его.

Запуск PDK led_test.bin примера
После включения гипервизора, создаем pdk cell.

Загружаем led_test.bin

и запускаем его.

Вы можете увидеть мигающие светодиоды, нажмите кнопку «r», чтобы повторить тест.

Примечание: этот пример просто демонстрирует способность гипервизора запускать бинарные файлы, которые были собраны вне дерева исходного кода jailhouse. Этот и другие примеры RTOS были размещены для этой цели. Описание функций примеров см. в документации по RTOS SDK.

Запуск демо проекта на AM572x-IDK

Два примера приложений TI-RTOS были портированы для гипервизора Jailhouse: pruss.bin и icss_emac.bin. В отличие от led_test.bin, который имеет свой собственный код запуска, скрипт компоновщика и был связан с адресом запуска 0x0, pruss.bin и icss_emac.bin используют ti-rtos инфраструктуру сборки как можно больше. Поэтому они связаны с адресным пространством DDR EVM’s (начиная с 0x80000000), и их точка входа не 0x0. Для поддержки загрузки и запуска такого приложения используется специальная командная оболочка.

Чтобы запустить pruss.bin приложение, включите гипервизор так же, как и для других примеров.

Создайте cell pruss.bin

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

где

  • linux-loader.bin — это небольшое приложение, предоставляемое и построенное деревом исходников jailhouse. Как видите приложение (- a 0) загружается в виртуальный адрес 0x0
  • «- s «kernel=0x80005128″ — a 0x100 » — это аргумент linux_loader, загруженный в виде строки в виртуальный адрес 0x100, который указывает linux-loader на ветку pruss.bin точка входа  0x80005128
  • pruss.bin, загружается в виртуальный адрес 0x80000000 — адрес, с которым связано данное приложение
  • После загрузки запустите inmate, как обычно:

Вы можете запустить icss_emac.bin аналогичным образом, используя соответствующую конфигурацию ячейки. Обратите внимание, что icss_emac имеет другую точку входа — 0x80000000.

Отправить ответ

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Уведомлять о