рдмрд┐рдирд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ PCI рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХреИрд╕реЗ рдЦреЛрдЬреЗрдВ

рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрдВ рд╕рдордп-рд╕рдордп рдкрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░ рдХреА рдмрд╛рддрдЪреАрдд рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдкреВрдЫрддрд╛рдЫ рдФрд░ рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рд▓реЛрдбрд┐рдВрдЧ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИред

рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдорд▓реНрдЯреАрдмреВрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреВрдЯ рдХреНрд╖реЗрддреНрд░ рдФрд░ рд▓реЛрдбрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдореБрджреНрджрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмреВрдЯ рд▓реЛрдбрд░ GRUB рд╣реЛрдЧрд╛ред рд╣рдо рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдмреВрдЯ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЖрднрд╛рд╕реА рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╢реАрди рджреЛрдиреЛрдВ рд╕реЗ рдмреВрдЯ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рдо QEMU рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВрдЧреЗред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╢реАрди рдПрдХ рдирд┐рдпрдорд┐рдд BIOS (рдпреВрдИрдПрдлрдЖрдИ рдирд╣реАрдВ) рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдпреВрдПрд╕рдмреА-рдПрдЪрдбреАрдбреА рд╕реЗ рдмреВрдЯрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рд▓реАрдЧреЗрд╕реА рдпреВрдПрд╕рдмреА рд╕рдорд░реНрдерди рд╡рд┐рдХрд▓реНрдк рд╣реИ)ред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдЙрдмрдВрдЯреВ рд▓рд┐рдирдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдЙрдореНрдореАрдж рдХрд░реЗрдВ, рдХреНрдпреВрдореВ, рдЧреНрд░рдм (рд╡реЗ рд╕реВрджреЛ рдПрдк-рдЧреЗрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП gcc рдХреЛ 32 рдмрд┐рдЯ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд╣рд▓реЗ рдЪрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдПрдХ рдХрд░реНрдиреЗрд▓ рдмрдирд╛рдирд╛ рдЬреЛ рдорд▓реНрдЯреАрдмреВрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд▓реЛрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ GRUB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд░реНрдиреЗрд▓ рдХреЛ 3 рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдХрд░реНрдиреЗрд▓ред рд╕реА - рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреЛрдб рдФрд░ рдореБрдЦреНрдп () рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓;
рд▓реЛрдбрд░.рдПрд╕ - рдореЗрдВ GRUB рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдмреВрдЯ рд╣реИрдбрд░ рд╣реИ;
Linker.ld рдПрдХ ld рд▓рд┐рдВрдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдХрд┐рд╕ рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред

Linker.ld рд╕рд╛рдордЧреНрд░реА:
ENTRY (loader) SECTIONS { . = 0x00100000; .text ALIGN (0x1000) : { *(.text) } .rodata ALIGN (0x1000) : { *(.rodata*) } .data ALIGN (0x1000) : { *(.data) } .bss : { sbss = .; *(COMMON) *(.bss) ebss = .; } } 


рд▓рд┐рдВрдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ "рд▓реЛрдбрд░" рд▓реЗрдмрд▓ рд╡рд╛рд▓рд╛ рдкрддрд╛ рд╣реЛрдЧрд╛ред рдЖрдЧреЗ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкрддрд╛ 0x00100000 (1Mb) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗрдХреНрд╢рди рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред рд░реЙрдбрдЯрд╛, рдбреЗрдЯрд╛ рдФрд░ рдмреАрдПрд╕рдПрд╕ рдЕрдиреБрднрд╛рдЧ 0x1000 (4Kb) рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рда рдЕрдиреБрднрд╛рдЧ рдХреЗ рдмрд╛рдж рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

Loader.s рдХреА рд╕рд╛рдордЧреНрд░реА:
 .global loader .set FLAGS, 0x0 .set MAGIC, 0x1BADB002 .set CHECKSUM, -(MAGIC + FLAGS) .align 4 .long MAGIC .long FLAGS .long CHECKSUM # reserve initial kernel stack space .set STACKSIZE, 0x4000 .lcomm stack, STACKSIZE .comm mbd, 4 .comm magic, 4 loader: movl $(stack + STACKSIZE), %esp movl %eax, magic movl %ebx, mbd call kmain cli hang: hlt jmp hang 


GRUB рдбрд┐рд╕реНрдХ рд╕реЗ рдХрд░реНрдиреЗрд▓ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЗ рдкрд╣рд▓реЗ 8Kb рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ 0x1BADB002 рдХреЗ рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкрд╣рд▓рд╛ рдорд▓реНрдЯреАрдмреВрдЯ рд╣реИрдбрд░ рдлрд╝реАрд▓реНрдб рд╣реИред рд╢реАрд░реНрд╖рдХ рд╕реНрд╡рдпрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдУрдлрд╝реНрд╕реЗрдЯ

рдЯрд╛рдЗрдк

рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо

рдЯрд┐рдкреНрдкрдгреА

0

u32

рдЬрд╛рджреВ

рдЕрдкреЗрдХреНрд╖рд┐рдд

4

u32

рдЭрдВрдбреЗ

рдЕрдкреЗрдХреНрд╖рд┐рдд

8

u32

рдЪреЗрдХрд╕рдо

рдЕрдкреЗрдХреНрд╖рд┐рдд

12

u32

header_addr

рдЕрдЧрд░ рдЭрдВрдбреЗ [16] рд╕реЗрдЯ рд╣реИ

16

u32

load_addr

рдЕрдЧрд░ рдЭрдВрдбреЗ [16] рд╕реЗрдЯ рд╣реИ

20

u32

load_end_addr

рдЕрдЧрд░ рдЭрдВрдбреЗ [16] рд╕реЗрдЯ рд╣реИ

24

u32

bss_end_addr

рдЕрдЧрд░ рдЭрдВрдбреЗ [16] рд╕реЗрдЯ рд╣реИ

28

u32

entry_addr

рдЕрдЧрд░ рдЭрдВрдбреЗ [16] рд╕реЗрдЯ рд╣реИ

32

u32

mode_type

рдЕрдЧрд░ рдЭрдВрдбреЗ [2] рд╕реЗрдЯ рд╣реИ

36

u32

рдЪреМрдбрд╝рд╛рдИ

рдЕрдЧрд░ рдЭрдВрдбреЗ [2] рд╕реЗрдЯ рд╣реИ

40

u32

рдКрдВрдЪрд╛рдИ

рдЕрдЧрд░ рдЭрдВрдбреЗ [2] рд╕реЗрдЯ рд╣реИ

44

u32

рдЧрд╣рд░рд╛рдИ

рдЕрдЧрд░ рдЭрдВрдбреЗ [2] рд╕реЗрдЯ рд╣реИ


рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 3 рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП - рдЬрд╛рджреВ, рдЭрдВрдбрд╛, рдЪреЗрдХрд╕рдоред рдореИрдЬрд┐рдХ рдлрд╝реАрд▓реНрдб рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрд╢рд╛ 0x1BADB002 рд╣реИред рдУрдПрд╕ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рдордп рдзреНрд╡рдЬ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдорд╢реАрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдорд▓реНрдЯреАрдмреВрдЯ рд╕реВрдЪрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рд╕реЗрдЯ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдорд▓реНрдЯреАрдмреВрдЯ рд╕реВрдЪрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░реНрдиреЗрд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рдордп рдИрдмреАрдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдзреНрд╡рдЬ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди 0 рд╣реИ, рдФрд░ рдорд▓реНрдЯреАрдмреВрдЯ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ 3 рдлрд╝реАрд▓реНрдб рд╣реИрдВред

рдХрд░реНрдиреЗрд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдордп, рдкреНрд░реЛрд╕реЗрд╕рд░ рдкреЗрдЬрд┐рдВрдЧ рдбрд┐рд╕реЗрдмрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЕрдХреНрд╖рдо рд╣реИред GRUB рдмреВрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 16 рдХреЗрдмреА рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рддрд╣рдд рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдЕрд╕реЗрдВрдмрд▓рд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЙрд▓ kmain рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ, рдЬреЛ C рдХреЛрдб рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╢реВрдиреНрдп kmain (рд╢реВрдиреНрдп) рдлрд╝рдВрдХреНрд╢рдиред

рдХрд░реНрдиреЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реАред

 #include "printf.h" #include "screen.h" void kmain(void) { clear_screen(); printf(" -- Kernel started! -- \n"); } 


рдпрд╣рд╛рдВ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗрд╡рд▓ C рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд┐рдВрдЯрдл рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝рдВрдХреНрд╢рди, рдЬреИрд╕реЗ рдХрд┐ putchar, clear_screen рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

рдХрд░реНрдиреЗрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рдореЗрдХрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 CC = gcc CFLAGS = -Wall -nostdlib -fno-builtin -nostartfiles -nodefaultlibs LD = ld OBJFILES = \ loader.o \ printf.o \ screen.o \ pci.o \ kernel.o start: all cp ./kernel.bin ./flash/boot/grub/ expect ./grub_install.exp qemu /dev/sdb all: kernel.bin .so: as -o $@ $< .co: $(CC) $(CFLAGS) -o $@ -c $< kernel.bin: $(OBJFILES) $(LD) -T linker.ld -o $@ $^ clean: rm $(OBJFILES) kernel.bin 


рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд░реНрдиреЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ GRUB рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╣рдорд╛рд░реЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

1. рдПрдХ USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдмрдирд╛рдПрдВ, рдЗрд╕реЗ GRUB рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ FAT32 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣реИ)ред рд╣рдордиреЗ рдЙрдмрдВрдЯреВ рдмрдВрдбрд▓ рд╕реЗ рдбрд┐рд╕реНрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА:



2. USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ рдФрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА / рдмреВрдЯ / рдЧреНрд░рдм / рдмрдирд╛рдПрдВред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЪрд░рдг 1, рд╕реНрдЯреЗрдЬ 2, fat_stage1_5 рдореЗрдВ / usr / lib рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рдмреВрдЯ / рдЧреНрд░рдм / рдореЗрдВ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдиреВ рдмрдирд╛рдПрдБред рдФрд░ рдЗрд╕реЗ рд▓рд┐рдЦреЗрдВ
 timeout 5 default 0 title start_kernel root (hd0,0) kernel /boot/grub/kernel.bin 


USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ GRUB рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, grub_install.exp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА:

 log_user 0 spawn grub expect "grub> " send "root (hd1,0)\r" expect "grub> " send "setup (hd1)\r" expect "grub> " send "quit\r" exit 0 


рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреНрдп рдбреНрд░рд╛рдЗрд╡ рдирдВрдмрд░ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдирд╛рдо рд╕рдВрднрд╡ рд╣реИрдВред рдЕрдВрддрддрдГ, рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рдХрдВрдкрд╛рдЗрд▓ рдХрд░рдирд╛ рдФрд░ рд╢реБрд░реВ рдХрд░рдирд╛ рдореЗрдХ рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Makefile рдХреА рдпрд╣ рдХрдорд╛рдВрдб grub_install.exp рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ GRUB рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧреА, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде QEMU рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдЧреАред рдЪреВрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рди рдХреЗрд╡рд▓ рдПрдХ рдХреНрдпреВрдореВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реЗ рдмреВрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рднреА рд╣реИред

рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ QEMU рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рдЕрдм рдЪрд▓реЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВ - рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдкреАрд╕реАрдЖрдИрдШрдбрд╝реА рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреАред рдкреАрд╕реАрдЖрдИ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдмрд╕ рд╣реИред рдорджрд░рдмреЛрд░реНрдб рдкрд░ рдЬрд╛рдиреЗ-рдорд╛рдиреЗ рд╕реНрд▓реЙрдЯреНрд╕ рдореЗрдВ рдбрд╛рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рдорджрд░рдмреЛрд░реНрдб рдореЗрдВ рд╡рд╛рдпрд░реНрдб рдбрд┐рд╡рд╛рдЗрд╕ (рддрдерд╛рдХрдерд┐рдд рдСрди-рдмреЛрд░реНрдб рдбрд┐рд╡рд╛рдЗрд╕) рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрдИ рдмрд╕реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреВрдПрд╕рдмреА) рдФрд░ рдЕрдиреНрдп рдмрд╕реЛрдВ рдХреЗ рдкреБрд▓реЛрдВ ( рдЬреИрд╕реЗ рдкреАрд╕реАрдЖрдИ-рдЖрдИрдПрд╕рдП рдкреБрд▓)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреАрд╕реАрдЖрдИ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдореБрдЦреНрдп рдмрд╕ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ рдЗрд╕рдХреЗ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ PCI-рдбрд┐рд╡рд╛рдЗрд╕ 256 рдмрд╛рдЗрдЯреНрд╕ (PCI рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдкреЗрд╕) рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрдерд┐рдд рд╣реИрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдВрддрддрдГ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред рд╕рднреА PCI рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ 2 рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:
0xcf8 - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреЛрд░реНрдЯ рдЬрд┐рд╕рдореЗрдВ рдкреАрд╕реАрдЖрдИ рдкрддрд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ;
0xcfc - рдбреЗрдЯрд╛ рдкреЛрд░реНрдЯ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреЛрд░реНрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ PCI рдкрддреЗ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреАрд╕реАрдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдкреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдХрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреАрд╕реАрдЖрдИ рдкрддрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 32-рдмрд┐рдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
рдмрд┐рдЯ рейрез

рдмрд┐рдЯреНрд╕ 30 - 24

рдмрд┐рдЯреНрд╕ 23 - 16

рдмрд┐рдЯреНрд╕ 15 - 11

рдмрд┐рдЯреНрд╕ 10 - 8

рдмрд┐рдЯреНрд╕ 7 - 2

рдмрд┐рдЯреНрд╕ 1 - 0

рд╣рдореЗрд╢рд╛ 1

рдЖрд░рдХреНрд╖рд┐рдд

рдЯрд╛рдпрд░ рдирдВрдмрд░

рдбрд┐рд╡рд╛рдЗрд╕ рдирдВрдмрд░

рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛

рд░рдЬрд┐рд╕реНрдЯрд░ рд╕рдВрдЦреНрдпрд╛

рд╣рдореЗрд╢рд╛ 0


рдбрд┐рд╡рд╛рдЗрд╕ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдмрд╕ рдирдВрдмрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рднреМрддрд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рдореЗрдВ рдХрдИ рддрд╛рд░реНрдХрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╛рдИ-рдлрд╛рдИ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ рдХрд╛рд░реНрдб рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдВрдЧреЗ)ред

рдкреАрд╕реАрдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдкреЗрд╕ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬрд┐рд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдирдВрдмрд░ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ 2-рд╕реЗ 7 рдмрд┐рдЯ рддрдХ 32-рдмрд┐рдЯ рдкреАрд╕реАрдЖрдИ рдкрддреЗ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред PCI рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдкреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ PCI рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкрд╣рд▓реЗ 4 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
рд░рдЬрд┐рд╕реНрдЯрд░ рд╕рдВрдЦреНрдпрд╛

рдмрд┐рдЯреНрд╕ 31 - 24

рдмрд┐рдЯреНрд╕ 23 - 16

рдмрд┐рдЯреНрд╕ 15 - 8

рдмрд┐рдЯреНрд╕ 7 - 0

0

рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА

рд╡рд┐рдХреНрд░реЗрддрд╛ рдЖрдИрдбреА

1

рд╕реНрдерд┐рддрд┐

рдЖрджреЗрд╢

2

рдХрдХреНрд╖рд╛ рдХреЛрдб

рдЙрдкрд╡рд░реНрдЧ

рдкреНрд░реЛрдЧ рдЖрдИред рдПрдл

рд╕рдВрд╢реЛрдзрди рдЖрдИрдбреА

3

рдмрд┐рд╖реНрдЯ

рд╣реИрдбрд░ рдкреНрд░рдХрд╛рд░

рд╡рд┐рд▓рдВрдмрддрд╛ рдЯрд╛рдЗрдорд░

рдХреИрд╢ рд▓рд╛рдЗрди рдХрд╛ рдЖрдХрд╛рд░


рдХреНрд▓рд╛рд╕ рдХреЛрдб - рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдХрд╛рд░реНрдп (рдиреЗрдЯрд╡рд░реНрдХ рдПрдбреЗрдкреНрдЯрд░, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб, рдЖрджрд┐) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ (рд╡рд░реНрдЧ) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ;
рд╡реЗрдВрдбрд░ рдЖрдИрдбреА - рдбрд┐рд╡рд╛рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╣реИ)ред рдпреЗ рдирдВрдмрд░ PCI SIG рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╣реИрдВ;
рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА - рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рдХреНрд░реЗрддрд╛ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп)ред рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рдбрд┐рд╡рд╛рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ (рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдбреАрдИрд╡реА) рдФрд░ рд╡реЗрдиреНрдбреЛрд░рд┐рдб (рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡реАрдИрдПрди) рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕рдВрд╢реЛрдзрди (рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЖрд░рдИрд╡реАрд╡реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ, рдЬрдм рдпрд╣ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдбрд┐рд╕реНрдХ рдкрд░ рдпрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ Microsoft рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ VEN, DEV рдФрд░ REV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдпреЗ рдирдВрдмрд░ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:



рдПрдХ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

 int ReadPCIDevHeader(u32 bus, u32 dev, u32 func, PCIDevHeader *p_pciDevice) { int i; if (p_pciDevice == 0) return 1; for (i = 0; i < sizeof(p_pciDevice->header)/sizeof(p_pciDevice->header[0]); i++) ReadConfig32(bus, dev, func, i, &p_pciDevice->header[i]); if (p_pciDevice->option.vendorID == 0x0000 || p_pciDevice->option.vendorID == 0xffff || p_pciDevice->option.deviceID == 0xffff) return 1; return 0; } void kmain(void) { int bus; int dev; clear_screen(); printf(" -- Kernel started! -- \n"); for (bus = 0; bus < PCI_MAX_BUSES; bus++) for (dev = 0; dev < PCI_MAX_DEVICES; dev++) { u32 func = 0; PCIDevHeader pci_device; if (ReadPCIDevHeader(bus, dev, func, &pci_device)) continue; PrintPCIDevHeader(bus, dev, func, &pci_device); if (pci_device.option.headerType & PCI_HEADERTYPE_MULTIFUNC) { for (func = 1; func < PCI_MAX_FUNCTIONS; func++) { if (ReadPCIDevHeader(bus, dev, func, &pci_device)) continue; PrintPCIDevHeader(bus, dev, func, &pci_device); } } } } 


рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдмрд╕ рдирдВрдмрд░ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдирдВрдмрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрд╕ рдкрддреЗ рдкрд░ рдЕрдВрдХрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рд░реАрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╣реИрдбрд░ рдкреНрд░рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ PCI_HEADERTYPE_MULTIFUNC рдзреНрд╡рдЬ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдпрд╣ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рдХрдИ рддрд╛рд░реНрдХрд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреЛрд░реНрдЯ рдкрд░ рд▓рд┐рдЦреЗ рдкрддреЗ рдореЗрдВ PCI-рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗрдВрдбрд░реЛрдб рдХрд╛ рдЧрд▓рдд рдорд╛рди рд╣реИ, рддреЛ рдЗрд╕ рдмрд╕ рдореЗрдВ рдЗрд╕ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИред Qemu рдкрд░, рдпрд╣ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ:



0x8086 рдЗрдВрдЯреЗрд▓ рдХрд╛ рд╡реЗрдВрдбрд░рдЖрдИрдбреА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╣реИред 0x7000 рдХрд╛ рдПрдХ DeviceID рдПрдХ PIIX3 PCI-to-ISA рдмреНрд░рд┐рдЬ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред VmWare рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди 9.0 рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдмреВрдЯред рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдЕрдзрд┐рдХ рд▓рдВрдмреА рд╣реЛ рдЧрдИ рдФрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:



рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХреИрд╕реА рд╣реИред рдпрд╣ рдХреНрд░рд┐рдпрд╛ IBM PC рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЕрдЧрд▓рд╛ рдХрджрдо рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдкрд╛рдП рдЧрдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдиреВрдареЗ рддрд░реАрдХреЗ рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИред

Source: https://habr.com/ru/post/In162769/


All Articles