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..
Источник