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.
Leave A Comment?