Компания Corellium собрала образ Linux для работы на процессоре Apple M1
Компания Corellium представила публике сборку ядра Linux, адаптированную для работы на новых компьютерах Apple под управлением процессоров M1. Сборка ядра опубликована под лицензией GPLv2, а все необходимые патчи переданы для включения в основной состав ядра.
Corellium работает над проектом Sandcastle, в рамках которого создаются порты Linux и Android на смартфоны iPhone. В вопросах портирования на железо Apple у Corellium достаточно обширный опыт: уже были сделаны рабочие сборки Linux и Android для iPhone 7 и 7+, обеспечена ограниченная поддержка iPod Touch 7G, активно ведутся работы по портированию на iPhone 6, 8, X и 11.
У создаваемых компанией портов на мобильные устройства есть, конечно же, ряд недостатков. Так, на iPod Touch 7G не работают Wi-Fi, Bluetooth и мультитач, хотя эти проблемы были решены на iPhone 7. Для создания портов и доступа к устройству используется джейлбрейк и checkra1n, а для обращения к файловой системе APFS применяется модифицированный драйвер linux-apfs.
Конкретно для запуска Linux на Mac Mini M1, который оснащен чипом Apple M1, командой был подготовлен готовый образ rootfs. Он собран из на базе образа Ubuntu для установки на Raspberry Pi. Запускается образ с флешки через переход в режим 1TR (recovery OS) при удержании кнопки Power во время загрузки устройства. После появления командной строки требуется выполнить сценарий linuxsetup.sh, который установит ядро и настроит окружение. Для возвращения в MacOS в режиме 1TR достаточно выполнить команду bputil -n
.
Подобный запуск позволяет получить доступ к рабочему столу Ubuntu с поддержкой USB, I2C и DART. Для работы в сети предлагается использовать USB-соединение. Вопрос с аппаратным ускорением и поддержкой расширенной периферии пока не решен, то есть образ весьма ограничен в своих возможностях.
Также кроме Corellium над вопросом запуска Linux на устройствах Apple работает проект Asahi Linux, который ставит себе цель обеспечить полную работоспособность на устройствах под управлением процессоров Apple M1.
Компанию Corellium в случае с Apple M1 вдохновило то, что процессор имеет множество знакомых им архитектурных и логических решений из ARM, то есть работу не надо было начинать с нуля. Однако были и существенные отличия. Linux поддержка работы с 64-разрядными ARM SoC основывается на применении типовых блоков и интерфейсов прошивок. В новом процессоре Apple M1 эти решения почти не использовались.
Например, в обычных ARM SoC активация ядер CPU производится через предоставляемый прошивкой интерфейс PSCI (Power State Coordination Interface), а в процессоре Apple M1 требуется манипуляция с регистром MMIO. Также Apple M1 использует свой контроллер прерываний AIC (Apple Interrupt Controller), который почти несовместим со стандартными ARM GIC. Также используется иной механизм привязки прерываний от таймера. Ну и в дополнение можно сказать, что для организации взаимодействия между несколькими процессорами у Apple применяются отдельные регистры, управляющие IPI (inter-processor interrupts).
Все это, а также использование собственных инструкций и драйверов (например, драйвер Bluetooth), осложняет деятельность команд по портированию Linux на устройства компании Apple. Однако, очевидные результаты уже есть и, вполне возможно, в будущем мы сможем выбирать между MacOS и чистым полноценным Linux на некоторых актуальных устройствах Apple.