5.7. init()

Ä¿³ÎÀÇ ºÎÆÃ¿¡ ÇÊ¿äÇÑ ±âº» ÃʱâÈ­(CPU, ¸Þ¸ð¸® µî)°¡ ³¡³ª¸é init ÇÁ·Î¼¼½º°¡ ¸¸µé¾îÁö°í ½Ã½ºÅÛ¿¡ Á¸ÀçÇÏ´Â ´Ù¸¥ Çϵå¿þ¾î µîÀ» ÃʱâÈ­ ÇÑ´ÙÀ½ ·çÆ® µð¹ÙÀ̽º¸¦ ã¾Æ ³ª¸ÓÁö ºÎÆÃÀ» ½ÃÀÛÇÑ´Ù. init ÇÁ·Î¼¼½º´Â 1¹ø ÇÁ·Î¼¼½º ¹øÈ£¸¦ °®´Â´Ù.

static int init(void * unused)
{
	lock_kernel();
(1)
	do_basic_setup();

(2)
	prepare_namespace();

	/*
	 * Ok, we have completed the initial bootup, and
	 * we're essentially up and running. Get rid of the
	 * initmem segments and start the user-mode stuff..
	 */
(3)
	free_initmem();
	unlock_kernel();

(4)
	if (open("/dev/console", O_RDWR, 0) < 0)
		printk("Warning: unable to open an initial console.\n");

	(void) dup(0);
	(void) dup(0);
	
	/*
	 * We try each of these until one succeeds.
	 *
	 * The Bourne shell can be used instead of init if we are 
	 * trying to recover a really broken machine.
	 */

	if (execute_command)
		execve(execute_command,argv_init,envp_init);
(5)
	execve("/sbin/init",argv_init,envp_init);
	execve("/etc/init",argv_init,envp_init);
	execve("/bin/init",argv_init,envp_init);
	execve("/bin/sh",argv_init,envp_init);
(6)
	execve("/sbin/init",argv_init,envp_init);
	panic("No init found.  Try passing init= option to kernel.");
}

(1)
¿©±â ±îÁöÀÇ »óÅ´ ½Ã½ºÅÛÀÌ ÀÌÁ¦ »ç¿ë °¡´ÉÇÑ »óűîÁö´Â ¿ÔÁö¸¸ ºÙ¾î ÀÖ´Â ´Ù¸¥ ¸ðµç µð¹ÙÀ̽º¿¡ ´ëÇØ¼± ÃʱâÈ­°¡ µÇÁö ¾ÊÀº »óÅ´Ù. CPU ÇϺΠ½Ã½ºÅÛ, ¸Þ¸ð¸® ±×¸®°í ÇÁ·Î¼¼½º °ü¸®´Â µ¿ÀÛÇÏ´Â »óÅ´Ù.

ÀÌÁ¦ ÇÒ °ÍÀº ³ª¸ÓÁö µð¹ÙÀ̽º µéÀ» ¸ðµÎ ÃʱâÈ­ ÇÏ´Â ÀÏÀ» ÇÏ´Â °ÍÀÌ´Ù. ÃʱâÈ­ ÇÏ´Â ¸ñ·ÏÀº ´ÙÀ½°ú °°´Ù. À̿ܿ¡ ´õ ÀÖÀ¸³ª Áß¿äÇÑ °Í¸¸ Á¶±Ý °£Ãß·È´Ù.

mtrr

ÇöÀç´Â i386¿¡¼­¸¸ Á¸Àç ÇÏ´Â ±â´ÉÀ¸·Î MTRR(Memory Type Range Register)¸¦ ¸»ÇÑ´Ù. PCI³ª AGP ºñµð¿À Ä«µå¸¦ Á»´õ »¡¸® ¾µ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.

sysctrl

proc file systemÀ» »ç¿ëÇϵµ·Ï ¼³Á¤ µÇ¾î ÀÖÀ¸¸é À̸¦ ÃʱâÈ­ ÇØÁØ´Ù.

pci

PCI ½Ã½ºÅÛÀ» ÃʱâÈ­ ÇÑ´Ù. PCIÀÇ ·çÆ® µð¹ÙÀ̽º¸¦ ÃʱâÈ­ Çϰí À̾î PCI ¹ö½º¿¡ ¿¬°áµÈ ¸ðµç ´Ù¸¥ Çϵå¿þ¾î¸¦ ã¾Æ ¸®½ºÆ®¿¡ µî·ÏÇÑ´Ù.

isapnp

ISA ¹ö½º¿¡ ¹°·Á ÀÖ´Â PnP µð¹ÙÀ̽º¸¦ ÃʱâÈ­ÇÑ´Ù.

socket

»ç¿ëµÇ´Â ÇÁ·ÎÅäÄÝÀ» ÃʱâÈ­ ÇÑ´Ù. ¼ÒÄÏ ¿ë ½½·¦µµ ÃʱâÈ­ Çϰí netlink, netfileter µîµµ ÃʱâÈ­ ÇÑ´Ù.

context thread

keventd¸¦ kernel thread·Î ½ÇÇàÇÑ´Ù.

pcmcia

PCMCIA µð¹ÙÀ̽º ÃʱâÈ­ ÇÑ´Ù.

(2)
¹«¾ùÀ» ¾îµð¼­ ¸¶¿îÆ®ÇÒ Áö °áÁ¤ÇÑ´Ù. ·çÆ® µð¹ÙÀ̽º¸¦ ¸¶¿îÆ®ÇÏ°í ·¥µð½ºÅ©¸¦ ÀÐ¾î µéÀÌ´Â Àϵµ ÇÑ´Ù.
(3)
¹Ù·Î Àü±îÁö ½ÇÇàµÇ¸é ÀÌÁ¦ Ä¿³ÎÀÌ ¿ÏÀüÈ÷ ºÎÆÃÇÑ °ÍÀ¸·Î ºÁµµ µÈ´Ù. Ä¿³Î ºÎÆÃ¿¡ »ç¿ëµÈ ¸Þ¸ð¸® Áß ÇÊ¿ä ¾ø´Â °ÍÀ» ¹ÝȯÇÑ´Ù.
(4)
Ãʱâ ÄܼÖÀ» ¿­°í stdin, stdout, stderrÀ» open ÇÑ´Ù.
(5)
ÀÌÁ¦ ¸¶¿îÆ®µÈ ·çÆ® ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ init¸¦ ã¾Æ ½ÇÇàÇØ ÁØ´Ù.
(6)
init¸¦ ãÁö ¸øÇÏ¸é ¿©±â¿Í¼­ Ä¿³ÎÀÇ ºÎÆÃÀÌ ¸ØÃá´Ù. ¿©±â ±îÁö ¿Â´Ù´Â °ÍÀº ¾Æ¸¶µµ ·çÆ® ÆÄÀÏ ½Ã½ºÅÛÀ» ¸¶¿îÆ®ÇÏÁö ¸øÇ߰ųª ·çÆ® ÆÄÀÏ ½Ã½ºÅÛ¿¡ init°¡ ¾ø±â ¶§¹®ÀÏ °ÍÀÌ´Ù.