рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ - рд╢реЗрд▓ред рдпрд╣ рдПрдХ рдЕрд▓рдЧ .elf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд░реНрдиреЗрд▓ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ init рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╣рдорд╛рд░реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдЪрдХреНрд░ рдХрд╛ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рд╣реИред
рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо (рдореЗрдХ, рдЬреАрд╕реАрд╕реА, рдЧреИрд╕)ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреВрдЯ (рдорд▓реНрдЯреАрдмреВрдЯ)ред рд▓реЙрдиреНрдЪ (qemu)ред рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА (strcpy, memcpy, strext)ред
рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рд╕реНрдкреНрд░рд┐рдВрдЯрдл, рд╕реНрдЯреНрд░реИрдЪреА, рд╕реНрдЯреНрд░реИрдореНрдк, рд╕реНрдЯреНрд░реЗрдЯреЛрдХ, рд╡рд╛_рд▓рд┐рд╕реНрдЯ ...)ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЛрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЛрдб рдореЗрдВ рдмрдирд╛рдирд╛ред
рдХрд░реНрдиреЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧред рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ (kprintf, kpanic, kassert)ред
рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА, рд╣реАрдк (kmalloc, kfree)ред
рдореЗрдореЛрд░реА рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ (GDT, IDT, PIC, syscall) рдХрд╛ рд╕рдВрдЧрдардиред рдЕрдкрд╡рд╛рджред
рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА (рдкреЗрдЬ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдкреЗрдЬ рдЯреЗрдмрд▓)ред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рд╕рдордпрдмрджреНрдзрдХред рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (рдорд╛рд░, рдирд┐рдХрд╛рд╕, рдкреАрдПрд╕)ред
рдЪрд░рд┐рддреНрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (ioctl, fopen, fread, fwrite)ред рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА (fopen, fclose, fprintf, fscanf)ред
рдХрд░реНрдиреЗрд▓ рдХреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА (initrd), рдпреЛрдЧрд┐рдиреА, рдФрд░ рдЗрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХред рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (рдирд┐рд╖реНрдкрд╛рджрди)ред рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╢реЗрд▓редрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдореЛрдб (рд░рд┐рдВрдЧ 3)ред рдЯрд╛рд╕реНрдХ рд╕реНрдЯреЗрдЯрд╕ рд╕реЗрдЧрдореЗрдВрдЯ (tss)ред
рдкреВрд░реНрдг рдХрд░реНрдиреЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╢реЗрд▓
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдЪрд░рд┐рддреНрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрд╛ред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓рд╛ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣реИред
рд╣рдо рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдЕрд▓рдЧ рдпреЛрдЧрд┐рдиреА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗред
void start() { u_int errno; stdio_init(); errno = main(); stdio_deinit(); exit(errno); }
рд╣рдореЗрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдореБрдЦреНрдп рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
int main() { char cmd[255]; while (1) { printf(prompt); flush(); scanf(cmd); if (!execute_command(cmd)) { break; } } return 0; }
рд▓реВрдк рдореЗрдВ рдЖрдЧреЗ, рд╣рдо рдмрд╕ рд▓рд╛рдЗрди рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рддрд░реНрдХ рд╣реИрдВ рддреЛ рдкрд╛рд░рд╕реАрдо strtok_r рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИред
static bool execute_command(char* cmd) { if (!strcmp(cmd, cmd_ps)) { struct clist_definition_t *task_list; task_list = ps(); printf(" -- process list\n"); clist_for_each(task_list, print_task_info); } else if (!strcmp(cmd, cmd_clear)) { clear(); flush(); } else if (!strncmp(cmd, cmd_kill, strlen(cmd_kill))) { char* save_ptr = null; strtok_r(cmd, " ", &save_ptr); char* str_tid = strtok_r(null, " ", &save_ptr); u_short tid = atou(str_tid); if (!kill(tid)) { printf(" There is no process with pid %u\n", tid); }; } else if (!strncmp(cmd, cmd_exit, strlen(cmd_exit))) { clear(); printf(prompt); flush(); return false; } else if (!strncmp(cmd, cmd_exec, strlen(cmd_exec))) { char* save_ptr = null; strtok_r(cmd, " ", &save_ptr); char* str_file = strtok_r(null, " ", &save_ptr); exec(str_file); } else if (!strncmp(cmd, cmd_dev, strlen(cmd_dev))) { struct clist_definition_t *dev_list; dev_list = devs(); printf(" -- device list\n"); clist_for_each(dev_list, print_dev_info); } else { printf(" There is no such command.\n Available command list:\n"); printf(" %s %s %s <pid> %s <file.elf> %s %s\n", cmd_ps, cmd_exit, cmd_kill, cmd_exec, cmd_clear, cmd_dev); } return true; }
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рд╕рд┐рд░реНрдл рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЭреЗ рдЖрдкрдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрд░рдВрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд┐рдЫрд▓реЗ рдкрд╛рда рдореЗрдВ, рд╣рдордиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрдВрдХреНрд╢рди рд▓рд┐рдЦреЗ:
extern void stdio_init() { stdin = fopen(tty_dev_name, MOD_R); stdout = fopen(tty_dev_name, MOD_W); asm_syscall(SYSCALL_IOCTL, stdout, IOCTL_INIT); asm_syscall(SYSCALL_IOCTL, stdin, IOCTL_READ_MODE_LINE); asm_syscall(SYSCALL_IOCTL, stdin, IOCTL_READ_MODE_ECHO); }
рдпрд╣ рдмрд╕ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЯрд░реНрдорд┐рдирд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рдпреЛрдЧрд┐рдиреА рдХреЛ рдПрдХ рд╢реЗрд▓ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдореВрд▓ рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо (initrd) рдкрд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрд░рдВрднрд┐рдХ рд░реИрдо рдбрд┐рд╕реНрдХ рдХрд░реНрдиреЗрд▓ рд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдорд▓реНрдЯреАрдмреВрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреА initrd рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрддрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдпрд╣ initrd рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдХрд┐ рдЬреЗрдореНрд╕ рдореЛрд▓реЙрдп рдХреЗ рдПрдХ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╛рд░реВрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
extern struct initrd_node_t { unsigned char magic; char name[8]; unsigned int offset; unsigned int length; }; extern struct initrd_fs_t { int count; struct initrd_node_t node[INITRD_MAX_FILES]; };
рдЕрдЧрд▓рд╛, 32 рдмрд┐рдЯ рдпреЛрдЧрд┐рдиреА рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдпрд╛рдж рд░рдЦреЗрдВред
struct elf_header_t { struct elf_header_ident_t e_ident; u16 e_type; u16 e_machine; u32 e_version; u32 e_entry; u32 e_phoff; u32 e_shoff; u32 e_flags; u16 e_ehsize; u16 e_phentsize; u16 e_phnum; u16 e_shentsize; u16 e_shnum; u16 e_shstrndx; };
рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЗрдбрд░ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкрддреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рд╕реЗрдХреНрд╢рди рдкрд╣рд▓реЗ рд╣реЗрдбрд┐рдВрдЧ рд╣реЛрдЧрд╛, рдФрд░ рд╕реНрдЯреИрдХ рд╕реЗрдХреНрд╢рди рджреВрд╕рд░рд╛ рд╣реЛрдЧрд╛ (рдУрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпреЛрдЧрд┐рдиреА рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░)ред
struct elf_program_header_t { u32 p_type; u32 p_offset; u32 p_vaddr; u32 p_paddr; u32 p_filesz; u32 p_memsz; u32 p_flags; u32 p_align; } attribute(packed);
рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдпреЛрдЧрд┐рдиреА рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд╕реНрдЯрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд░реЗрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреГрд╖реНрда рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдкрд╛рд░реНрд╕ рдХреА рдЧрдИ рдпреЛрдЧрд┐рдиреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдЧрд╛ред
рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдПрд▓реНрдлрд┐рдХ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВред
рд╣рдореЗрдВ рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗрдбрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
extern void elf_exec(struct elf_header_t* header) { assert(header->e_ident.ei_magic == EI_MAGIC); printf(MSG_KERNEL_ELF_LOADING, header->e_phnum);
рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдПрдХ рдкреЗрдЬ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдФрд░ рдкреЗрдЬ рдЯреЗрдмрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ, рдкрд╣рд▓реЗ рд╣рдо рднреМрддрд┐рдХ рдкреГрд╖реНрдареЛрдВ (mm_phys_alloc_pages) рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдкреГрд╖реНрдареЛрдВ (mmu_occupy_user_page) рдкрд░ рдореИрдк рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рднреМрддрд┐рдХ рд╕реНрдореГрддрд┐ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЗрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВ рдФрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд▓реЗрдЦреЛрдВ рдХреА рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЙрдкрдпреЛрдЧреА рд▓рдЧреА рд╣реЛрдЧреАред
рд╣рдордиреЗ рдЕрднреА рддрдХ рдЖрдкрдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд╛ рд░рд┐рдВрдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╖рдп рдХреА рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдФрд░ рдорд┐рд╢реНрд░рд┐рдд рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдЯреВрдЯрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рдЕрдм рдЖрдЧреЗ рдХреЗ рд╢реЛрдз рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдЖрдкрдХреЗ рд▓рд┐рдП рдФрд░ рдореИрдВрдиреЗ рд╕рднреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдмреЗрд▓реНрдЯ рдХреЛ рдХрд╕ рд▓реЗрдВ, рдФрд░ рд▓рдбрд╝рд╛рдИ рдореЗрдВ! рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд▓рд┐рдЦ рдХрд░!
рдореБрдЭреЗ рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдЧрд╛ (рдЕрдЧрд░ рд╣рдо рджрд┐рди рдореЗрдВ 6-8 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд╕рдордп рдорд╛рдирддреЗ рд╣реИрдВ) рддреЛ рд╡рд╣ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрдкрдиреЗ рдФрд░ рдореИрдВрдиреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕реАрдЦрд╛ рдерд╛ред
рдЗрд╕рд▓рд┐рдП, 2-3 рдорд╣реАрдиреЛрдВ рдореЗрдВ рдЖрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рдУрдПрд╕ рд▓рд┐рдЦ рдкрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдФрд░ рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред
рдмрд╕ рдпрд╣ рдЬрд╛рди рд▓реЗрдВ рдХрд┐ qemu рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдордирдорд╛рдиреЗ рдкреНрд░рд╛рд░реВрдк рдХреЗ initrd рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ 4kb рдореЗрдВ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╛ qemu рдХреЗ рдмрдЬрд╛рдп borsch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрддреНрд░ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдЖрдкрдХрд╛ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рд╡рд╣ рд╕рдм рд╣реИ! рдЬрдм рддрдХ рдирдпрд╛ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ!
рд╕рдВрджрд░реНрдн
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП
рд╡реАрдбрд┐рдпреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВред
рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб (рдЖрдкрдХреЛ рд╕рдмрдХ 9 рд╢рд╛рдЦрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рд╕рдВрджрд░реНрдн
1. рдЬреЗрдореНрд╕ рдореЛрд▓реЙрдпред рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЦрд┐рд▓реМрдирд╛ рдпреВрдирд┐рдХреНрд╕-рдХреНрд▓реЛрди рдУрдПрд╕ рд░реЛрд▓ рдХрд░реЗрдВред
2. рджрд╛рдБрддред рдбреЙрд╕, рд╡рд┐рдВрдбреЛрдЬ, рдпреВрдирд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓рд░
3. рдХрд▓рд╛рд╢реНрдирд┐рдХреЛрд╡ред рдЕрд╕реЗрдВрдмрд▓рд░ рдЖрд╕рд╛рди рд╣реИ!
4. рддрд╛рдирдирдмрд╛рдоред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдоред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд╡рд┐рдХрд╛рд╕ред
5. рд░реЙрдмрд░реНрдЯ рд▓рд╡ред рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред