Skip to main content

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 или хост xHCI USB на PCIe. Они выбрали USB-хост и должны были взаимодействовать с чипом на I2C.

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