На чем написан bios
BIOS (basic input/output system) — базовая система ввода-вывода — это встроенное в компьютер программное обеспечение, которое ему доступно без обращения к диску. На PC BIOS содержит код, необходимый для управления клавиатурой, видеокартой, дисками, портами и другими устройствами.
Обычно BIOS размещается в микросхеме ПЗУ (ROM), размещенной на материнской плате компьютера (поэтому этот чип часто называют ROM BIOS). Эта технология позволяет BIOS всегда быть доступным, несмотря на повреждения, например, дисковой системы. Это также позволяет компьютеру самостоятельно загружаться. Поскольку доступ к RAM (оперативной памяти) осуществляется значительно быстрее, чем к ROM, многие производители компьютеров создают системы таким образом, чтобы при включении компьютера выполнялось копирование BIOS из ROM в оперативную память. Задейтвованная при этом область памяти называется Shadow Memory (теневая память).
В настоящее время, почти все материнские платы комплектуются Flash BIOS, BIOSом, который в любой момент может бытть перезаписан в микросхеме ROM при помощи специальной программы.
BIOS PC стандартизирован, поэтому, в принципе менять его, также как, например, операционные системы нет необходимости. Дополнительные возможности компьютера можно использовать только использованием нового программного обеспечения.
BIOS, который поддерживает технологию Plug-and-Play, называется PnP BIOS. При использовании этой технологии BIOS должен быть обязательно прошит во Flash ROM.
– Как определить, что установленный на материнской плате BIOS, прошит во Flash ROM?
- 28Fxxx — 12V Flash память
- 29Cxxx — 5V Flash память
- 29LVxxx — 3V Flash memory (раритет)
- 28Cxxx — EEPROM, почти то же, что и Flash память
- 27Cxxx — с окошком. EPROM: только для чтения, требует программатор для записи и ультрафиолетовую лампу для стирания
- PH29EE010: SST ROM Чип — перепрошиваемый
- 29EE011: Winbond чип — 5V Flash память
- 29C010: Atmel Chip — 5V Flash память
– Зачем необходима перепрошивка новых версий BIOS?
Существует несколько причин, по которым это приходится делать. Основная из них — Windows 95 не всегда хорошо конфигурируется, если используются старые версии BIOS.
В настоящее время используются жесткие диски объемом более 528Мбайт. Для работы такого диска в системе необходимо поддержка LBA со стороны BIOS. Если BIOS не поддерживает LBA, то для работы с большими жесткими дисками приходится применять специальные утилиты. Применение таких утилит вызовет работу Windows 95 в compatible mode, что отрицательно сказывается на быстродействии.
Полная поддержка Plug-and-Play со стороны Windows 95 возможна только в случае применения PnP BIOS. Это очень веская причина для перепрошивки BIOS.
Кроме вышеуказанного, в новых версиях BIOS исправляются мелкие ошибки и недоработки. Новые версии могут содержать новые возможности, как то загрузка с CD ROM, SCSI перед IDE и т.п.
– Где можно скачать новые версии BIOS?
Во-первых новые версии BIOS доступны на сайтах их производителей. Во-вторых обычно производители материнских плат предлагают BIOSы для своих изделий. Так что, если знать производителя и название материнской платы, проблем не возникнет.
В принципе, название материнской платы можно и не знать. Обычно допускается прошивка BIOS от других плат, если на них установлен такой же чипсет и контроллер ввода-вывода. Однако такой возможностью следует пользоваться только в случае крайней необходимости, так как возможны другие несоответствия, например в количестве слотов и т.п., а прошивка неправильного BIOS может привести к тому, что материнскую плату придется выкидывать.
– Что делать, если производителя и название материнской платы определить не удается?
Чаще всего, производителя и название материнской платы можно определить по идентификационной строке, которую выдает BIOS сразу при включении компьютера.
Для AMI BIOS эта строка имеет вид, похожий на
51-0102-1101-00111111-101094-AMIS123-P или 40-01S5-ZZ1124-10101111-060691-OPWBSX-F,
где производитель определяется третьей группой цифр. Далее необходимо найти свой идентификационный номер в таблице соответствия номеров и названий производителей. Определить название материнской платы можно по всей идентификациолнной строке, пользуясь тем же документом.Идентификационная строка Award BIOS имеет вид
2A59CQ1CC
и позволяет определить чипсет (первые пять цифр и букв — 2A59C), производителя материнской платы (следующие два символа — Q1) и модель материнской платы (оставшаяся часть строки — CC). Далее необходимо посмотреть обозначения чипсетов, производителей и моделей в идентификационных строках.
– Как перепрошить Flash BIOS?
- awdflash xxx.bin (для Award BIOS)
- amiflash xxx.bin (для AMI BIOS)
- mrflash xxx.bin (для MRBIOS)
- Большинство программ прошивки при запуске спрашивают, сохранить ли текущую версию BIOS. На этот вопрос рекомендуется ответить положительно, так как новый BIOS может работать не так как хотелось бы.
- Некоторые производители материнских плат могут предлагать свои собственные программы-прошивальщики. В таком случае лучше пользоваться ими.
- Перед прошивкой новой версии BIOS выключите опцию System BIOS Cacheable в Setup.
- Если в Вашей системе процессор разогнан, то на время перепрошивки BIOS поставьте его на штатную частоту.
- В Setup в разделе Chipset Features Setup, отключите Video Bios Cacheable.
- Выйдете из Setup.
- Перезагрузитесь под чистым DOS (нажав F8 и выбрав Safe Mode Command Prompt only)
- Перепрошейте BIOS и перезагрузитесь
- Войдите в Setup и установите опцию Video Bios Cacheable в Enable.
– Что будет, если запортить BIOS или прошить неправильную версию?
Скорее всего, компьютер не будет грузиться, даже не подавая признаков жизни.
– Как восстановить поврежденный BIOS?
- Беpем любую pаботающую мать, поддеpживающую флэш (совеpшенно необязательно, чтоб она была на том же чипсете, на котоpый pассчитан BIOS, котоpый мы хотим записать). Можно пpосто найти флэш или ПЗУ от матеpи, аналогичной той, флэш из котоpой мы будем пеpеписывать, и вpеменно поставить его (пеpеставив, если нужно, джампеpа типа флэша). Или, если есть пpогpамматоp, только он не умеет писать флэш — найти ПЗУ подходящего pазмеpа и записать его.
- Вынимаем флэш или ПЗУ из этой матеpи, обвязываем его с двух концов двумя кольцами нитки (чтоб можно было его легко извлечь) и неплотно втыкаем назад в панельку.
- Загpужаемся в "голый" ДОС, выдеpгиваем за эти два кольца стоящий в матеpи флэш или ПЗУ (все pавно он нужен только пpи загpузке), если нужно, пеpеставляем джампеpа типа флэша, и вставляем флэш, котоpый нужно записать. Главное тут — ничего не замкнуть :)
- Запускаем пpогpамму записи, pассчитанную на мать, на котоpой пишем, BIOS с котоpым гpузились и флэш, котоpый нужно записать (пpогpамма должна уметь пеpеписывать флэш целиком, напpимеp, из комплекта mr-bios или asusовский pflash). Пишем, выключаем питание и вынимаем готовый флэш. Все.
- Извлечь PCI-видеокарту (все нижеописанное не будет работать с PCI-видео, так как для инициализации PCI необходим BIOS)
- Установить старую ISA-видеокарту и подключить монитор
- Вставить загрузочную дискету в дисковод А:
- Включить компьютер
- Компьютер заработает благодаря Award Boot Block
- Вставить предварительно созданную дискету с прошивальщиком и правильным BIOS
- Перепрошить BIOS
- Перезагрузиться
- Выключить компьютер и поменять видеокарту обратно. Все — теперь можно работать
- Установить Flash Recovery jumper в положение recovery mode (к сожалению, такую возможность имеют не все платы)
- Вставить загрузочную bootable upgrade дискету, которой комплектуется каждая интеловская плата, в дисковод A:
- Перезагрузиться
- Во время этой процедуры экран будет оставаться темным, так как в непрошиваемой boot block area не содержатся функции работы с видео. Эта процедура может контролироваться только пищанием спикера и миганием лампочки дисковода. Когда компьютер пискнеть и лампочка дисковода загорится, можно считать, что система копирует необходимые данные во Flash ROM. Как только лампочка дисковода погаснет, прошивка закончится.
- Выключить компьютер
- Вернуть Flash Recovery jumper обратно в положение по умолчанию
- Вынуть дискету из дисковода и включить компьютер
– Что такое PROM, EPROM и ЕEPROM и чем они отличаются?
PROM (programmable read-only memory — программируемая память только для чтения) — это чип памяти, данные в который могут быть записаны только однажды. То что записано в PROM, не вырубишь топором :) (хранится в нем всегда). В отличии от основной памяти, PROM содержит данные даже когда компьютер выключен.
Отличие PROM от ROM (read-only memory — память только для чтения) в том, что PROM изначально производятся чистыми, в тот время как в ROM данные заносятся в процессе производства. А для записи данных в чипы PROM, применяются специальные устройства, называемые программаторами.
EPROM (erasable programmable read-only memory — стираемая программируемая память только для чтения) — специальный тип PROM, который может очищаться с использованием ультрафиолетовых лучей. После стирания, EPROM может быть перепрограммирована. EEPROM — по сути похожа на PROM, но для стирания требует электрических сигналов.
EEPROM (electrically erasable programmable read-only memory — электрически стираемая программируемая память только для чтения) — специальный тип PROM, который может быть очищен электрическим разрядом. Подобно другим типам PROM, EEPROM содержит данные и при выключенном питании компьютера. Аналогично всем другим типам ROM, EEPROM работает не выстрее RAM.
Специальный тип EEPROM, называемый Flash memory или Flash EEPROM, может быть перезаписан без применения дополнительных устройств типа программатора, находясь в компьютере.
– Как сбросить установки BIOS (включая пароль) в значения по умолчанию из DOS?
Так как не все материнские платы оборудованы джампером для сброса установок BIOS или этот джампер может быть недоступен, то существует метод очистки BIOS из DOS, при помощи команды debug. Загрузившись в DOS (не в DOS-box под Windows!) необходимо набрать:
Метод 1 (Award и AMI BIOS):DEBUG -O 70 17 -O 71 17 Q
Метод 2 (Phoenix BIOS):DEBUG -O 70 FF -O 71 17 Q
– Как подобрать (снять) пароль на Setup (загрузку)?
Если забыт паpоль на Setup, можно воспользоваться pазличными пpогpаммами для снятия паpоля или одним из заводских паролей.
Заводские пассворды для AWARD BIOS следующие:
AWARD_SW, TTPTHA, aPAf, HLT, lkwpeter, KDD, j262, ZBAAACA, j322, ZAAADA, Syxz, %шесть пpобелов%, Wodj, %девять пpобелов%, ZJAAADC, 01322222, j256, ?award
Один из этих паролей должен подойти. Однако в новых AWARD BIOS (версии 4.51) инженерные пароли отсутствуют. Однако существует программка для снятия/определения установленных паролей в таких BIOS.Для AMI BIOS стандартных паролей нету. Единственный случай: если вы только приобрели материнскую плату то пароль может быть AMI.
Существуют программы для определения установленного на Setup пароля. Вы можете скачать здесь эти утилиты для Award BIOS и AMI BIOS.
Hа некотоpых AMI BIOS можно сpазу после включения деpжать нажатой клавишу Ins — пpи этом в CMOS-память загpужаются стандаpтные паpаметpы.
– Как аппаратно сборосить CMOS (вместе с паролями)?
Почти на всех совpеменных системных платах pядом с батаpейкой есть пеpемычка для сбpоса CMOS-памяти (обычно — 4 контакта, ноpмальное положение — 2-3, сбpос — 1-2 или 3-4; иногда — 3 или 2 контакта).
Выпаивать и тем более замыкать батаpейку не имеет смысла — это чаще всего не пpиводит к успеху из-за констpукции схемы питания CMOS-памяти, а замыкание батаpейки сильно сокpащает сpок ее службы.
Если на плате нет батаpейки, нужно поискать пластмассовый модуль с надписью "DALLAS" (это монолитный блок с батаpейкой и микpосхемой CMOS) — пеpемычка может быть возле него.
В случае, если перемычка для очистки CMOS-памяти отсутствует, то сначала попробуйте отключить или отсоединить батарейку. При этом также рекомендуется отключить провода от блоки питания, так как заряд на его конденсаторах может сохраняться и успешно поддерживать питание CMOS RAM (ей очень мало надо) более суток.
Если это не помогло, то остается только замыкать соответствующие ножки у микросхемы CMOS-памяти, добиваясь ее очистки. Найдите, какой из перечисленных ниже чипов установлен у Вас и следуйте приведенным рекомендациям.
P82C206 Chip (квадратный) (старый)
Этот чип включает в себя всю мелкую логику AT — контроллеры DMA, прерываний, таймер а также clock chip. CMOS RAM на этом чипе очищается при замыкании контактов 12 и 32 или 74 и 75 на несколько секунд (при выключенном питании). gnd 74 _|____________________ 5v 75--| | | | | | | CHIPS | 1 * | | | P82C206 | | | |_____________________| ||||||||||||||||||||| | | | gnd | 5v 12 32F82C206 Chip (прямоугольный)
Аналогичен предыдущему. CMOS RAM на этом чипе очищается при замыкании контактов 3 и 26 на несколько секунд (при выключенном питании). 80 51 ______________________________ 81 | | 50 | | | | | OPTi | | | | F82C206 | | | 100 |______________________________| 31 |||||||||||||||||||||||||||||| 1 | | 30 | | 3 26Dallas DS1287, DS1287A, Benchmarq bp3287MT, bq3287AMT
Dallas DS1287, DS1287A с совместимые Benchmarq bp3287MT и bq3287AMT чипы имеют встроенную батарею. Эта батарея расчитана как минимум на 10 лет. На материнских платах с этим чипом не должно быть дополнительных батарей. Если батарея вышла из сторя, необходимо заманить весть чип.CMOS RAM может быть очищена на 1287A и 3287AMT чипах закорачиванием ножек 12 и 21 (при выключенном питании).
1287 (и 3287MT) отличаются от 1287A тем, что CMOS RAM не может быть очищена. И в случае если Вы забыли пароль необходимо заменить микросхему. В этом случае рекомендуется заменять на 1287A. Все также применимо к Dallas 12887 и 12887A, однако они содержат вдвое большую CMOS RAM. ___________ 1 -| * U |- 24 5 volts DC 2 -| |- 23 3 -| |- 22 4 -| |- 21 RCL (RAM Clear) 5 -| |- 20 6 -| |- 19 7 -| |- 18 8 -| |- 17 9 -| |- 16 10 -| |- 15 11 -| |- 14 Ground 12 -|__________|- 13
Motorolla MC146818AP или совместимые
Обычно это прямоугольный 24 контактный DIP chip, обычно в панельке. Совместимые производятся несколькими компаниями, напимер Hitachi HD146818AP или Samsung KS82C6818A. Номер чипа должен оканчиваться на 6818. Хотя этот чип и совместим по выводам с Dallas 1287/1287A, в нем нет встроенной батареи. Это означает, что CMOS RAM может быть очищена просто выниманием чипа из панельки на некоторое время и установкой обратно.Для уменьшения риска повреждения микросхемы рекомендуется закорачивать ножки 12 и 24 на несколько секунд при выключенном питании ___________ 1 -| * U |- 24 5 volts DC 2 -| |- 23 3 -| |- 22 4 -| |- 21 5 -| |- 20 6 -| |- 19 7 -| |- 18 8 -| |- 17 9 -| |- 16 10 -| |- 15 11 -| |- 14 Ground 12 -|__________|- 13
Dallas DS12885S или Benchmarq bq3258S
CMOS RAM на этом чипе очищается замыканием контактов 12 и 20 при выключенном питании. Также можно попробовать 12 и 24. (5Volts) 24 20 13 | | | | | | | | | | | | ----------------------------------- | | | DALLAS | |> | | DS12885S | | | ----------------------------------- | | | | | | | | | | | | 1 12 (Ground)
– Что означают аварийные звуковые сигналы, выдаваемые AMI BIOS при загрузке?
Звуковые сигналы
Число сигналов | Описание проблемы | Решение |
---|---|---|
1 | DRAM refresh failure | Вставьте память еще раз. Если не помогает, то это проблема с памятью. |
2 | Parity Circuit Failure | |
3 | Base 64K RAM failure | |
4 | System Timer Failure | Материнская плата неработоспособна |
5 | Processor Failure | |
6 | Keyboard Controller / Gate A20 Failure | Вытащите и вставьте чип контроллера клавиатуры. Если не помогает, замените контроллер клавиатуры. Если и это не помогает, проверьте клавиатуру и ее кабель |
7 | Virtual Mode Exception Error | Материнская плата неработоспособна |
8 | Display Memory Read/Write Failure | Ошибка памяти видеоадаптера. Переисталлируйте видеокарту и память на ней. Если не помогает, замените видеокарту. |
9 | ROM BIOS Checksum Failure | Ошибка в микросхеме BIOS. Попробуйте вытащить и вставить заново этот чип. Если не помогает, необходимо перепрошить его содержимое или заменить микросхему. |
10 | CMOS Shutdown Register Read/Write Error | Материнская плата неработоспособна |
1-2 | Search for option ROM (video configure fails) | |
1-3 | Video failure | Переинсталлируйте видеокарту. Если не помогает, придется ее заменить |
1-2-2-3 | BIOS ROM checksum | |
1-3-1-1 | Test DRAM refresh | |
1-3-1-3 | Test keyboard controller | |
1-3-4-1 | Test 512K base address lines | |
1-3-4-3 | Test 512K base memory | |
1-4-1-1 | Test memory bus | |
2-1-2-3 | Check ROM copyright notice | |
2-2-3-1 | Test for unexpected interrupts | |
1 | POST passed. | Все идет по плану |
– Что означают аварийные звуковые сигналы, выдаваемые Award BIOS при загрузке?
Звуковые сигналы
Число сигналов | Проблема | Решение |
---|---|---|
1 длинный 2 коротких | Video error | Переинсталлируйте видеокарту. Проверьте видеопамять. Замените карту |
Короткие сигналы | Memory error | Проблемы с памятью. Попробуйте заменить модули памяти. |
– Что означают аварийные звуковые сигналы, выдаваемые Phoenix BIOS при загрузке?
Я не сумасшедший, просто изобретаю колесо: D
Я написал загрузочные загрузчики, мини-драйверы для мыши и клавиатуры, мини-ОС и так далее.
Я всегда стараюсь избегать прерываний DOS, используя только BIOS, пытаясь продвигать единственную мини-ОС, но вдруг я решил написать свой собственный BIOS:)
Легенда гласила:
Я был программистом высокого уровня, затем низкоуровневым. Однажды я буду программистом на машинах!
Является ли BIOS написанным на сборке? Как я могу его зажечь? Какой механизм? Могу ли я начать редактирование текущего BIOS?
BIOS можно записать в сборку, но не обязательно, некоторые части должны быть для получения параметров для системного вызова, поскольку они не соответствуют соглашениям о вызовах компиляторов.
Вы можете попытаться выполнить обновление BIOS для материнской платы и перепроектировать его (хотя, вероятно, есть соглашение о клике, в котором говорится, что вы не будете). Если вы это выясните, вы можете загрузить и взломать. Я бы не пошел туда, вы закроете свою систему, прежде чем вы это выясните.
Написал биос действительно, что вы после? Довольно старая школа, походила бы написать 6502 код для удовольствия. Есть много проблем низкого уровня, которые более полезны и интересны.
Если вы можете написать asm, код для написания кода не так уж и трудный, вы можете просто сделать это для удовольствия. x86 ужасен, вам нужно потратить некоторое время на изучение других систем и их asm и машинного кода (и написание для них операционных систем). ARM доминирует над миром и не полагается на биос. Мне сказали, что для получения видеокарты в системе, отличной от x86, вам все равно придется что-то притворяться в x86 в BIOS x86, можно выяснить, как воспитывать основную видеокарту без необходимости запуска BIOS x86. наблюдайте, как эмулятор запускает биос и видит, что он делает, выясните, замените ли он питание на init без того, чтобы биос это делал. Написание симулятора набора инструкций или дизассемблера - следующий шаг за пределами написания машинного кода, я бы не стал тратить даже второй раз на x86, хотя, я могу предложить список альтернатив (или вы могли бы просто играть с симуляторами, которые я написал или собрал).
Если биос x86 - это то, как вы хотите, ваш лучший путь - писать, заменять или взламывать биос для виртуальной машины, являющейся qemu, virtualbox или другим. Замена этой биографии на ваш, скорее всего, будет заменой файла в каком-то каталоге или с использованием параметра командной строки, чтобы указать альтернативную биографию. Когда вы хорошо разбираетесь в этом, тогда, если на них все еще есть материнские платы с устаревшими биозами, возможно, вы можете взломать свой путь в программирование (нужно купить несколько материнских плат каждого типа, поскольку вы будете их использовать). С таким количеством встроенных систем, которые могут быть получены от 20 до 200 долларов США с одинаковым уровнем опыта, нет смысла взламывать материнскую плату ПК без достойных схем и документации. Вы могли бы выкопать оригинальный ПК с записями о схематическом и биографическом документе, а биос был сокет, поэтому если ваш не загружается (и не разрушает материнскую плату), это не кирпич, который вы можете перепрограммировать или заменить биографию чип. Вероятно, вы хотите использовать микроконтроллер, чтобы стоять в качестве поддельной биографии, поскольку найти подходящее оборудование для перепрограммирования более чипов BIOS, пожалуй, сложнее обнаружить, что работающие оригинальные ПК. Существует сообщество амиг, которое, вероятно, намного веселее и будет будьте счастливы, если вы улучшаете или улучшаете свою биографию, скажем, устанавливаете современное оборудование за предыдущие системные вызовы.
Цель статьи — провести начинающего за руку по первому UEFI проекту, оставаясь в привычной ему среде. Для более опытных людей, надеюсь, будет интересным поработать в VS вместо привычной командной строки, или разобрать подход и перенести его в любимый Eclipse.
Начнем с простых вещей, вывода строки на консоль и русификации (довольно востребованная вещь, причем простая в реализации), потом будет работа с формами в HII (то, что называлось в обиходе страницами BIOS Setup), потом графика, потом Boot Manager, а потом видно будет (с).
Желающие — прошу пожаловать под кат.
Сейчас необходимо решить, оно вам надо или нет. Потратим на это пол-страницы на старте, чтобы не тратить пол-дня и в конце понять, что вам надо совсем другое. Или, надеюсь, наоборот — загореться энтузиазмом и выкроить время на прочтение статьи.
Вначале хорошее
1) Аппаратура не понадобится от слова совсем. Никаких Evaluation Boards, никаких Intel BlueBox JTAG за $3000. Все будет отлаживаться в 32-битной виртуальной машине OVMF – портированной Интелом виртуалке qemu для отладки UEFI Firmware. Для перекомпиляции под реальную платформу достаточно потом — после отладки — переставить пару ключей в настройках компиляции, и на этом все.
3) Файловая система виртуалки доступна на Windows-машине для записи-чтения. Очень пригодится, если надо будет редактировать скрипты UEFI Shell, после запуска посмотреть скриншоты и проанализировать логи средствами Windows.
4) Никакого ассемблера, только С/С++.
Теперь о том, что мы делать не будем
1) Мы будем работать в DXE (где уже есть UEFI Shell) и поздних фазах. В более ранние фазы не полезем, поскольку нас туда никто не пустит, по крайней мере – для Intel-процессоров. Позже будет объяснение, почему. Если хотите сделать полный цикл, от включения до загрузки ОС, причем быстро и не забивая голову кучей ненужной и неинтересной вам в данный момент информацией, а ручное конфигурирование системы вам совершенно не требуется – дальше не читайте, а наберите в Гугле «coreboot».
2) «Графического» UEFI с мышкой и кнопками, как у Dell, MSI и прочих, здесь не будет. Это платные среды, для использования в крупных компаниях. Есть, разумеется, энтузиасты, которые сами создают их своими руками, не ответив предварительно на вопрос «Зачем?», но обычно их энтузиазм заканчивается на второй форме с кнопками.
3) Мы будем работать с компилятором Visual Studio. Желающие могут настроить gcc в cygwin, или icc, но в данный момент не стоит задача получить оптимальный быстрый код, а стоит задача быстро пройти путь к началу полноценной работы.
Все, предварительные танцы закончены, кто надо – воодушевлен, кто надо – напуган.
Переходим к делу
Итак, у кого на машине есть git в командной строке, выполняют команду в cmd окне (или в Far Commander, не суть) из корневого каталога:
а те, у кого нет, идут по ссылке на github, скачивают zip-файл и раскрывают его в каталог с:/FW.
Как было ранее обещано, приведем подсказку из Интеловского тренинга по использованию другой конфигурации, отличной от указанной в начале статьи. Ищите свое сочетание в табличке, если предлагаемое по каким-то причинам не подходит:
Конфигурирование среды для версии, отличной от VS2010
Открываем файл c:\FW\edk2\Conf\target.txt и в строчке
TOOL_CHAIN_TAG = VS2010x86
Заменяем VS2010x86 на тэг установленной у вас версии Visual Studio. Для Visual Studio 2010 тэг останется как есть, для других версий VS – смотрите картинку выше, или список в начале файла c:\FW\edk2\Conf\tools_def.txt
Собственно, среда разработки edk2 развернута полностью и в ней можно работать из командной строки. Некоторые так и работают всю жизнь («угорать по хардкору, поддерживать дух старой школы и всё такое» — (с) CodeRush в своей ставшей классической статье). Но мы все же пойдем дальше, пересаживать человека из MSVS обратно в командную строку — негуманно, особенно в 2017.
Настраиваем проект в Visual Studio
Открываем Visual Studio, в нем открываем Solution NT32.sln из каталога C:\FW\VS\NT32. В целях уменьшения времени входа в тему, в solution уже создан одноименный проект NT32, в котором уже сделаны описанные ниже настройки. Это если не получится создать самим – чтобы иметь гарантированно рабочие настройки проекта. Такой подход сильно сократит время поиска источника проблем, в случае их появления. Тем не менее, лучше пройти описанный ниже путь самим, и понять смысл настроек – это облегчит настройку следующих проектов.
Полезно будет сразу в Tools->Options настроить рабочий каталог на c:\FW\VS, но если в VS ведется другой, рабочий проект, то так делать не надо:
Создание проекта
Создаем в Solution NT32 новый проект для Visual C++ (правой клавишей на Solution NT32, Add->New Project, выбираем опцию Makefile Project), и назовем его MyFirstUEFIProject (или как угодно еще). Жмем Finish.
Выбираем в Solution проект NT32, выбираем из контекстного меню Project->Properties и производим настройки проекта.
Настройка NMake опций
Выбираем в окне слева строку Configurarion Properties → NMake, в окне справа — строку Build Command Line
Жмем Edit… и в открывшемся текстовом окне вводим:
Сейчас стоит немного объяснить, что мы делаем. По сути, мы пишем в этом окне обычный пакетный bat-файл вместо makefile.
В первой строке устанавливается переменная окружения ассемблера NASM_PREFIX в том виде, как ее понимает edk2, то есть путь, по которому лежит файл nasm.exe. На ассемблере мы сами писать не будем, но нашей системе сборки ассемблер нужен обязательно.
Во второй строке вызывается скрипт настройки среды edk2 и настраиваются переменные окружения для данного сеанса компиляции и запуска (вне VS эти переменные не отражаются). Ключ –nt32 указывает системе сборки, что компилировать исходники надо для пакета (package) Nt32Pkg, расположенного в C:\FW\edk2\Nt32Pkg. Этих пакетов там много, мы их рассмотрим, но не сейчас.
В третьей строке мы даем команду на компиляцию в только что настроенной среде (build.exe лежит в C:\FW\edk2\BaseTools\Bin\Win32, этот путь прописывается в предыдущей строчке, в edksetup.bat)
Итак, вот что у нас должно появиться в итоге в текстовом окне Build Command Line:
Затем вводим в следующей строке Rebuild Command Line в открывшееся по Edit … окно следующий текст
Команда build clean означает то самое, что вы предполагаете. Она делает полную перестройку проекта с перекомпиляцией всех модулей.
Что мы вводим в окне из Clean Command Line, наверное, все уже догадались:
Честно говоря, особо эта опция не нужна, в 99% случаев хватит Rebuild, но пускай будет – например, очистить среду для ее переноса в другое место или заливки на github.
В итоге, у нас должно получиться вот такое окно:
Все с настройкой NMake.
Настройка опции Debugging
Итак, открываем строчку Debugging и вводим:
В строчке Command:
В строчке “Working Directory”:
SecMain.exe – объяснять сейчас, что это такое – долго, если очень кратко и упрощенно – то это аналог bootloader-a, который запускает все остальное.
Рабочий каталог – сюда будут помещаться все успешно созданные модули, и доступны они будут все сразу из командной строки.
Итак, вот что мы должны получить после настроек в этом окне:
На этом все с настройками проекта.
Построение проекта
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Если же вместо этого получено что-то иное, смотрите, правильно ли вы прошли все шаги. Наиболее тяжелый случай – получить:
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
это баг среды VS2010 и означает, что VS2010 установлен без SP1. Поставьте SP1, или ищите способы затыкания этой ошибки в инете.
Работа в UEFI Shell
Итак, все скомпилялось хорошо, и вы читаете эти строки. Теперь жмем на любимую F5 и после примерно минуты работы с диском (чуть позже сократим и это время) получаем вот такую требуемую картинку:
Собственно, это и есть UEFI Shell. Как в нем работать – написана куча руководств, посмотрите в Гугле, а мы пока сделаем в нем несколько вещей.
1. Смотрим, что мы там накомпиляли за эти 10 минут. Вводим fs0: (UEFI Shell нечувствителен к регистру) и затем ls –b, где опция –b означает ожидание нажатия Enter для прокрутки страницы, ибо список там большой, не на один экран.
Теперь стало понятно, что означал параметр “Working Directory” в настройке опций проекта Visual Studio — C:\FW\edk2\Build\NT32IA32\DEBUG_VS2010x86\IA32\. Там этот же самый список файлов, и лучше его смотреть (и редактировать скрипты) через развитую оболочку Far Commander (или Total Commander), чем с командной строки в UEFI Shell.
2. В UEFI Shell и набираем “hel”, жмем Tab и видим на экране Helloworld.efi. Не то, чтобы мы совсем не догадывались, что будет, если нажать после этого Enter, но проверить-то надо! Жмем и получаем троекратное UEFI Hello World!. Число повторений – это конфигурируемый в настройках среды (а не в исходниках) внешний параметр и мы будем эту конфигурацию потом разбирать.
3. Набираем exit и попадаем в наше любимое и знакомое окно:
Ну вот, можно любоваться на плоды своих трудов. После этого стрелками гоним фокус на Reset и виртуалка закрывается, возвращая нас в знакомое окно MSVC.
Выводим свою строку
Создание полностью своего приложения потребует достаточно много настроек, которые лучше будет рассмотреть в следующей статье — иначе получится большой объем, а длинные простыни никто не читает. Однако же в заголовке этой статьи написано «Программирование», а мы пока занимались только настройкой. Чтобы сдержать обещание, давайте в этой статье сделаем очень простую модификацию приложения HelloWorld, используя его имеющийся набор файлов, а в следующей статье создадим свой, при помощи Интеловской утилиты UEFI Driver Wizard, поскольку прогонять начинающих по полному циклу создания набора файлов для UEFI драйвера (или приложения) — это нечеловеколюбиво, дико рутинно и несет риск потери 90% аудитории. Если человека зацепит — он сам к этому придет со временем, а если хочется просто поиграться — нет смысла тратить на это кучу времени, благо многое давно уже делается автоматически через UEFI Driver Wizard, причем по фэн-шуй, чего от новичка ждать наивно.
Итак, открываем в Visual Studio файл
C:\FW\edk2\MdeModulePkg\Application\HelloWorld\HelloWorld.c
И добавим свою простую строчку, сразу после объявления переменных в единственной функции:
Разумеется, текст можно заменить на что угодно, только английскими буквами — русский шрифт edk2 еще не понимает, мы добавим его в следующих статьях. Можете поставить на эту строку обычный breakpoint и посмотреть, как себя поведет Visual Studio.
Жмем F5, после компиляции и устранения ошибок вводим «fs0:», HelloWorld.efi и получим такой вывод:
На этом все. В следующей статье мы немного поработаем в UEFI Shell, чтобы освоиться, и разберем немного теории.
Выпуск материнских плат на чипсетах Intel шестой серии (P67 и его братьях) принес на массовый рынок ПК новый вариант BIOS — UEFI . В этой статье мы поговорим об устройстве файлов UEFI Capsule и Intel Flash Image.
Структура EFI Firmware Volume и полезные в хозяйстве патчи будут описаны во второй части.
UEFI Capsule
- Hex-редактор на ваш вкус, я буду использовать HxD
- Утилита Intel Flash Image Tool подходящей версии, для чипсетов 7 серии — это версия 8.xx
Intel Flash Image
AMD'шники могут смело пропустить весь текст ниже и читать вторую часть этой статьи, а мы продолжаем разбирать получившийся файл ROM.
Intel рассказывает о структуре своих BIOS'ов на страницах даташита на соответствующие чипсеты. Для всех чипсетов, начиная с 6 серии, этот формат в общем не менялся, поэтому его можно смело взять оттуда. Файл делится на 3-5 регионов:
Необязательными являются регионы GbE (используется совместно с встроенными сетевыми картами Intel начального уровня) и PDR (предназначен для данных OEM, но я ни разу не видел, чтобы он где-то использовался).
Descriptor
Этот регион должен находится в первой (из двух поддерживаемых) микросхеме flash по нулевому адресу и подразделяется на 11 секций, суммарный размер которых не должен превышать 4 килобайта. Устроен он так:
Первые 16 байт не используются и всегда равны 0xFF, за ними следует сигнатура 0x0FF0A55A, затем секция Descriptor Map, указывающая смещение начальных пяти секций и их размер.
Секция Component содержит информацию об используемых микросхемах flash: их количество (1 или 2), плотность (от 512 Кб до 16 Мб), запрещенные команды (такие как chip erase, например) и частоты чтения, быстрого чтения и стирания/записи.
Секция Region содержит смещения и размеры других регионов.
Секция Master содержит настройки доступа каждого из трех возможных мастеров (BIOS, ME, GbE) к пяти возможным регионам.
Секции PCH/PROC Straps содержат параметры конфигурации процессора и северного моста.
Секция Upper Map содержит смещение и размер таблицы VSCC .
Таблица VSCC содержит идентификаторы JEDEC и данные VSCC всех поддерживаемых Management Engine микросхем flash.
Секция OEM может быть заполнена OEM-производителями по своему усмотрению, но я не видел её заполнения ни разу.
Проверим теперь структуру полученного нами файла ROM на соответствие вышеприведенной:
Легко видно, что структура вполне себе соответствует, но угадать, за что именно отвечает каждый байт каждой секции будет непросто.
К счастью, Intel избавил нас от угадывания, выпустив утилиту FITC , которая позволяет настроить дескриптор (и не только его) и содержит подсказки по каждому доступному для редактирования пункту. Утилита эта входит в набор для разработчиков материнских плат и не предназначена для конечных пользователей, но ссылку на нее всегда можно найти на форумах, посвященных модификации BIOS'ов.
Открываем наш файл ROM в FITC 8.xx и все настройки дескриптора как на ладони:
Я крайне не рекомендую ничего менять, кто не знает, зачем он это делает.
Самыми часто изменяемыми настройками здесь являются настройки доступа к регионам (выделены зеленым на скриншоте hex-редактора), которые в дикой природе встречаются двух видов: вышеприведенные «всем можно всё» и стандартные настройки Intel. Иногда открытость записи в регион МЕ помогает справится с нарушением его работоспособности, просто перезаписав его полностью. На платах со стандартными настройками это невозможно без получения доступа к МЕ, которое на разных платах реализовано по разному и может потребовать достаточно нетривиальных манипуляций (замыкания ног аудиочипа во время загрузки, например).
Обратная сторона открытости — вредоносный код может делать что угодно с дескриптором и всем остальным содержимым микросхемы BIOS. Почему-то об этом говорить не принято, при том, что абсолютно все платы ASUS на P67 с BIOS'ам версий 3ххх и все платы ASUS на Z68 имеют открытый дескриптор. И security никакая, и с obscurity проблемы, о чем инженеры думали — не знаю.
Вторая полезная настройка — плотность микросхемы BIOS, которую приходится менять в случае восстановления испорченного BIOS'а платы с микросхемой большого объема, используя работоспособную плату с микросхемой меньшего.
Присутствует только на платах со встроенными сетевыми картами Intel начального уровня, вроде 82579.
В даташите на этот чип в разделе 10 имеется описание структуры NVM , которая и хранится в регионе GbE целиком.
Главная настройка, которую может быть интересно изменить — MAC-адрес, находящийся в самом начале региона, в первых 6 байтах. Если вдруг вам нужно сменить аппаратный MAC своей встроенной карты Intel, и регион GbE на вашей плате имеется — вы знаете что делать.
В нашем примере регион GbE находится по смещению 0x1000 от начала и содержит стандартный MAC для всех образов NVM, выпускаемых Intel в качестве обновления — 88:88:88:88:87:88:
При прошивке стандартными средствами регион GbE не обновляется вообще, несмотря на присутствие обновленного NVM в файле с обновлением BIOS'а, поэтому Intel пришлось выпустить отдельную утилиту NVM Update, когда в результате ошибки в версии 1.3 карта переставала работать нормально после установки Windows 8.
Регион содержит кучу других настроек, о которых можно прочесть в указанном выше даташите.
Здесь находится Management Engine Firmware и ее настройки. Про ME можно писать бесконечно, потому что там чего только нет. Лучшее описание структуры этого региона и возможных векторов атаки на него вы можете прочесть в докладе Игоря Скочински на Breakpoint 2012.
Для тех, кто еще не ушел читать его — краткая выжимка:
В чипсетах Intel имеется микроконтролер с архитектурой ARCompact, получающий питание от дежурной линии ATX, имеющий доступ ко всем устройствам, к RAM, собственный сетевой стек и работающий под управлением ОСРВ ThreadX. Вот он то и обеспечивает все рекламируемые Intel технологии, вроде Active Management, AntiTheft, Identity Protection, Rapid Start, Smart Connect, Protected Audio Video Path и так далее и тому подобное. А при помощи Dynamic Application Loader на нем можно даже Java-апплеты запускать.
На наше счастье, с безопасностью МЕ все более или менее в порядке, и пока я не слышал о случаях успешного внедрения вредоносного кода, но само по себе наличие в чипсете МК, исполняющего неизвестные никому, кроме Intel, программы и имеющего полный доступ к RAM и сети — уже повод для паранойи у склонных к ней людей.
Изменить доступные настройки МЕ можно при помощи той же Intel FITC:
В нашем примере регион ME начинается со смещения 0x3000 и имеет размер 1,5 Мб, что указывает на плату без поддержки AMT .
Регион состоит из одного или нескольких EFI Firmware Volume, о структуре которых я напишу во второй части этой статьи.
Там же мы затронем процесс загрузки UEFI и полезные в некоторых случаях патчи.
Platform Data Region
Регион предназначен для описания каких-либо зависящих от платформы возможностей и по плану должен использоваться OEM-производителями, но по факту я не видел его ни разу.
Источники информации
Читайте также: