2009-11-21 2 views
7

Мне было интересно, есть ли у меня возможность написать программу на C, чтобы изменить объем памяти, который используется совместно с ОЗУ и GFX-картой, или вообще, как я могу связаться с Настройки BIOS?Изменение настроек BIOS с использованием языка C

+0

http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.vc ,language & tid = f5c02216-01e2-46d4-8c99-ac6a5981313c & cat = & lang = & cr = & sloc = & p = 1 – Xinus

+1

Я думаю, что это нехорошо сделать, «Не делай этого» –

+0

Потенциально опасно для здоровья машин. Не делай этого. – ty812

ответ

10

Короткий ответ: Нет

Длинный ответ: Не связывайтесь с BIOS пользователя. Есть причина, по которой нет API-интерфейсов или тому подобного. Мой компьютер, мои настройки.

13

Вы можете получить доступ к настройкам BIOS через порт ввода-вывода 70h и 71h. (Некоторые чипсеты также имеют расширенный CMOS на 72/73 или аналогичный.)

Какая ОС вы используете? Если вы используете Windows, вы не сможете выполнять ввод/вывод портов напрямую из приложения, вам придется написать драйвер режима ядра или использовать сторонний набор инструментов, такой как WinIO. В Linux вы можете использовать/dev/nvram для получения настроек CMOS. (Предположим, что драйвер nvram для Linux поддерживает ваш набор микросхем. В противном случае используйте/dev/port.)

После того, как вы получите бит CMOS, следующая задача будет определять, какое местоположение в CMOS соответствует настройке видеопамяти.

Вот (удручающе неполны) отображение ячеек памяти CMOS: http://ivs.cs.uni-magdeburg.de/~zbrog/asm/cmos.html

Карта расположения CMOS весьма специфична к материнской плате, BIOS и BIOS об. (Карта CMOS может меняться между версиями BIOS, так как новые опции меню добавляются/удаляются.) Возможно, ваш поставщик материнских плат может предоставить вам карту CMOS. У них есть инструменты для создания такой карты (она является частью процесса компиляции BIOS), но они могут не захотеть поделиться ею.

Без карты есть другие способы определения, какие биты в CMOS представляют размер видеопамяти. Попробуйте сбросить настройки CMOS с различными размерами памяти и выяснить, какие биты меняются.

Некоторых другие детали:

  1. Вне несколько «стандартного» CMOS бита, большинство из них очень зависят от платформы, я надеюсь, что вы не планируете сделать заявление общего назначения из этого ,

  2. Есть контрольные суммы при определенных смещениях в CMOS. После изменения значения CMOS вам нужно будет исправить контрольную сумму, чтобы отразить изменения.

  3. Как только вы измените настройку, он не вступит в силу для следующей перезагрузки (когда BIOS считывает настройки CMOS и инициализирует чипсет).

  4. Это набор микросхем Intel? Графические ядра Intel имеют волшебную функцию, называемую технологией динамической видеопамяти (DVMT), которая улучшает использование видеопамяти в зависимости от того, насколько графически работает работающее приложение. http://www.intel.com/support/graphics/sb/cs-010488.htm Я не уверен, что другие производители чипсетов имеют аналогичную технологию.

  5. Выбросьте все это из окна в современной системе UEFI, которая обычно использует энергонезависимый раздел памяти в микросхеме BIOS для настроек. (В некоторых местах CMOS заполняются для обеспечения совместимости по системе UEFI.)

Смежные вопросы