Один Linux — для разных ARM-процессоров
Хакинг для новичков
До настоящего времени для каждой ARM-платформы на каждом отдельном процессоре (SoC) приходилось создавать отдельный билд Linux. Это была главная сложность портирования Linux на мобильные устройства, которые работают на ARM.
В мире ARM-процессоров совершенно нет унификации. Все SoC сильно отличаются друг от друга на уровне аппаратной конфигурации, поэтому раньше нельзя было взять Linux с одной ARM-системы и поставить на другую. Хуже того, даже разные устройства на одном ARM могут по разному использовать GPIO, и если на прошлом устройстве этот GPIO включал светодиод питания, то сейчас он может отключать порт USB. Все эти изменения приходится вносить в ядро ОС, причём изменения могут быть взаимоисключающими, то есть возникают конфликты. Как точно выразился Линус Торвальдс, «вся эта мутотень с ARM — большой хреновый геморрой».
К счастью, ситуация немного изменится с выходом следующей версии Linux 3.7 уже через пару месяцев. Новая версия ядра будет изначально поддерживать несколько SoC-платформ на процессорах ARM. Это не только сразу сделает возможным использование нового ядра на многочисленных ARM-процессорах, но и вообще приблизит платформу ARM по уровню развитости инфраструктуры к конкурентной платформе x86.
«Это довольно существенная ветка, — говорит автор соответствующего коммита Олоф Йоханссон (Olof Johansson). — Мы впервые представляем мультиплатформенную поддержку для ARM, и когда эта (и следующая) ветка сольётся с основной, станет возможным сделать одно ядро с поддержкой highbank, vexpress, mvebu, socfpga и picoxcell. Дополнительные платформы будут добавлены к следующим релизам».
Изменения в соответствующую ветку Linux 3.7 внесены 2 октября 2012 года. Ниже приведён фрагмент из письма Линуса Торвальдса с перечнем изменённых файлов.
Единая ОС Linux для всех ARM-систем
Процессоры ARM и Linux существуют в тесной связке много лет. Назовите какое-нибудь устройство на базе процессора ARM (смартфон, Raspberry Pi, планшет) — и вы обнаружите в нем Linux. Несмотря на это, союз был несчастлив. Для каждой однокристальной системы (System on a Chip или SoC) требовалась отдельная версия Linux. С грядущим ядром Linux 3.7 мы на пути к единому ядру для всех ARM-процессоров.
Наконец-то мы на пути к единственному ядру Linux для всех смартфонов, планшетов и других устройства на ARM.
Хотя семейство процессоров ARM оставалось унифицированным, каждый производитель SoC поддерживал периферийные устройства по-своему. На ПК x86 у нас была BIOS, а позднее и Unified Extensible Firmware Interface (UEFI), с общим программным интерфейсом (API) для ядра Linux. В то время как на разных ARM SoC нельзя было рассчитывать даже на одинаковую работу API с такими типичными подсистемами, как General Purpose Input/Output (GPIO).
За несколько лет новые ARM SoC и устройства для конечных пользователей заполнили рынки. В итоге пришлось заново изобретать колесо для каждого нового чипа и устройства. Это чрезвычайно раздражало низкоуровневых ARM-разработчиков и еще больше высокоуровневых Linux-разработчиков.
Линус Торвальдс решил, что с него хватит. 18 марта 2011-го он написал: “Парни, в целом ARM как чёртова заноза в пальце”. И продолжил: “Вы должны прекратить наступать друг другу на ноги. Беспричинные безумные изменения файлов постоянно приводят к раздражающим конфликтам просто потому, что разные люди в разных ветках ARM эгоистически переименовывают какие-то случайные устройства. Я серьезно”.
Не то чтобы Торвальдс не хотел работать с ними. Дело в том, что сообщество ARM не достигло консенсуса. “Кто-то должен взять в свои руки управление сообществом ARM. Парни, это просто смешно, количество безумных изменений раздражает само по себе. Я получил независимые запросы от четырех разных человек на доступ к одним и тем же файлам, это означает, что здесь что-то не так”, — написал он.
Насколько плохо дела обстоят в действительности? Дэвид Раслинг, технический директор объединения Linaro (от Linux-on-ARM), ранее писал: “Вот цифры для оценки масштаба проблемы — каждый новый релиз ядра содержит около 70000 новых строк кода для ARM, в то время как для x86 около 5000 строк”. Это большое количество кода, которое нужно написать и проверить для каждого нового релиза.
Особенно раздражали Торвальдса совершенно ненужные изменения. “Прекратите безумные переименования! — призвал Торвальдс — Просто остановитесь. Не переименовывайте беспричинно платы и драйверы, особенно если очевидны противоречия. Это бессмысленно. Я говорю не только о переименовании файлов (что случалось и может доставить “удовольствие” при попытке разрешить конфликт, когда кто-то другой делает другие изменения), но и о глупых “изменениях имен, удобных для восприятия человеком” в файлах, что раздражает любого, кто объединяет мусорный код”.
Торвальдс подвел итог: “Кому-то в сообществе ARM нужно взять ответственность на себя и остановить любительские модификации”.
ARM-разработчики вняли призыву.
В этом месяце Торвальдс с радостью объявил о “вливании” мультиплатформенного кода ARM в главное ядро Linux. Работающий над проектом инженер по Google Linux и ARM Улоф Йохансон написал: “Это довольно важная ветка, начало мультиплатформенной поддержки ARM. Данное слияние и более поздние помогут создать единое ядро с поддержкой ARM-платформ Highbank, VExpress, Mvebu, SoC FPGA и Picoxcell. В ближайших релизах будет обеспечена поддержка большего количества платформ”.
Йоханссон также сообщил: “Для того, чтобы это стало практически возможным, пришлось сделать две критически важные вещи:
- Сегодня каждая платформа имеет свой собственный каталог include в mach- /include/mach/*. Традиционно в каталоге include много общих определений драйверов/платформ, таких как структуры данных для платформы. В новой ветке большинство перемещено в include/linux/platform_data.
- Для каждой платформы дерево устройств для платы располагается в mach- /Makefile.boot.
По мнению Йоханссона, будет нелегко: “Оба изменения приведут к некоторым конфликтам при слиянии. Но это однократная работа и после ее завершения мы обеспечим порядок на продолжительное время”.
Решение неидеальное. Но пока производители ARM не могут договориться об эквиваленте BIOS или UEFI, единая структура каталогов для каждого ARM SoC устройства все же много лучше, чем создание модифицированного ядра Linux для каждого отдельного SoC.
Удивительно, что популярность ARM-устройств очень высока, невзирая на проблемы с низкоуровневым программированием. Благодаря этой популярности у производителей ARM/Linux есть возможность быстрее внедрять инновации и выводить продукты на рынок.
Использование Astra Linux на встраиваемом компьютере с архитектурой ARM
Новые тенденции с сфере импортозамещения заставляют российские компании переходить на отечественные операционные системы. Одной из таких систем является российская ОС на базе Debian – Astra Linux. В сфере государственных закупок все чаще встречаются требования по использованию отечественного программного обеспечения с сертификатами ФСТЭК, а также его вхождения в реестр отечественного ПО. Хотя стоить отметить, что по закону наличие сертификата ФСТЭК не является обязательным.
Большинство российских операционных систем созданы для использования в режиме «Рабочая станция», то есть фактически это аналоги решений архитектуры x86 для рабочего места сотрудника. Мы же решили установить ОС Astra Linux на архитектуру ARM, с целью использовать ОС российского производства в промышленной сфере, а именно во встраиваемом компьютере AntexGate (не будем сейчас углубляться в преимущества ARM архитектуры над x86).
Почему Мы выбрали ОС Astra Linux?
Почему Мы выбрали встраиваемый ПК архитектуры ARM?
Рис. 1 — Архитектура ARM
Варианты применения ПК на архитектуре ARM
1. Получение дистрибутива AstraLinux
Для получения дистрибутива необходимо написать письмо-запрос любому официальному авторизованному партнеру НПО “РусБиТех”. Далее необходимо будет подписать соглашение о конфиденциальности и неразглашении информации и соглашение о научно-техническом сотрудничестве (если Ваша компания является разработчиком software или hardware).
Рис. 2 — Описание релизов AstraLinux
2. Установка AstraLinux на устройство AntexGate
После получения дистрибутива AstraLinux необходимо установить его на целевое устройство (в нашем случае это встраиваемый ПК AntexGate). Официальная инструкция говорит нам использовать любую ОС Linux для установки AstraLinux на ARM компьютер, но мы решили попробовать сделать это на ОС Windows. Итак, выполним следующую последовательность действий:
1. Загрузите и установите программное обеспечение для операционной системы Windows.
2. Подключите устройство через Micro USB к компьютеру.
3. Подайте питание на устройство, теперь Windows должна найти оборудование и установить драйвер.
4. После завершения установки драйвера запустите программу.
5. Через несколько секунд накопитель eMMC появится в Windows как запоминающее устройство USB.
6. Загрузите утилиту Win32DiskImager со страницы проекта Sourceforge и установите программу в штатном режиме.
7. Запустите только что установленное программное обеспечение Win32DiskImager.
8. Выберите файл образа AstraLinux, который вы получили ранее.
9. В поле устройства выберите букву диска с eMMC-картой. Будьте осторожны: если вы выберете неправильный диск, то можете уничтожить данные с жесткого диска вашего компьютера!
10. Нажмите «Записать» и дождитесь завершения записи.
11. Перезагрузите устройство.
Перезагрузка устройства должна привести к тому, что устройство загрузит образ операционной системы AstraLinux из eMMC.
3. Использование Astra Linux
После загрузки устройства появится экран авторизации. В поле логина вводим «admin», паролем также является слово «admin». После удачной авторизации появится рабочий стол (рис. 3).
Рис. 3 — Рабочий стол AstraLinux
Первым делом бросается в глаза то, что рабочий стол действительно похож на Windows, все элементы и диалоги называются привычным образом («Панель управления», «Рабочий стол», «Проводник», «Мой компьютер» на рабочем столе). Что немаловажно, на Astra Linux установлены даже «Пасьянс» и «Сапер»!
Рис. 4 — Вкладка «Офис» в меню пуск AstraLinux
Рис. 5 — Вкладка «Сеть» в меню пуск AstraLinux
Рис. 6 — Вкладка «Системные» в меню пуск AstraLinux
Рис. 7 — Панель управления AstraLinux
Стоит отметить, что для использования в качестве встраиваемых решений есть доступ по SSH, через Linux консоль, также возможна установка любимых Debian пакетов (nginx, apache и т.д.). Таким образом, для бывших пользователей Windows имеется привычный рабочий стол, а для опытных пользователей Linux и встраиваемых решений — консоль.
Рис. 8 — Консоль AstraLinux
Оптимизация работы AstraLinux
1. Для устройств с невысокой аппаратной производительностью советуем использовать монитор с невысоким разрешением, либо вручную снизить разрешение в файле /boot/config.txt до 1280х720.
2. Также советуем установить утилиту для автоматического управления частотой процессора: