Microsoft-Windows- Kernel-Boot – Compilarea kernel-ului Windows

Configurare noua (How To)

Situatie

Compilarea kernel-ului Windows.

Solutie

În cadrul Windows Academic Program există posibilitatea accesului la codul sursa a kernel-ului de Windows NT, prin intermediul inițiativei Windows Research Kernel (WRK).

Codul sursă prezintă componentele cele mai importante din cadrul nuclelui (managementul memoriei, procese, thread-uri, scheduling, I/O manager) și poate fi folosit și modificat în scopuri non-comerciale. Se pot astfel urmări diversele mecanisme de implementare și design care stau la baza kernel-ului și se pot testa diverse alte soluții prin modificarea surselor. Accesul la sursele kernel-ului este limitat, anumite subdomenii (cum ar fi networking-ul) fiind absente.

Accesul la codul sursă pentru nucleul de Windows NT înseamna posibilitatea de modificare a acestuia și, evident, de compilare a kernel-ului și de boot-are. Sursele sunt accesibile prin intermediul imaginii de CD pusă la dispoziție de Microsoft în cadrul inițiativei WRK.

Din păcate, kernel-ul de Windows nu vine cu opțiuni de configurare, astfel încat procesul se rezumă la rularea comenzii de compilare și la instalarea noului kernel. Dacă se dorește un tip special de funcționalitate vor trebui alterate sursele.

De asemenea, kernel-ul poate fi compilat numai pe un sistem Windows 2003 SP1 sau Windows XP x64. Versiunea curentă (WRK-1.2) nu poate fi compilată pe un sistem Windows XP x86. Sursele sunt disponibile în directorul C:cygwinhomeAdministratorso2WRK din cadrul mașinii virtuale de Windows.

Etapele de compilare sunt prezentate și în fișierul README.txt din rădăcina surselor.

Compilare

Pentru compilarea surselor se parcurg următorii pași (vom utiliza de acum inainte %wrk% ca rădăcina surselor de kernel de Windows):

C:>set wrk=C:cygwinhomeAdministratorso2WRKWRK-v1.2
C:>set arch=x86
C:>set path=%wrk%tools%arch%;%path%
C:>cd %wrk%base
C:cygwinhomeAdministratorso2WRKWRK-v1.2base>cd ntos
C:cygwinhomeAdministratorso2WRKWRK-v1.2basentos>nmake -nologo %arch%=

Imaginea de kernel obținută se va regăsi în %wrk%basentosBUILDEXE și va purta numele wrkx86.exe pentru un sistem cu arhitectura x86. Imaginea obținută este doar nucleul; modulele de kernel folosite vor fi cele existente în sistem în acel moment.

Instalare

Procesul de instalare presupune copierea imaginii kernel-ului în %SystemRoot%system32:

C:>copy %wrk%basentosBUILDEXEwrkx86.exe %SystemRoot%system32

Totuși, în afara imaginii de kernel, va trebui precizată imaginea de HAL (Hardware Abstraction Layer) care va fi utilizată. Va trebui gasită imaginea corecta de HAL; există trei imagini de HAL disponibile in %wrk%WS03SP1HALSx86. Pentru a afla care imagine este cea corectă va trebui utilizat linker-ul (folosind comanda link și analizată imaginea de HAL existentă în acest moment în sistem).

C:>"C:Program FilesMicrosoft Visual Studio 8VCvcvarsall.bat"
Setting environment for using Microsoft Visual Studio 2005 x86 tools.
C:>link -dump -all %SystemRoot%system32hal.dll | findstr pdb
  80011530: 68 61 6C 2E 70 64 62 00 00 00 00 00 00 00 00 00  hal.pdb.........
    42435B3A cv           20 00001518      918    Format: RSDS, {2ECB059A-3F06-4
285-8E30-3FDE64119692}, 1, hal.pdb

Motivul pentru care în ieșirea comenzii nu apare șirul halaacpi.dll este că a fost dezactivat ACPI pe mașina virtuală de Windows 2003.

Asocierea dintre ieșirea comenzii de mai sus și imaginile disponibile în %wrk%WS03SP1HALSx86 este (după cum este precizat și în README.txt):

    halacpi.dll  -> halacpim.dll
    halaacpi.dll -> halmacpi.dll
    halapic.dll  -> halmps.dll

De obicei, imaginea căutată va fi halmacpi.dll.

Imaginea corectă de HAL va fi copiată tot în %SystemRoot%system32:

C:>copy %wrk%WS03SP1HALSx86halmacpihalmacpi.dll %SystemRoot%System32

Configurare boot.ini

Pentru a boota proaspătul kernel va trebui adaugată o intrare în C:boot.ini, fișierul de configurare pentru loader-ul de Windows NT. Se recomandă copierea unei linii de bootare existente și modificarea ei pentru a boota noul kernel și noua imagine de HAL, ca mai jos:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Standard"
/fastdetect /NoExecute=OptOut
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Standard - WRK-1.2
compiled kernel" /kernel=wrkx86.exe /hal=halmacpi.dll /fastdetect /NoExecute=OptOut

Pentru vizualizarea boot.ini în Windows Explorer, va trebui să accesați Tools -> Folder Options -> View -> Hide protected operating system files (Recommended). Fișierul este implicit read-only; pentru editare va trebui să anulați această opțiune. Alternativ puteți face acest lucru din linia de comanda:

C:>attrib -h -s -r boot.ini

După configurarea boot.ini, sistemul poate boota în noul kernel compilat.

Tip solutie

Permanent

Voteaza

(24 din 52 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?