рдорд╛рдирдХ / sbin / init рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

init рдпреВрдирд┐рдХреНрд╕ рдХреА рддрд░рд╣ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкрд╣рд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ
init - рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
init - рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЙрдкрдпреЛрдХреНрддрд╛) рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЬрдирдХ рд╣реИред

рдорд╛рдирдХ / sbin / init рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ / etc / inittab рдкрдврд╝рддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдИ "рд░рдирд▓реЗрд╡рд▓" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╛рди рдирд╛рдо рдХреА init рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЛ рдорд╛рдирдХ / sbin / init рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ

рд╣рдо рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рд▓реЗрдВрдЧреЗ рдФрд░ рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ /boot/grub/menu.lst рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ
рд╢реАрд░реНрд╖рдХ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдФрд░ рдХрд╕реНрдЯрдо рдЗрдирд┐рдЯ
рд░реВрдЯ (hd0,1)
рдХрд░реНрдиреЗрд▓ / рдХреНрд▓рд┐рдирдХреНрд╕ /vmlinuz-2.6.26-1-686 рд░реВрдЯ = / dev / hda2 init = / linux / init
initrd /linux/initrd.img-2.6.26-1-686

Init рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдХреМрди рд▓реЗрддрд╛ рд╣реИ? рдХрднреА-рдХрднреА рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддреЗ рд╣реИрдВ - рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреВрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, init рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдорд╛рди рдореЗрдВ рд╣реЛрддреА рд╣реИ - рдореИрдВ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд Xameleon рдкреНрд░рдгрд╛рд▓реА рдХреА init рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреА рд╣реИред рдХреНрдпрд╛ рдЖрдк рднреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

рдХреИрд╕реЗ рдореИрдВрдиреЗ рдорд╛рдирдХ / sbin / init рдХреЛ Xameleon init рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред (рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рд╡рд┐рд╡рд░рдг)

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдерд╛рдкрд┐рдд gcc рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рд╕рд░рд▓рддрдо рдореЗрдХрдлрд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ:
рдХрд╛рд░реНрдпрдХреНрд░рдо = init

рд╕рд░рдХ = init.cc

LDFLAGS + = -рд╕реНрдЯрд┐рдХ
Libs + = -lc

рд╕рднреА:
g ++ -D POSIX -D LINUX $ (CFLAGS) $ (SRCS) $ (LIBS) $ (LDFLAGS)-in init


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рд▓реЗрдЦ рдХреЛ рдЖрдЧреЗ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ init рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЧрд┐рд░рдЧрд┐рдЯ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЗрдирд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ init рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕рдореЗрдВ рдХрдИ рдХрдорд╛рдВрдбреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рдЖрджрд┐рдо рджреБрднрд╛рд╖рд┐рдпрд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд▓реЗрдЦ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╕реЗ рдкреАрдбрд╝рд╛ рд╣реБрдИ рдереА рдХрд┐ рдЗрдирд╛рдЗрдЯ рдХреЛрдб рдХреЛ рдХрд┐рд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд░рдЦрд╛ рдЬрд╛рдПред рдмрд╣реБрдд рдЕрдзрд┐рдХ рдФрд░ рджрд░реНрджрдирд╛рдХ рд╡рд┐рдЪрд╛рд░-рд╡рд┐рдорд░реНрд╢ рдХреЗ рдмрд╛рдж, рд╡рд┐рдХрд▓реНрдк рдЯреВ рдХреНрд▓реЙрдЬрд╝ рдмреАрдПрд╕рдбреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред

рдЗрд╕ рд╕реНрд░реЛрдд рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╕рд░рд▓ рд╣реИ - рдпрд╣ рдЧрд┐рд░рдЧрд┐рдЯ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрд┐рд░рдЧрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ - рдХреНрдпреЛрдВ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЕрдкрдиреЗ init рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА? рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЧрддрддрд╛ рдкрд░реАрдХреНрд╖рдгред

typedef struct typeCommandEntry { const char * szCmd; int nLength; int (*fHandler)( int argc, char * argv[], char * envp[] ); const char * szHelpString; } typeCommandEntry; /////////////////////////////////////////////////////////////////////////////// // Callback's array // static typeCommandEntry CommandList[] = { { "help", 0, tcmdHelp, "Show list of built-in commands. Use 'help command-name' to see detail description of the command-name argument." }, { "exec", 0, tcmdExec, "Execite file. Please note that this command overwrites current process by new executable image" }, { "info", 0, tcmdSysInfo, "Show some information from the L4 KIP" }, { "memmap", 0, tcmdMemMap, "Show a kernel memory map" }, { "modules", 0, tcmdShowModules, "Show registered drivers" }, { "term", 0, tcmdDestroyProcess, "Destriy the init process" }, { "fork", 0, tcmdForkProcess, "Forks (creates copy of) the init process to another console." }, { "wait", 0, tcmdWaitProcess, "Waits for the process termination" }, { "kill", 0, tcmdKillProcess, "Sends signal to the process" }, { "trap", 0, tcmdTrapProcess, "Sends the trap signal to the process" }, { "reset", 0, tcmdReset, "Reset current console to the initial state" }, { "mount", 0, tcmdMount, "This command shows mounted filesyetems if used without arguments.\nUse 'mount device mount-point' to mount device into filesystem tree." }, { "umount", 0, tcmdUnmount, "Unmounts filesystem that provided as command argument. " }, { "cd", 0, tcmdChangeDir, "Change current directory" }, { "dir", 0, tcmdShowDirectory, "Show directory without parsing inodes" }, { "ls", 0, tcmdListDirectory, "List files into current directrory or files that reside to a path provded as command argument" }, { "chroot", 0, tcmdChangeRootDirectory, "Changes the root directory of the caller process." }, { "cat", 0, tcmdShowFile, "List file on active console" }, { "rm", 0, tcmdRemoveFile, "Remove file" }, { "rmdir", 0, tcmdRemoveDirectory, "Remove directory" }, { "mkdir", 0, tcmdMakeDirectory, "Create directory" }, { "ln", 0, tcmdMakeLink, "Link the file inode as a new file" }, { "mv", 0, tcmdMoveFile, "Moves file into another place. Please note that this command able to move files within same filesystem." }, { "df", 0, tcmdDiskInformation, "Show mounted partitions information" }, { "chown", 0, tcmdChangeOwner, "Chane owner of file or directory" }, { "sync", 0, tcmdFlushCaches, "Flush disk caches" }, { "cp", 0, tcmdCopyFile, "Copy file" }, { "setenv", 0, tcmdSetEnvironment, "Set environment variable" }, { "getenv", 0, tcmdGetEnvironment, "Get environment variable" }, { "unsetenv", 0, tcmdUnsetEnvironment, "Unset environent variable" }, { "pwd", 0, tcmdPwd, "Print working directory" }, { "dump", 0, tcmdDump, "Show file/device hex dump" }, { "env", 0, tcmdEnv, "Show current environment" }, { "exit", 0, tcmdExit, "Terminates init process. This command have no meaning in production sysstem, but usefull for debugging)" }, { "quit", 0, tcmdExit, "A synonym for the exit command" }, }; 


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╛рдирдХ рд╢реЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
/ # рдирд┐рд╖реНрдкрд╛рджрди / рдмрд┐рди / рд╢

рдХрдВрдкреНрдпреВрдЯрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
/ # рдирд┐рд╖реНрдкрд╛рджрди / sbin / рдкрдбрд╝рд╛рд╡

рдХреЛрдб рдореЗрдВ рдЦрд░рд╛рдм рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рд░реВрд╕реА рдореЗрдВ рд╕рдВрджреЗрд╢ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди init рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд░рдг рдореЗрдВ, рд░реВрд╕реА рдЪрд░рд┐рддреНрд░ рдЬрдирд░реЗрдЯрд░ рдЕрднреА рддрдХ рд▓реЛрдб рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ - рдпрд╣ рдкрд╣рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреА рдЪрд┐рдВрддрд╛ рд╣реИред
рдореИрдВ рдкреИрдЪ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред
FreeBSD рдХреЗ рддрд╣рдд рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреАред рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдПрдХ рд╕рд╛рде рдирд╣реАрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ - рд▓рд┐рдЦреЗрдВред

рдбрд╛рдЙрдирд▓реЛрдб xameleon init рд╕реНрд░реЛрдд рдХреЛрдб

http://narod.ru/disk/26585438001/xam_init.tgz.html

рдЕрдЪреНрдЫрд╛ рдмрдирд╛ рд▓реЛред

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


All Articles