вторник, 23 мая 2017 г.

Как загрузиться с Live USB на компьютере с 32-битном интерфейсом uefi

Однажды мне попался странный ноутбук (Asus Eee PC X101CH). Я пытался загрузиться с Live USB, но безуспешно, хотя я полностью уверен, что загрузочная флешка подготовлена правильно. Причём не важно, создаю ли я флешку для bios или для uefi, результат один — компьютер с неё не загружается.
uefi32
Как потом выяснил, проблема была в том, что ноутбук поддерживал режим EFI, но был 32-битным. То есть загружаясь со флешки с 64-битной OS прошивка ноутбука пыталась найти 32-битные исполняемые файлы в каталоге efi (которых там разумеется нет), а если подготовить флешку с 32-битной версии OS, загрузка всё равно не удастся, поскольку каталог efi в ней вообще не предусмотрен, но прошивка хочет грузиться в режиме efi. В этой статье мы узнаем как выкрутиться из данной ситуации.


На современных компьютерах производители уже несколько лет выпускают материнские платы с новым расширяемым интерфейсом прошивки (uefi), который пришёл на смену базовой системе ввода-вывода (bios).
Биос — это первая программа, которая исполняется при включении компьютера. Придуман он был для облегчения разработки прикладного по, так как снимал с программистов задачу по взаимодействию с железом компьютера, и они могли сосредоточиться на логике программы.
В те времена компьютеры были 16-битные (1975 год), доступ к настройкам биоса был не таким, каким мы его знаем сегодня, а был захардкожен для загрузки со специальной дискеты. Любой, кто имел физический доступ к компьютеру и имел на руках такую дискету мог делать с компьютером всё что захочет: никаких механизмов защиты от перепрограммирования  чипа с биосом не было — компьютеры работали в реальном режиме (Real mode).
Затем технологии улучшались, интерфейсы менялись, но биосы остались 16-битными из соображений обратной совместимости. Появились 32-битные процессоры, которые работали в защищённом режиме (Protected mode), который не давал операционке, работающей в этом режиме, прямого доступа для перепрограммирования чипа. В 32-битном режиме по аппаратным причинам было невозможно получить доступ практически ни к одной функции биоса.
режимы процессоров
Но вы спросите, а как же тогда делается обновление биос из-под Windows?Для этого используется специальный режим эмуляции того 16-битного режима (Virtual 8086 Mode). Он имеет свои проблемы, но используется именно он, так как в современном длинном режиме 64-битных процессоров (Long mode) доступа к функциям bios нет вообще.
Кстати поэтому некоторые производители предлагают утилиты обновления bios для той древней dos: да, и здесь есть свои ограничения, например с памятью, но зато инструкции выполняются в том самом 16-битном режиме (родном, не эмулированном), который производители процессоров продолжают поддерживать до сих пор. Ведь по сути если взять компьютер на платформе uefi и переставить его на совместимую материнку на компьютер с legacy bios’ом, то он будет работать.
Хотя это справедливо только на данный момент, а в будущем, лет может через 20, всё может поменяться. Сейчас инициализация 64 битного режима процессора идёт поэтапно: сначала 16bit, потом 32bit, и только потом 64bit. Когда биосы уже прочно уйдут из нашей жизни,  возможно производители  захотят упростить свои процессоры: во-первых чтобы не нужно было тащить тот несчастный 16-битный режим, а во-вторых чтобы сразу инициализировать процессоры в 64bit режиме. Тогда аппаратная совместимость пропадёт и мы не сможем запустить Disk Operating System. Какой ужас, правда? =)
Короче говоря, думаю вы поняли, что bios — это довольно проблемный  legacy stuff. Инженеры компании intel для себя уже давным-давно придумали как обходить накладываемые биосом ограничения. Они вместе с hp разрабатывали промышленные серверные решения с процессорами семейства itanium и реализовали там свою инициативу по изменению системы инициализации (Intel Boot Initiative). Позже был организован форум с другими заинтересованными участниками рынка и эта система инициализации переросла в EFI, а позже уже в uefi. И вот потихоньку ситуация стала сдвигаться с места. Стали производиться компьютеры с этой новой схемой инициализации. Сейчас уже обсуждаются спецификации для обновления uefi до версии 2.5, в котором можно будет обновлять прошивку в нативном 64 bit режиме без каких-либо сторонних утилит производителей. Для пользователя это будет выглядеть примерно как обновление bios через bios на ноутбуках Asus.
Так вот, возвращаясь к тому, как выбраться из моей ситуации. Данный ноутбук был выпущен в эпоху перестройки (2011), то есть когда вендоры только-только начали как-то внедрять разработки Uefi forum. У конкретно данной модели ноутбука был ещё неявный вариант загрузиться в легаси режиме. Для этого я при загрузке нажал esc и выбрал в загрузочном устройстве ту же флешку, только в списке легаси, а не ефи. Вот так и выбрался.
Просто сейчас как будто само собой разумеется, что если uefi, то 64 бит. Но на самом деле это не совсем так. Даже 32-битный uefi может загрузить 64-битную операционку. Другое дело, что для того, чтобы поставить 64bit операционку, нужно чтобы процессор поддерживал 64bit инструкции, а если он их поддерживает, то и uefi делают 64 битным. Но такие вот ущербные устройства всё же существуют (обычно планшеты на Windows 8). И кроме того, бывает они даже не предусматривают возможность Legacy support (которая меня и выручила). Подробнее о том, почему на устройствах с 64-битными процессорами шли 32-битные прошивки uefi смотрите в блоге intel.
Если выкидывать такой кусок железа не хочется, то решение для такой ситуации всё же есть, но его не каждый осилит. Вам нужно будет самостоятельно подготовить загрузочный носитель с 64-битной (если процессор умеет 64bit) или 32-битной операционкой, и с 32-битным efi загрузчиком, потому что такие iso образы не выпускают. Вот здесь отлично расписано в подробностях: вам нужен 64bit iso, 32bit iso и debian multi-arch.iso. Кстати, начиная с Windows 8.1 вроде как стала возможна установка 64bit win8.1 на 32bit uefi.
isouefi32
Так что выход есть. Был бы только мозг и желание победить ситуацию =)

Комментариев нет:

Отправить комментарий