Делаю загрузку ОС по неким адресам и недавно обнаружил что на некоторых процессорных модулях по физическим адресам начиная с 0x200.000 лежат BIOS-ы! Я удивлен. Кроме того содержимое этой памяти различается при различных начальных настройках. Вопросы. Насколько безопасно туда грузится? Как это лучше проверять? Как определить занятость участков памяти где нет e820? Как получить гарантии о том что моя память не будет искажена?
Вы уверены, что эти BIOS'ы являются не какими-то временными данными этапа загрузки и уже не представляют ценности? К тому же насколько мне известно после перехода в защищённый режим большая часть кода BIOS остаётся не у дел (точнее - всё кроме кода для SMM, который впрочем обычно лежит совсем по другим адресам и получить к нему доступ не так то просто).
e820 пишет что эти области можно использовать. Но я в этом сильно сомневаюсь. Там биосы от RAID, Ethernet и т.п. К тому же о каких временных данных размером с мегабайт идет речь?
Там есть следующие сигнатуры (перечисляю последовательно, как он расположены в памяти): Код (Text): $PnP - много раз встречается VIA VT6421 RAID BIOS Setting Utility v4.94 If you want to install Linux Default partition RAID driver, please DO NOT use OPROM creation operation! HardWare Initiate failed, Please Check Device!!! The Bios does not be installed. Press <g> to continue! VIA RAID 0 VIA RAID 1 VIA RAID 0+1 VIA RAID JBOD VRQS Power off and check the failed drive "Destroy the " Choose replacement drive and rebuild Continue to boot Power off and check the failed drive "Destroy the" "Continue to boot" "Broken Raid " "Critical Status " "A disk member of a mirroring" " array has failed or is not" ...очень много строк... Enter the VIA RAID Utility after exiting?(Y/N) ...очень много строк... (статусные сообщения, явные строки из программы по созданию рейдов) Большой блок с 0xFF в котром местами как-будто сделаны искажения точечно. Он лежит в диапазоне 0x210200-0x22FFFF После идут нули с точечными повреждениями 0x230000 - 0x24FFF0 а потом опять... долбанный A20
NoName Судя по строчкам эта часть связана с RAID. У рейд контролера есть свой постоянная память ROM. При инициализации компьютера BIOS грузит ROM устройств в том числе и RAID. Каждый ROM обязан начинаться $PnP. При инициализации биос передаёт управление в ROM. ROM волен использовать всю память компьютера, при этом при завершении работы он не обязан чистить за собой. Факт на лицо. Что можно сказать про RAID. То что в его ROM понапихано много разных утилит: форматирования, восстановления и тд. Дальше идут догадки. Так как для таких вот утилит RAID нужен ROM видео карты. А в первом мегабайте уже всё забито. Единственный выход это выставить 0C0000h для ROM RAID скопировать себя в область выше 1МБ для страховки во второй. Затем вернуть управление теперь биос в область 0C0000h отображает ROM видеокарты. А после уже снова передаёт управление на RAID ROM который скопирован выше 2 МБ. Второе предположение более вероятное. Как я уже писал в ROM RAID понапихано много утилит. И чтобы разместить в маленьком ROM их сжимают. А для работы естественно разархивируют.
могу сказать одно. при помощи e820 всю память не проверишь. там же сказано что адреса принадлежашье картам расширения нужно проверять через их интерфейс (pci например)