Как написать собственный загрузчик для систем Mac? - PullRequest
0 голосов
/ 02 мая 2019

Я написал небольшой загрузчик в сборке, он использует прерывания BIOS и прекрасно работает на моем компьютере.У меня вопрос, есть ли возможность заставить его работать на системах Mac / Apple.Я знаю, что Apple не использует BIOS в этом смысле и что они блокируют многие вещи.Однако на Mac можно использовать живую флешку Ubuntu, поэтому возможно ли запустить программу сборки из автозагрузки на Mac?Если да, знаете ли вы какие-либо отправные точки или ссылки на то, что было сделано ранее?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

У меня вопрос, есть ли возможность заставить его работать на системах Mac / Apple.

Всегда есть возможность. Например, возможно, что кто-то может портировать системный эмулятор (например, Bochs, Qemu) на UEFI (чтобы он выглядел как приложение UEFI), который способен эмулировать совершенно другой компьютер с BIOS.

На практике вам потребуется написать новый загрузчик для UEFI.

Обратите внимание, что вы также должны предположить, что UEFI является первым шагом в схеме "удаления устаревшего багажа" (и предположить, что Intel "не BIOS после 2020 года, даже не просто модуль совместимости" был сделан, потому что Intel планирует разорвать «устаревший багаж» из наборов микросхем и т. д .; что помешало бы прошивкам, написанным другими людьми, продолжать поддерживать BIOS). Для одного простого примера (который уже существует); Машины Apple не имеют чип-контроллера клавиатуры PS / 2 и не поддерживают «устаревшую эмуляцию PS / 2 для USB-устройств», а попытка получить доступ к чипу контроллера клавиатуры PS / 2 может привести к блокировке компьютера.

Главным образом; Существует целый ряд предположений (например, о карте памяти и существовании таких вещей, как вентиль A20, микросхемы PIC, микросхема PIT, контроллер клавиатуры PS / 2, «BIOS-совместимое» ПЗУ видеокарты, аппаратные регистры VGA и т. д.), которые либо не соответствуют действительности для UEFI, либо не предназначены для будущего для UEFI. По этой причине вам также следует проверять ОС, загружаемую загрузчиком, для выявления и устранения всех (потенциально ложных) «устаревших предположений» (в противном случае, даже если у вас есть очень хороший загрузчик, разработанный для UEFI, ОС вероятно, не удастся вскоре после загрузки).

0 голосов
/ 03 мая 2019

Микропрограмма Mac не обеспечивает устаревший режим BIOS, AFAIK.

Вам придется переписать свой код как 32- или 64-разрядное приложение UEFI, используя вместо системных * системные вызовы UEFI вместо *.1003 * и так далее по вызовам BIOS.Конечно, вы все равно можете написать его в ассемблере, и он все равно будет работать на процессоре.

Сборка - это не просто 16-битный реальный режим с вызовами BIOS.

BIOS int - какие-либо интерфейсы уже устарели и на ПК, но прошивка ПК обычно имеет режим обратного сжатия, который можно включить, который переключает ЦП обратно в реальный режим и предоставляет эти программные интерфейсы.(Сама прошивка, вероятно, переключилась в 32- или 64-битный режим во время загрузки перед загрузкой 512-байтового загрузчика с диска.)

Вот что происходит, когда вы запускаете устаревший код BIOS на своем ПК.


Согласно https://www.ubuntu.com/download/desktop, обычные образы загрузочных дисков Ubuntu x86-64 работают на ПК и Mac, предположительно оба используют UEFI.


Или, возможно, нет, согласно http://www.rodsbooks.com/ubuntu-efi/ загрузка Ubuntu на Mac обычно проходит через Mac firmare Модуль поддержки совместимости (CSM), обеспечивающий эмуляцию BIOS на Mac.(Очевидно, также полезно для некоторых способов загрузки Windows, именно поэтому она существует в первую очередь.) Однако эта страница выглядит устаревшей;Windows также обычно загружается с UEFI на современных ПК.

...