Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ 2 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: bootloader.asm - Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π½Π° NASM, ΠΊΠΎΡΠΎΡΡΠΉ: - Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x7C00, - Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΡΠΎΠΊΡ, - ΡΠΈΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΠΊΡΠΎΡ Ρ Π΄ΠΈΡΠΊΠ° Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x1000, - ΠΏΡΡΠ³Π°Π΅Ρ ΡΡΠ΄Π°. ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ kernel Π½Π° C, ΠΊΠΎΡΠΎΡΡΠΉ: - ΡΡΠ°ΡΡΡΠ΅Ρ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x1000, - Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅, - ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ echo shell (ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ gets/puts ΡΠ΅ΡΠ΅Π· BIOS?ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ) - ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π· inline-Π²ΡΡΠ°Π²ΠΊΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΡΠ°ΠΊ ΠΈ ΡΠ΅ΡΠ΅Π· extern. Π½Π°ΠΏΠΈΡΠ°ΡΡ shell?ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ: - ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ bootloader ΠΈ kernel, - ΡΠΎΠ·Π΄Π°ΡΡ raw disk image, - Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ bootloader Π² ΡΠ΅ΠΊΡΠΎΡ 0, kernel Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅ΠΊΡΠΎΡΠ°, - Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ QEMU Ρ ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌΒ». ΠΠΎ ΡΡΡΠΈ: 1.Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ `bootloader.bin` (512 Π±Π°ΠΉΡ, Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠΎΠΉ). 2. Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ `kernel.bin` (flat binary). 3. ΠΠΎΠ½ΠΊΠ°ΡΠ΅Π½ΠΈΡΡΠ΅ΠΌ ΠΈΡ
Π² `disk.img`. 4. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ QEMU Ρ ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ bootloader.asm ΠΈ shell?ΡΠΊΡΠΈΠΏΡ. ΠΡΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡΡ Ρ kernel, Π΄Π΅ΡΠ°Π»ΠΈ ΠΎΠΏΠΈΡΡ ΠΏΠΎΠ·ΠΆΠ΅. ΠΡΠΎ ΡΡΡΠ΄Π΅Π½ΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΡΠΎΠ΅ΠΊΡ.