Как ОС открива хардуера?

OS получава ли тази информация от BIOS или сканира сама шините, за да открие какъв хардуер е инсталиран в системата. След като разгледах онлайн, различни източници казват различни неща. Някои казват, че BIOS открива хардуера и след това го съхранява в паметта, която ОС след това чете, други казват, че ОС сканира шини (напр. pci), за да научи за хардуера.

Бих си помислил, че с модерните операционни системи ще игнорира BIOS и ще го направи сам.

Всяка помощ ще бъде оценена.

Благодаря.


person RJSmith92    schedule 17.09.2013    source източник
comment
Първо трябва да уточните хардуера, за който говорите? BIOS, поне както повечето хора знаят, сега е скърцащ x86 феномен и дори тогава е много далеч от това да е единствената игра в града.   -  person marko    schedule 18.09.2013
comment
@Marko Благодаря, имам предвид 32-битов процесор на дънна платка, използващ старомоден BIOS, а не UEFI. Ако някой отиде в магазините и си купи среден компютър с Windows, как Windows научава за хардуера в този компютър.   -  person RJSmith92    schedule 18.09.2013
comment
Разбирам, че преди Vista Windows използваше NTDETECT за намиране на хардуера, но ми е трудно да намеря какво се използва за Vista и по-нови операционни системи, BCD ли е?   -  person RJSmith92    schedule 19.09.2013


Отговори (2)


Най-общо казано, повечето съвременни операционни системи (Windows и Linux) ще сканират отново открития хардуер като част от последователността за зареждане. Доверяването на BIOS да открие всичко и да го настрои правилно се оказа ненадеждно.

В типичен x86 компютър има комбинация от техники, използвани за откриване на прикачен хардуер.

PCI и PCI Express шините имат стандартен механизъм, наречен Конфигурационно пространство, което можете да сканирате, за да получите списък с прикачени устройства. Това включва устройства, инсталирани в PCI/PCIe слот, както и контролера(ите) в чипсета (видео контролер, SATA и т.н.).

Ако бъде открит IDE или SATA контролер, OS/BIOS трябва да говори с контролера, за да получи списък с прикачени устройства.

Ако бъде открит USB контролер, OS/BIOS зарежда стек от USB протоколи и след това изброява свързаните хъбове и устройства.

При "наследените" ISA устройства нещата са малко по-сложни. Дори ако вашата дънна платка няма ISA слот, обикновено все още имате редица "ISA" устройства в системата (серийни портове, паралелни портове и т.н.). Тези устройства обикновено нямат наистина стандартизиран метод за автоматично откриване. За откриване на тези устройства има 2 опции:

  1. Проверете известни адреси - Серийните портове обикновено са на 0x3F8, 0x2F8, 0x3E8, 0x2E8, така че прочетете от тези адреси и вижте дали там има нещо, което прилича на UART на сериен порт. Това далеч не е перфектно. Може да имате сериен порт на нестандартен адрес, който не е сканиран. Може също така да имате устройство без сериен порт на един от тези адреси, което не реагира добре на сондиране. Помните ли как Windows 95 и 98 блокираха много при откриване на хардуер по време на инсталация?

  2. ISA Plug-n-Play – Този стандарт беше популярен за гореща минута, тъй като ISA беше премахната през в полза на PCI. Вероятно няма да срещнете много устройства, които поддържат това. Вярвам, че ISA PnP е деактивиран по подразбиране в Windows Vista и по-нови, но в момента се боря да намеря източник за това.

  3. ACPI Изброяване – ОС може да разчита на BIOS, за да опише тези устройства в ASL код. (Виж отдолу.)

Освен това може да има редица не-PnP устройства в системата на полуфиксирани адреси, като например TPM чип, HPET или онези „специални“ бутони на клавиатурите на лаптопи. За да бъдат обяснени тези устройства на операционната система, стандартният метод е да се използва ACPI.

ACPI таблиците на BIOS трябва да предоставят списък на устройствата на дънната платка на операционната система. Тези таблици са написани на език, наречен ASL (или AML за компилираната форма). По време на зареждане операционната система чете ACPI таблиците и изброява всички описани устройства. Имайте предвид, че за да работи това, производителят на дънната платка трябва да е написал правилно своя ASL код. Това не винаги е така.

И разбира се, ако всички методи за автоматично откриване не успеят, може да бъдете принудени ръчно да инсталирате драйвер. Правите това чрез съветника за добавяне на нов хардуер в Windows. (Точната процедура варира в зависимост от версията на Windows, която сте инсталирали.)

person myron-semack    schedule 18.03.2014

Виждам много информация за системния хардуер, с изключение на паметта, една от основните важни части освен процесора, която забавно не се споменава също така. Това е честно, защото може би има толкова много неща за изброяване, че някак губите гората от поглед през дърветата.

За памет на платформи x86/64 ще искате да потърсите BIOS или EFI за карта на паметта. за BIOS това е int 0x15 handle 0xe820. EFI има собствен механизъм, който предоставя подобна информация.

Това ще ви покаже кои диапазони на паметта са запазени от хардуер и т.н., за да знае вашата операционна система да ги остави на мира. (добре, трябва да построите и тази част, разбира се ;D)

За други платформи често операционната система ще бъде конфигурирана за фиксиран размер на паметта, както при вградените платформи. Няма BIOS за вас и извършването на нещо като bruteforce върху паметта е в най-добрия случай ненадеждно. (доколкото знам! - нямам много опит извън x86/64!!!)

За CPU определено ще искате да разгледате MSR, контролни регистри и CPUID функции, за да изброите CPU и да видите на какво е способен. можете да попитате дали например се поддържа 64 битов режим и някои други функции, които може да не присъстват на всички процесори.

За друг хардуер, като pci и т.н., бих препоръчал, както каза myron-semack, да разгледате спецификацията на PCI, pci-express и по-важното ACPI като внедряване, което ще ви накара да управлявате хардуера и захранването. малко по-общо / според по-новите стандарти.

person Seb    schedule 06.11.2018