Модификация Inside BIOS.
Содержание статьи
Введение.
Привет! Работая в сервисных центрах возникают моменты, когда нет доступных деталей или цена на их покупку чрезмерно высока. Если это касается замены микросхемы графического процессора (видео чипа), тут возможен вариант с установкой альтернативы. BIOS ноутбука может содержать поддержку этой микросхемы, а может и нет. В случае отсутствия поддержки и при условии электрической совместимости устанавливаемой микросхемы, возможна модификация с целью добавления поддержки. Разумеется процесс этот очень тонкий и с большой долей вероятности тут необходимо проявлять смекалку при подходе к каждому конкретному ноутбуку. С первой попытки может не получиться подружить конкретный BIOS, с конкретной микросхемой. Также надо быть готовым к тому, что все таки придется искать оригинальную микросхему.
Теория.
Электрическая совместимость устанавливаемой микросхемы подразумевает:
- аналогичный тип корпуса, порядок и расположение контактов;
- совместимое рабочее напряжение;
- ширина шины памяти (разрядность), если таковая имеется;
- наличие всех распаянных элементов на плате, для работы устанавливаемой микросхемы;
- соответствие эффективности рассеивания тепловой энергии системой охлаждения ноутбука и TDP (Thermal Design Power) устанавливаемой микросхемы.
Помимо электрической совместимости, необходимо выяснить производителя исходного кода микропрограммы BIOS. Это важно, так как инструменты и приемы работы могут быть разными в каждом из производителей или содержать нюансы.
Непосредственные производители ноутбуков, будь это Compal, Quanta, Asus, Samsung, Clevo, Foxconn. Так и их ODM (original design manufacturer) заказчики, такие как: HP, Dell, Lenovo, Acer и другие. Используют за основу BIOS, готовые исходные коды и вносят в них индивидуальные для каждого ноутбука настройки, поддержку оборудования, необходимые функции.
Наиболее популярные производители исходного кода микропрограмм BIOS:
- Phoenix Technologies;
- Insyde Software;
- American Megatrends;
- устаревший Award Software, компания теперь в составе Phoenix Technologies;
Определив производителя исходного кода BIOS подбираются соответствующие инструменты и приемы. В случае модификации Inside с целью добавления поддержки устанавливаемой микросхемы, я использую следующий набор программ:
- Phoenix Tool (Для разборки на отдельные модули);
- UEFI tool (Для поиска модуля Platform);
- HxD (Редактор Hex);
- Total Commander (многофункциональный файловый менеджер для поиска файла по Hex значению);
Этот набор программ необходим для замены идентификатора оборудования, так называемого аппаратного ID. В микропрограмме ноутбука он используется для идентификации устройств и представляет собой набор цифр описывающий тип устройства для запуска соответствующего модуля в BIOS. Например, микросхема 216-0752001 использует аппаратный ID 1002 9712, а микросхема 216-0674026 — 1002 9612. Изменение одной цифры в идентификаторе изменяет представление о встроенном видео ядре, его поколении, модели и так далее. Соответственно для установки одной микросхемы, вместо другой, использующих различные идентификаторы, требует наличия соответствующего модуля в микропрограмме BIOS.
Кстати, установка драйверов в операционных системах Windows, использует такие же методы идентификации устройств. Поэтому для определения аппаратного ID устройства в среде Windows, достаточно открыть Диспетчер устройств, в нем открыть Свойства интересующего устройства. В открывшемся диалоге перейти на вкладку Сведения и в списке Свойства, выбрать ИД оборудования. И в поле Значение, будет представлен аппаратный идентификатор аналогичный используемому в микропрограмме BIOS.
Аппаратный ID может быть представлен в 2 формах порядка записи байтов big-endian и little-endian. Что же это за формы такие, разберем кратко ниже.
Big-endian — порядок записи байтов от большого к меньшему. Этот порядок байтов более привычен для нашего чтения и применяется для высокоуровневого использования, например в Windows или протоколе TCP/IP. В случае ID микросхемы 216-0752001 будет выглядеть как 1002 9712.
Little-endian — порядок от меньшего к большему. Этот порядок не привычен для человека, но принят и используется в оперативной памяти компьютеров на архитектуре x86, то есть Intel или AMD. На примере ID микросхемы 216-0752001 выглядит как 0210 1297.
И при работе с модулями BIOS, которые использует низкоуровневый порядок байтов соответствующий x86 системам. Искать и редактировать модули будем с учетом байтовой последовательности — little-endian. То есть в виде 0210 1297.
На этом закончу теоретическую часть, в ней мы разобрались с аппаратными идентификаторами и производителями микропрограмм. Поняли что будем менять, с помощью чего и где.
Модификация BIOS на практике.
Перейдем к делу! 🙂 В качестве подопытного у нас выступит Toshiba L300D на базе платформы Inventek 6050A2175001-MB-A02_PHOENIX-SACRAMENTO 10A PLUS (PS10AP). Служил хозяину верой и правдой с 2009 года, но ничего не вечно. И после очередного выключения, больше не запустился. После диагностики была выявлена неисправность северного моста 216-0674024. Взамен точно такой же не нашел, решено было поставить новый, более доступный 215-0674028.
Естественно прямая замена 216-0674024 (0x9613) на 215-0674028 (0x9610), здесь недоступна, ввиду использования встроенного в северный мост видео ядра. Имеющего другой аппаратный идентификатор. И в данном случае необходима модификация BIOS, с целью замены одного идентификатора, другим. Там, где эти идентификаторы упоминаются.
Сразу оговорим общие принципы действий. На тематических форумах можно встретить упоминания о полной замене модуля содержащего код для работы с видео чипом (описывающего его работу, в народе VideoBIOS). Кто-то это делает бездумно, кто-то просто пробует разные варианты и иногда это имеет положительный результат. Так вот, на моей личной практике установлено. Полная замена модуля требуется в случае кардинального отличия устанавливаемой микросхемы от той, что была установлена. То есть аппаратно различные ядра (не путать с маркетинговыми названиями типа Radeon HD3200). Или неспособности устанавливаемой микросхемы работать в режиме описываемом в модуле, например высокая тактовая частота.
На конкретном примере, замена модуля не требуется. Режимы описываемые модулем идентичны номинальным режимам работы чипа. Даже маркетинговое название одно и тоже HD3200.
Прежде всего нам необходимо распаковать BIOS. Для этого можно использовать несколько программ, но мы рассмотрим наиболее дружелюбную на мой взгляд, это Phoenix Tool. В моем случае это версия 2.66. Запускаем программу и открываем файл прошивки.
После распаковки BIOS на модули, в папке где у нас была оригинальная прошивка появится дополнительная папка DUMP. В ней содержатся все модули, с этой папкой мы и будем работать. А пока, ничего не трогая в этой папке, настраиваем программу на замену модулей.
В списке Manufacturer выбираем Other. Ведь используем программу не для добавления SLIC. Затем кнопку Advanced, появится предупреждение о возможном вреде, нажимаем Да. Далее откроется диалог с настройками программы.
Ставим 2 галочки Allow user to modify other modules и No SLIC, затем кнопку Done.
В основном окне, жмем Go, дожидаемся появления сообщения You can now make manual alterations to any module in the DUMP directory, но не нажимаем OK. Оставляем программу Phoenix Tool в таком состоянии, так как OK надо нажимать только после замены модулей исправленными (с внесенными изменениями). А мы их пока не изменяли.
Для изменения необходимых модулей, в папке DUMP ищем модули с упоминанием Hex значения 0210 1396. Удобнее всего это делать через Total Commander, переходим в папку DUMP, затем Команды, Поиск файлов. В открывшемся окне ставим галочку на пункте С текстом, и HEX-код. В поле вписываем значение которое будем искать по всем модулям, в нашем случае это 0210 1396. И нажимаем кнопку Начать поиск, программа выполнит поиск указанного HEX-кода в файлах модулей.
В поле Результаты поиска выйдет список файлов, в которых найдены соответствия. Из указанного списка, редактированию подлежат файлы с расширением .ROM, таких у нас получилось три, но их может быть и больше. Копируем в отдельную папку для удобства, например в папку MOD, созданную рядом с папкой DUMP. Программу Total Commander можно закрыть, она больше не пригодится.
Теперь мы имеем папку с тремя файлами модулей в которых есть упоминание указанного аппаратного ID. Для их редактирования используем программу HxD Editor. Открываем этой программой все три модуля, находим значения, которые необходимо заменить. Для этого нажимаем Поиск, потом Найти. В открывшемся диалоге в поле Искать пишем значение 0210 1396, а раскрывающемся списке Тип данных выбираем вариант Шестнадцатеричные значения и кнопку OK.
Все найденные совпадения необходимо заменить на 0210 1096 (что соответствует микросхеме 215-0674028), то есть вместо 3 вписываем 0. Повторяем эту процедуру для всех файлов. Внимание! В модулях может быть найдено несколько раз встречаемое совпадение, все их надо поправлять, а модуле размером 59 КБ (модуль VideoBios), дополнительно надо корректировать контрольную сумму на ту которая была до изменения. Для этого я обычно играюсь с текстовыми значениями, например дата или версия Video BIOS. Сохраняем все изменения, а модифицированные модули копируем с заменой из папки MOD, в папку DUMP.
И в давно запущенном Phoenix Tool и его сообщении You can now make manual alterations to any module in the DUMP directory, нажимаем OK. Начнется процесс обратной сборки BIOS с использованием измененных модулей. По окончании сборки программа выдаст сообщение SLIC performed successfully. Bios file is с адресом и названием готового файла прошивки.
Пробуем прошивать аппарат и проверяем. Если ноутбук заработал и вывел изображение, могу поздравить с успешной модификацией!
Но в моем случае, ноутбук не прошел инициализацию 🙁 . Почему? Потому что, в некоторых аппаратах на основе Inside BIOS, необходимо найти так называемый модуль Platform или PCI Platform. И в нем поправить ID, но он там указан в более кратком виде.
Для этого открываем ранее собранную прошивку программой UEFITool и ищем модуль содержащий текст описания Platform или PCI Platform.
Щелкаем на нем правой кнопкой мыши и выбираем пункт Extract body. В открывшемся окне указываем имя и путь сохранения файла. Назовем его к примеру Edit Platform и сохраним в папку MOD.
Не закрывая программы, открываем созданный файл Edit Platform в программе HxD. Ищем уже более короткое указание аппаратного ID, в моем случае 1396. У меня было найдено 2 совпадения и я их заменил на значение 1096 что соответствует микросхеме 215-0674028. Сохраняем изменения и закрываем программу.
Переходим обратно в программу, щелкаем на модуле Platform правой кнопкой мыши и выбираем Replace Body. Указываем путь и имя файла который редактировали в HxD. Нажимаем Открыть.
Результатом действий должно получиться что-то типа такого, смотрите на иллюстрации ниже.
Сохраняем результат работы по замене модуля, для этого File, затем Save image file. Указываем имя и путь для сохранения прошивки. Нажимаем Сохранить. Программа сохранит результат своей работы и предложит сразу же его открыть, выдав сообщение Open reconstructed file. Нажимаем Yes. И закрываем программу.
Прошиваем ноутбук доработанной прошивкой и любуемся успешным результатом. Мне данный способ помог не один раз. Попробуйте и вы!
Заключение.
Статья получилась, не маленькая . В статье описано множество действий и что самое смешное, это не гарантия того, что все получиться. И тут можно добавить еще варианты замены модулей и прочее. Но в целом алгоритм модификации становится понятным. А дальше, только эксперименты. Если у вас есть что добавить или вы обнаружили неточности, ошибки в статье. Указывайте, исправлю! Удачных модификаций!