Как Linux был перенесен на Apple Silicon M1 Mac mini

linux, apple, silicon, mini

Linux теперь работает на Mac mini с процессором M1, но Apple не упростила для команды перенос ОС с ее собственной прошивкой и уникальными путями к данным. Вот как Кореллиум добился этого.

Теперь, когда Linux полностью совместим с Mac с процессорами M1, команда Corellium подробно описала процесс портирования ОС..

В сообщении в четверг Corellium сообщает, что они изучают кастомные процессоры Apple с момента выпуска iPhone 6 в 2014 году. Компания использовала некоторые эксплойты и предыдущее исследование для создания порта ядра на процессор A10 в начале 2020 года..

Apple выпустила компьютеры Mac с процессором M1 в ноябре 2020 года. Последующее обновление ОС позволило пользователям устанавливать собственные ядра. После добавления этой возможности команда Corellium начала работу над портом Linux..

Corellium утверждает, что M1 имеет много общих компонентов с процессорами Apple серии A. Однако это помогает только в том случае, если Apple не использует стандарты, установленные другими производителями ARM..

Команда Corellium подробно описала проблемы, с которыми они столкнулись при переносе Linux..

Технические детали

Команда Corellium заявляет, что Apple не загружает свои процессоры традиционными способами. Сначала загрузчик запускает исполняемый файл, называемый форматом объектного файла Mach (Mach-O), заключенный в подписанный формат-оболочку IMG4. Это становится еще более сложным, когда задействовано больше ядер ЦП, поскольку они начинаются с адреса, указанного в регистре ввода-вывода с отображением памяти (MMIO), а затем запускают ядро..

Apple разработала собственный контроллер, выходящий за рамки обычных стандартов ARM Generic Interrupt Controller (GIC). Прерывания таймера направляются в запрос быстрого прерывания (FIQ), который не является стандартным и отражает старую 32-битную систему ARM. Команда говорит, что вы должны предоставить набор межпроцессорных прерываний (IPI), чтобы несколько процессоров могли взаимодействовать..

Команда Corellium имела опыт работы с поддержкой FIQ и была готова к большинству нестандартных подходов Apple. В конце концов, команда добавила предзагрузчик, который действует как оболочка для Linux, что привело к загрузке ОС на процессоре M1..

У команды не было интерфейсного кабеля для M1 Mac, и ей пришлось искать альтернативный входной маршрут. Из трех вариантов — Bluetooth, USB-хост или USB-хост xHCI на PCIe — они выбрали USB-хост и должны были взаимодействовать с чипом на I2C..

После того, как у них было правильное USB-соединение, они могли подключить клавиатуру, мышь и флешку. Это открыло возможность для запуска обычного настольного дистрибутива Linux..

Источник