· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/KBUILD

You are not allowed to 'fullsearch'


kbuild system

kbuild system

³²»ó±Ô

ÀÌ ¹®¼­´Â ¸®´ª½º Ä¿³Î 2.6.x¿¡ »ç¿ëµÇ´Â kbuild System¿¡ ´ëÇØ ¼³¸í ÇÕ´Ï´Ù.

Linux Kernel¼Ò½ºÀÇ Documents/kbuild/makefiles.txt ¹®¼­¸¦ ¹ø¿ªÇÑ °Í¿¡ Áö³ªÁö ¾ÊÀ¸¸ç ¹ø¿ªÀÌ ¸Å²ô·´Áö ¸øÇÏ°í Á÷¿ªÀ» ÇÑ ºÎºÐÀÌ ÀÖÀ¸³ª ÀÌÇØ ¹Ù¶ø´Ï´Ù. ÀÇ¿ªÀ» ÇÏ·Á¸é ÀåȲÇÏ°Ô ¼³¸íÀ» Çϰųª ÇØ¾ß Çϴµ¥ ±×·± Æí º¸´Ù´Â Â÷¶ó¸® ¿ø¹®À» ÀÐ¾î º¸½Ã´Â °ÍÀÌ ³´°Ú´Ü »ý°¢¿¡¼­ ±×·± °ÍÀÔ´Ï´Ù.

¹ø¿ªÀÌ ¸Å²ô·´Áö ¸øÇÑ ºÎºÐÀº ¹Ýµå½Ã ¿ø¹®À» ÀÐ¾î ¿µ¾î ´Ü¾îÀÇ ¶æÀ» ÆľÇÇϽñ⠹ٶø´Ï´Ù.

고친 과정
고침 1.02004-01-06고친이 halite
ÃÖÃÊ ÀÛ¼º

1. ¿À¹öºä

MakefileÀº ¸î°³ÀÇ ºÎºÐÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.

표 1. MakefileÀÇ ±¸¼º

.configÄ¿³Î ¼³Á¤ ÆÄÀÏ
arch/$(ARCH)/Makefile¾ÆÅ°ÅØÃÄ º° Makefile
scripts/Makefile.*¸ðµç kbuild Makefile¿¡ »ç¿ëµÇ´Â ±ÔÄ¢ÀÌ µé¾îÀÖ´Â ÆÄÀÏ
kbuild Makefiles¾à 500°³ Á¤µµ°¡ ÀÖ´Ù

ÃÖ»óÀ§ MakefileÀº Ä¿³Î ¼Ò½º Æ®¸®ÀÇ ·çÆ® µð·ºÅ丮¿¡ ÀÖ´Â MakefileÀ» ¸»ÇÑ´Ù(º¸ÅëÀº /usr/src/linux/Makefile). ±×¸®°í Ä¿³Î ¼³Á¤ ÇÁ·Î¼¼½º·Î ºÎÅÍ Ä¿³Î ¼³Á¤ ÈÄ »ý¼ºµÈ .config¸¦ ÀÐ¾î »ç¿ëÇÑ´Ù.

ÃÖ»óÀ§ MakefileÀº µÎ°³ÀÇ Áß¿äÇÑ °á°ú¹°À» ¸¸µé¾î³½´Ù. ù¹ø°·Î vmlinux(¸Þ¸ð¸®¿¡ »óÁÖÇÏ´Â Ä¿³Î À̹ÌÁö)ÀÌ°í µÎ¹ø°´Â ¸ðµâµéÀÌ´Ù.

ÃÖ»óÀ§ MakefileÀº ÀÌ·± °á°ú¹°À» ¸¸µé±â À§ÇØ Ä¿³Î ¼Ò½º µð·ºÅ丮ÀÇ ÇÏÀ§ µð·ºÅ丮¸¦ ¸®Ä¿½ÃºêÇÏ°Ô Ã£¾Æ µé¾î°¡¸é¼­ ¸¸µé¾î³½´Ù. »ç¿ëµÇ´Â ÇÏÀ§ µð·ºÅ丮´Â Ä¿³Î ¼³Á¤¿¡ µû¶ó ´Þ¶óÁö°í ÃÖ»óÀ§ MakefileÀº arch/$(ARCH)/MakefileÀ» Á÷Á¢ includeÇÑ´Ù(º¸ÅëÀÇ ´Ù¸¥ MakefileÀº make¿¡ ÀÇÇØ ½ÇÇàµÇ¾îÁö´Â ÇüÅÂÁö¸¸ À̰͸¸ ½ÇÇàµÇÁö ¾Ê°í ÃÖ»óÀ§ Makefile¿¡ Á÷Á¢ Æ÷ÇÔµÇ¾î ½ÇÇàµÇ¾îÁø´Ù. ÃÖ»óÀ§ MakefileÀ» ¿­¾îº¸¸é ¾Ë°ÚÁö¸¸ include ¸í·ÉÀÌ »ç¿ëµÈ´Ù). arch MakefileÀº ¾ÆÅ°ÅØÃÄ¿¡ µû¸¥ Á¤º¸¸¦ ÃÖ»óÀ§ Makefile¿¡ Á¦°øÇÑ´Ù.

°¢ ÇÏÀ§ µð·ºÅ丮´Â »óÀ§·ÎºÎÅÍ ¸í·ÉÀ» Àü´ÞÇÏ´Â kbuild MakefileÀ» Çϳª¾¿ °¡Áö°í ÀÖ´Ù. kbuild MakefileÀº built-inÀ̳ª modular Ÿ°ÙÀ» ¸¸µé±â À§ÇØ È¤Àº kbuild°¡ »ç¿ëÇÏ´Â ¸¹Àº º¯¼ö ¸®½ºÆ®¸¦ ¸¸µé±â À§ÇØ .config·ÎºÎÅÍ Á¤º¸¸¦ »ç¿ëÇÑ´Ù (built-inÀº ¸Þ¸ð¸®¿¡ »óÁÖÇÏ°ÔµÉ Ä¿³Î À̹ÌÁöÀÎ vmlinux¿¡ Á÷Á¢ Æ÷ÇÔµÇ¾î ¸µÅ©µÇ´Â °ÍµéÀ» ¸»ÇÏ°í modular´Â ¸ðµâ·Î ¸¸µé¾îÁú ¿ÀºêÁ§Æ®¿¡ ¸µÅ©µÉ °ÍµéÀ» ¸»ÇÑ´Ù).

scripts/Makefile.*Àº kbuild MakefileÀ» ±âº»À¸·ÎÇÏ´Â Ä¿³ÎÀ» ¸¸µå´Âµ¥ »ç¿ëµÇ´Â ¸ðµç Á¤Àdzª ±ÔÄ¢À» ´ã°í ÀÖ´Ù.


2. ´©°¡ ¹«¾ùÀ»?

Ä¿³Î Makefile°ú °ü°è ÀÖ´Â »ç¶÷Àº 5 Á¾·ù°¡ ÀÖ´Ù.

  • »ç¿ëÀÚ

    ´Ü¼øÈ÷ Ä¿³ÎÀ» buildÇØ »ç¿ëÇÏ´Â »ç¶÷ÀÌ´Ù. ÀÌ »ç¶÷Àº ¡°make menuconfig¡±³ª ¡°make¡±¿Í °°Àº ¸í·ÉÀ» ÀÔ·ÂÇÏ´Â »ç¶÷ÀÌ°í ÀϹÝÀûÀ¸·Î´Â Ä¿³Î Makefile(±×¿ÜÀÇ ´Ù¸¥ ¸ðµç ¼Ò½º ÆÄÀϵµ Æ÷ÇÔ)À» Àаųª º¯°æÇÏÁö ¾Ê´Â´Ù.

  • º¸Åë °³¹ßÀÚ

    µð¹ÙÀ̽º µå¶óÀ̹ö³ª ÆÄÀÏ ½Ã½ºÅÛ È¤Àº ³×Æ®¿÷ ÇÁ·ÎÅäÄÝ µîÀ» Á¶Á¤Çϰųª ÇÏ´Â ÀÏÀº ÇÑ´Ù. ÀÌ·± »ç¶÷Àº ÀÚ½ÅÀÌ »ç¿ëÇÏ´Â ÇÏÀ§ ½Ã½ºÅÛ¿¡ ´ëÇÑ kbuild MakefileÀ» °ü¸®ÇÑ´Ù. ÀÌ·± ÀÏÀ» È¿À²ÀûÀ¸·Î Çϱâ À§Çؼ± Ä¿³Î Makefile¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ ÀÌÇØ°¡ ÇÊ¿äÇÏ°í kbuild¿¡ ´ëÇÑ public interfaceÀÇ »ó¼¼ÇÑ °Í°¡Áöµµ ¾Ë°í ÀÖ¾î¾ßÇÑ´Ù.

  • Arch °³¹ßÀÚ

    i386, ppc, armµîÀÇ Àüü ¾ÆÅ°ÅØÃÄ¿¡ °ÉÃÄ ÀÏÀ» ÇÏ´Â »ç¶÷ÀÌ´Ù. ¾ÆÅ°ÅØÃÄ °³¹ßÀÚ´Â kbuild Makefile »Ó¸¸ ¾Æ´Ï¶ó arch Makefileµµ ¾Ë°í ÀÖ¾î¾ßÇÑ´Ù.

  • kbuild °³¹ßÀÚ

    Ä¿³Î build ½Ã½ºÅÛ ÀÚü¸¦ °³¹ßÇÏ´Â »ç¶÷ÀÌ°í Ä¿³Î Makefile ÀüüÀÇ µ¹¾Æ°¡´Â ¹æ½Ä¿¡ ´ëÇÑ ÀÌÇØ°¡ ÇÊ¿äÇÏ´Ù.

À̹®¼­´Â ÀÏ¹Ý °³¹ßÀÚ³ª arch °³¹ßÀÚ¸¦ À§ÇÑ °ÍÀÌ´Ù.

±×·¯³ª Ä¿³Î MakefileÀÌ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Æ´Â °ÍÀÌ ÁÁÀº °æ¿ì°¡ ¸¹´Ù. ´Ü¼øÈ÷ »õ·Î¿î Ä¿³ÎÀ» ÄÄÆÄÀÏÇØ ¼³Ä¡ÇØ »ç¿ëÇÏ´Â »ç¿ëÀÚ°¡ ¾Æ´Ï°í ½Ã½ºÅÛ ¿£Áö´Ï¾î¶ó¸é Ä¿³ÎÀÌ ¾î¶»°Ô ¸¸µé¾îÁö´Â ¾Ë°í ÀÖ´Â °ÍÀÌ µµ¿òÀÌ µÉ ¶§°¡ ¸¹´Ù. ¿¹¸¦ µé¾î ÇöÀç ¼³Á¤¿¡ ÀÇÇØ ¾î¶² ¸ðµâÀÌ ¾î¶² ÆÄÀÏ·Î ÀÌ·ç¾îÁ® ÀÖ´ÂÁö ¾Ë¼ö ÀÖÀ¸¸é ±× ÆÄÀϵéÀ» Á¶»çÇØ ¼öÁ¤Çϰųª ÇÏ´Â ÀÏÀÌ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù.


3. kbuild Makefiles

Ä¿³Î ³»ÀÇ ´ëºÎºÐÀÇ MakefileÀº kbuild ÀÎÇÁ¶ó ½ºÆ®·°Ãĸ¦ »ç¿ëÇÑ´Ù. ÀÌ Àå¿¡¼­´Â kbuild makefileµé¿¡¼­ »ç¿ëµÇ´Â ¹®¹ý¿¡ ´ëÇØ ¼Ò°³ÇÑ´Ù. 3.1ÀåÀº ¡°Goal Á¤ÀÇ¡±¿¡ ´ëÇÑ °£´ÜÇÑ ¼Ò°³°í ±× ÀÌÈÄ Àå¿¡¼­ ´õ ÀÚ¼¼ÇÑ °ÍÀ» ´Ù·ê °ÍÀÌ´Ù.


3.1. Goal Á¤ÀÇ

Goal Á¤ÀÇ´Â kbuild MakefileÀÇ °¡Àå Áß¿äÇÑ ºÎºÐÀÌ´Ù. GoalÀº ¸¸µé¾îÁ®ÇÒ °Í, Ưº°ÇÑ ÄÄÆÄÀÏ ¿É¼Ç, »ç¿ëµÇ¾ßÇÒ ÇÏÀ§µð·ºÅ丮¸¦ Á¤ÀÇÇÑ´Ù. °¡Àå °£´ÜÇÑ kbuild makefileÀº ´ÙÀ½°ú °°Àº ÇÑ ÁÙÀ» °®´Â´Ù.

	¿¹:
		obj-y += foo.o
				
ÀÌ ¿¹°¡ ¸»ÇÏ´Â °ÍÀº ÀÌ µð·ºÅ丮 ³»¿¡ foo.o(foo.c³ª foo.S·ÎºÎÅÍ ¸¸µé¾îÁú)¶õ À̸§ÀÇ ÇÑ°³ÀÇ ¿ÀºêÁ§Æ®°¡ ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸¸¾à foo.o°¡ ¸ðµâ·Î ¸¸µé¾îÁø´Ù¸é obj-mÀ̶õ º¯¼ö°¡ »ç¿ëµÈ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°Àº ¿¹Ã³·³ µÈ´Ù.
	¿¹:
		obj-$(CONFIG_FOO) += foo.o
				
$(CONFIG_FOO)´Â y(built-inÀ» ÀǹÌ)³ª m(¸ðµâÀ» ÀǹÌ)ÀÇ °ªÀ» °®´Â´Ù. ¸¸¾à CONFIG_FOO°¡ y³ª mÀÇ °ªÀ» °®Áö ¾Ê´Â´Ù¸é ÀÌ ÆÄÀÏÀº ÄÄÆÄÀϵǰųª ¸µÅ©µÇÁö ¾Ê´Â´Ù.


3.2. Built-in ¿ÀºêÁ§Æ® Goal (obj-y)

kbuild MakefileÀº $(obj-y) ¸®½ºÆ® ³»¿¡ vmlinux¿¡ ÇÊ¿äÇÑ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ÁöÁ¤ÇØ ³õ´Â´Ù.

kbuild´Â ¸ðµç $(obj-y) ÆÄÀÏÀ» ÄÄÆÄÀÏÇÑ´Ù. ±×¸®°í ÀÌ·± ¸ðµç ÆÄÀÏÀ» ÇϳªÀÇ build-in.o·Î ¸¸µé±â À§ÇØ ¡°$(LD) -r¡±À» ºÎ¸¥´Ù.

$(obj-y)¿¡ ±â·ÏµÈ ÆÄÀÏÀÇ ¼ø¼­´Â ¸Å¿ì Áß¿äÇÏ´Ù. Áߺ¹µÇ¼­ ³ª¿­µÇ´Â °Íµµ Çã¿ëµÇÁö¸¸ ù¹ø°·Î ³ª¿À´Â °ÍÀÌ built-in.o¿¡ ¸µÅ©µÇ°í ±× ÀÌÈÄÀÇ °ÍÀº ¹«½ÃµÈ´Ù.

¾î¶² ±â´É µéÀº(¿¹¸¦ µé¾î module_init()³ª __initcall) ºÎÆÃÇÏ´Â µ¿¾È ³ªÅ¸³ª´Â ¼ø¼­´ë·Î ºÒ·ÁÁö±â ¶§¹®¿¡ ¸µÅ© ¼ø¼­µµ Áß¿äÇÏ´Ù. ±×·¡¼­ ¼ø¼­¸¦ ¹Ù²Ù°ÔµÇ¸é µð½ºÅ© µîÀÇ µå¶óÀ̹ö°¡ »ç¿ëµÇ´Â ¼ø¼­°¡ ¹Ù²î´Â µîÀÇ ÀÏ ¶§¹®¿¡ µð½ºÅ©ÀÇ ¹øÈ£µµ ¹Ù²ð¼ö ÀÖ´Ù.

	¿¹:
		#drivers/isdn/i4l/Makefile
		# Makefile for the kernel ISDN subsystem and device drivers.
		# Each configuration option enables a list of files.
		obj-$(CONFIG_ISDN) += isdn.o
		obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
			

3.3. Loadable module goals(obj-m)

$(obj-m)Àº ÀûÀç °¡´ÉÇÑ ¸ðµâÀ» ¸¸µé ¶§ »ç¿ëµÈ´Ù.

¸ðµâÀº ÇϳªÀÇ ¼Ò½º Äڵ峪 ¿©·¯ °³ÀÇ ¼Ò½º Äڵ忡¼­ ¸¸µé¾îÁú ¼ö ÀÖ´Ù. ÇϳªÀÇ ¼Ò½º ÄÚµå·Î ¸¸µé¾îÁö´Â °æ¿ì¿£ ±×³É $(obj-m)¿¡ ´õÇϱ⸸ ÇÏ¸é µÈ´Ù.

	¿¹:
		#drivers/isdn/i4l/Makefile
		obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o

	Note: ÀÌ ¿¹¿¡¼­ $(CONFIG_ISDN_PPP_BSDCOMP)´Â 'm'À» ³ªÅ¸³½´Ù.
			

¸¸¾à Ä¿³Î ¸ðµâÀÌ ¿©·¯ °³ÀÇ ¼Ò½º ÆÄÀϷκÎÅÍ ¸¸µé¾îÁö¸é À§¿¡ ³ª¿Â °Í°ú °°Àº ¹æ½ÄÀ¸·Î ÁöÁ¤ÇϸéµÈ´Ù.

kbuild´Â ¸¸µé°íÀÚÇÏ´Â ¸ðµâÀÌ ¾î´À ºÎºÐ¿¡¼­ ¿À´ÂÁö¸¦ ¾Ë¸éµÇ°í $(<module_name>-objs)¿¡ ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù.

	¿¹:
		#drivers/isdn/i4l/Makefile
		obj-$(CONFIG_ISDN) += isdn.o
		isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
			

ÀÌ ¿¹¿¡¼­ ¸ðµâ À̸§Àº isdn.oÀÌ°í kbuild´Â $(isdn-objs)¾È¿¡ ÀÖ´Â ¿ÀºêÁ§Æ®¸¦ ÄÄÆÄÀÏ ÇÑ ÈÄ¿¡ ¡°$(LD) -r¡±À» ½ÇÇàÇØ isdn.o¸¦ ¸¸µé¾î³½´Ù.

kbuild´Â ¿ÀºêÁ§Æ®¸¦ Á¢¹Ì»ç -objs¿Í -y¿¡ ÀÇÇØ ¸¸µé¾îÁö´Â º¹ÇÕ ¿ÀºêÁ§Æ®·Î ÀνÄÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ¿ÀºêÁ§Æ®°¡ º¹ÇÕ ¿ÀºêÁ§Æ®ÀÇ ÀϺζó¸é MakefileÀÌ CONFIG_ °ªÀ» »ç¿ëÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù.

	¿¹:
		#fs/ext2/Makefile
		obj-$(CONFIG_EXT2_FS) += ext2.o
		ext2-y := balloc.o bitmap.o
		ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
			

ÀÌ ¿¹¿¡¼± xattr.o´Â $(CONFIG_EXT2_FS_XATTR)ÀÌ 'y'ÀÎ °æ¿ì¿¡¸¸ º¹ÇÕ ¿ÀºêÁ§Æ®ÀÎ ext2.oÀÇ ÀϺΠ»ÓÀÌ´Ù.

Note: ¹°·Ð Ä¿³Î ¾È¿¡ ¸ðµâÀ» Æ÷ÇÔÇÏ´Â °æ¿ì¿¡µµ À§¿Í °°Àº ¹®¹ýÀº ±×´ë·Î Àû¿ëµÈ´Ù. ±×·¡¼­ CONFIG_EXT2_FS=yÀÎ °æ¿ì kbuild´Â ext2.o ÆÄÀÏÀ» ¸¸µé¾î built-in.o¿¡ ¸µÅ©ÇϰԵȴÙ.


3.4. 3.4. ½Éº¼À» exportÇÏ´Â ¿ÀºêÁ§Æ®

½Éº¼À» exportÇÏ´Â ¸ðµâ¿¡ ´ëÇÑ Æ¯º°ÇÑ ¿ä±¸ »çÇ× °°Àº °ÍÀº ¾ø´Ù. Ä¿³Î ¼Ò½º µð·ºÅ丮ÀÇ Documentation/modules.txt¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.


3.5. ¶óÀ̺귯¸® Goal(lib-y)

obj-*·Î ÁöÁ¤µÈ ¿ÀºêÁ§Æ® µéÀº ¶óÀ̺귯¸® (lib.a¿Í °°Àº °Í)¿¡ Æ÷Ç﵃ ¼öµµ ÀÖ´Ù. lib-y¿¡ ÁöÁ¤µÈ ¸ðµç ¿ÀºêÁ§Æ®´Â ±× µð·ºÅ丮¿¡¼­ ÇϳªÀÇ ¶óÀ̺귯¸®·Î ¸¸µé¾îÁø´Ù. obj-y¿Í lib-y¿¡ µ¿½Ã ÁöÁ¤µÈ ¿ÀºêÁ§Æ®´Â ¶óÀ̺귯¸®¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ±×·¸Áö¸¸ ÀÌ ¿ÀºêÁ§Æ® µéÀº ¾î·µç Á¢±Ù °¡´ÉÇÏ°Ô µÈ´Ù. °°Àº ½ÄÀ¸·Î lib-m¿¡ ÁöÁ¤µÈ ¿ÀºêÁ§Æ®´Â lib.a¿¡ Æ÷ÇԵȴÙ.

¶§·Î´Â °°Àº kbuild makefileÀÌ built-in°ú ¶óÀ̺귯¸®¸¦ µ¿½Ã¿¡ ÁöÁ¤ÇÒ ¼öµµÀÖ´Ù. ÀÌ·± °æ¿ì¿£ °°Àº µð·ºÅ丮¿¡ built-in.o¿Í lib.a µÑ´Ù Á¸ÀçÇÒ ¼öµµ ÀÖ´Ù.

	¿¹:
		#arch/i386/lib/Makefile
		lib-y := checksum.o delay.o
			

ÀÌ ¿¹Á¦´Â checksum.o¿Í delay.o¸¦ ±â¹ÝÀ¸·ÎÇÏ´Â lib.a¸¦ ¸¸µç´Ù.

º¸Åë lib-yÀÇ »ç¿ëÀº lib/¿Í arch/*/lib µð·ºÅ丮¿¡ ÇÑÇÑ´Ù.


3.6. ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡±â

MakefileÀº ±×°ÍÀÌ ¼ÓÇÑ µð·ºÅ丮¸¸À» Ã¥ÀÓÁø´Ù. ÇÏÀ§ µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀϵéÀº ±× ÇÏÀ§ µð·ºÅ丮¿¡ ÀÖ´Â ´Ù¸¥ Makefile¿¡ ÀÇÇØ °ü¸®µÈ´Ù. ºôµå ½Ã½ºÅÛÀº ÀÚµ¿ÀûÀ¸·Î ÇÏÀ§ µð·ºÅ丮¸¦ ¸®Ä¿½ÃºêÇÏ°Ô ºÎ¸¥´Ù.

±×·¸°Ô Çϱâ À§Çؼ­ obj-y¿Í obj-mÀÌ »ç¿ëµÈ´Ù. ¿øÇÏ´Â µð·ºÅ丮 À̸§ µÚ¿¡ /¸¦ ºÙ¿© ÀÌ·¸°Ô ÇÑ´Ù. ext2¶ó´Â ¸ðµâÀº ¿©·¯ µð·ºÅ丮¿¡ °ÉÃÄ ÀÖ°í fs/¿¡ MakefileÀÌ ÀÖ´Ù. ÀÌ MakefileÀº kbuild¿¡°Ô ¾Æ·¡¿Í °°Àº ÇÒ´çÀ» µ¿ÇØ ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡µµ·Ï ÇÑ´Ù.

	¿¹:
		#fs/Makefile
		obj-$(CONfIG_EXT2_FS) += ext2/
			

CONFIG_EXT2_FS°¡ 'y'³ª 'm'À̸é obj- º¯¼ö´Â ¼¼Æ®µÇ°í kbuild´Â ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡°Ô µÈ´Ù. kbuild´Â ÀÌ Á¤º¸¸¦ ´Ù¸¥ µð·ºÅ丮¸¦ ¹æ¹®ÇؾßÇÏ´ÂÁö °áÁ¤Çϴµ¥¸¸ »ç¿ëÇÑ´Ù. Áï ÇÏÀ§ µð·ºÅ丮ÀÇ Makefile¿¡°Ô ¹«¾ùÀÌ ¸ðµâÀÌ°í ¹«¾ùÀÌ built-inÀÎÁö ÁöÁ¤ÇÑ´Ù.

CONFIG_ º¯¼ö¸¦ »ç¿ëÇØ µð·ºÅ丮 À̸§À» ³ªÅ¸³»µµ·Ï ÇÏ´Â °ÍÀº ÁÁÀº ¹æ¹ýÀÌ´Ù. ÀÌ·¸°Ô Çϸé 'y'³ª 'm'ÀÌ ¾Æ´Ñ ÀÌ»ó¿£ ±× µð·ºÅ丮¸¦ ¿ÏÀüÈ÷ ¹«½ÃÇÏ°Ô ÇÒ ¼öÀÖ´Ù.


3.7. ÄÄÆÄÀÏ Ç÷¡±×

EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS, EXTRA_ARFLAGS

¸ðµç EXTRA_ º¯¼ö´Â ÁöÁ¤µÇ¾î ÀÖ´Â kbuild makefile¿¡¸¸ Àû¿ëµÇ°í ±× makefileÀÇ ¸ðµç ½ÇÇàµÇ´Â ¸í·É¿¡ Àû¿ëµÈ´Ù.

  • $(EXTRA_CFLAGS)

    $(CC)·Î ÄÄÆÄÀÏ ÇÏ´Â C ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù.

    	¿¹:
    		# drivers/sound/emu10k1/Makefile
    		EXTRA_CFLAGS += -I$(obj)
    		ifdef DEBUG
    			EXTRA_CFLAGS += -DEMU10K1_DEBUG
    		endif
    					

    ÃÖ»óÀ§ MakefileÀº $(CFLAGS)¸¦ °¡Áö°í ÀÖ°í Àüü Æ®¸®¿¡ ´ëÇÑ ÄÄÆÄÀÏ Ç÷¡±×·Î »ç¿ëµÇ¹Ç·Î ÀÌ º¯¼ö°¡ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

  • $(EXTRA_AFLAGS)

    ¾î¼Àºí¸® Äڵ带 ÄÄÆÄÀÏ ÇÒ ¶§ ÇÊ¿äÇÑ µð·ºÅ丮 º° ¿É¼ÇÀÌ´Ù.

    	¿¹:
    		#arch/x86_64/kernel/Makefile
    		EXTRA_AFLAGS := -traditional
    					

    $(EXTRA_LDFLAGS)¿Í $(EXTRA_ARFLAGS)´Â $(LD)¿Í $(AR)À» À§ÇÑ µð·ºÅ丮 º° ¿É¼ÇÀÌ´Ù.

    	¿¹:
    		#arch/m68k/fpsp040/Makefile
    		EXTRA_LDFLAGS := -x
    					

CFLAGS_$@, AFLAGS_$@

CFLAGS_$@¿Í AFLAGS_$@´Â ÇöÀç kbuild makefile ³»ÀÇ ¸í·É¿¡¸¸ Àû¿ëµÈ´Ù.

  • $(CFLAGS_$@)

    $(CC)¿¡ ´ëÇÑ µð·ºÅ丮 º° ¿É¼ÇÀÌ´Ù. $@´Â ¹®ÀÚ °ªÀ» ³ªÅ¸³»°í ÆÄÀÏÀ» ÁöÁ¤ÇÑ´Ù.

    	¿¹:
    		# drivers/scsi/Makefile
    		CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
    		CFLAGS_gdth.o = -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ -DGDTH_STATISTICS
    		CFLAGS_seagate.o = -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
    					

    ÀÌ 3ÁÙÀº aha152x.o, gdth.o, seagate.o¿¡ ´ëÇÑ ÄÄÆÄÀÏ Ç÷¡±×¸¦ °¢°¢ ÁöÁ¤ÇÏ°í ÀÖ´Ù.

  • $(AFLAGS_$@)

    ¾î¼Àºí¸® ¾ð¾î ¼Ò½º ÆÄÀÏ¿¡ ´ëÇÑ ¿É¼ÇÀÌ´Ù.

    	¿¹:
    		# arch/arm/kernel/Makefile
    		AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
    		AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional
    					

3.8. ÀÇÁ¸¼º ÃßÀû

kbuild´Â ´ÙÀ½°ú °°Àº ÀÇÁ¸¼ºÀ» ÃßÀûÇÑ´Ù.

  • ¸ðµç ¹Ì¸® ÁöÁ¤µÈ(prerequisite) ÆÄÀÏ (*.c¿Í *.h ¸ðµÎ)

  • ¸ðµç ¹Ì¸® ÁöÁ¤µÈ ÆÄÀÏ¿¡ ´ëÇØ »ç¿ëµÈ CONFIG_ ¿É¼Ç

  • ÄÄÆÄÀÏ Å¸°Ù¿¡ »ç¿ëµÈ Ä¿¸Çµå ¶óÀÎ

±×·¡¼­ $(CC)¿¡ ´ëÇÑ ¿É¼ÇÀÌ ¹Ù²î¸é °ü·ÃµÈ ¸ðµç ÆÄÀÏÀº ÀçÄÄÆÄÀÏ µÈ´Ù.


3.9. Ưº° ±ÔÄ¢

Ưº°ÇÑ ±ÔÄ¢Àº kbuild ÀÎÇÁ¶ó ½ºÆ®·°ÃÄ°¡ ÇÊ¿ä·Î ÇÏ´Â ±â´ÉÀ» Á¦°øÇÏÁö ¸øÇÒ ¶§ »ç¿ëÇÑ´Ù. ´ëÇ¥ÀûÀÎ ¿¹°¡ ºôµå µ¿¾È »ý¼ºµÇ´Â Çì´õ ÆÄÀÏ °°Àº °ÍÀÌ´Ù. ´Ù¸¥ ¿¹´Â ¾ÆÅ°ÅØÃÄ¿¡ µû¶ó ºÎÆ® À̹ÌÁö µîÀ» Áغñµî¿¡ ÇÊ¿äÇÑ Æ¯º°ÇÑ ±ÔÄ¢À» ÇÊ¿ä·Î ÇÏ´Â °æ¿ì´Ù.

Ưº° ±ÔÄ¢Àº º¸ÅëÀÇ make ±ÔÄ¢À» »ç¿ëÇØ ¾º¾îÁö°í MakefileÀÌ Á¸ÀçÇÏ´Â °÷¿¡¼­´Â kbuild°¡ ½ÇÇàµÇÁö ¾Ê´Â´Ù. ±×·¡¼­ ¸ðµç Ưº° ±ÔÄ¢Àº ÇÊ¿äÇÑ ÆÄÀÏÀ̳ª Ÿ°Ù ÆÄÀÏ¿¡ ´ëÇÑ »ó´ë °æ·Î(relative path)¸¦ Á¦°øÇؾ߸¸ ÇÑ´Ù.

Ưº° ±ÔÄ¢À» Á¤ÀÇÇÒ ¶§ »ç¿ëµÇ´Â µÎ°¡ÁöÀÇ º¯¼ö:

  • $(src)

    $(src)´Â MakefileÀÌ À§Ä¡ÇÏ°í ÀÖ´Â µð·ºÅ丮¸¦ °¡¸®Å°´Â »ó´ë °æ·Î´Ù. ¼Ò½º Æ®¸®¿¡ Á¸ÀçÇÏ´Â ¸ðµç ÆÄÀÏÀ» °¡¸®Å³ ¶© Ç×»ó $(src)¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

  • $(obj)

    $(obj)´Â ŸÄÏÀÌ ÀúÀåµÇ´Â µð·ºÅ丮¸¦ °¡¸®Å°´Â »ó´ë °æ·Î´Ù. ÀÏ¹Ý ÀûÀÎ ÆÄÀÏÀ» °¡¸®Å³ ¶© Ç×»ó $(obj)¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

    	¿¹:
    		#drivers/scsi/Makefile
    		$(obj)/53c8xx_d.h: $(src)/53c7,8xx.scr $(src)/script_asm.pl
    			$(CPP) -DCHIP=810 - < $< | ... $(src)/script_asm.pl
    						

    ÀÌ ¿¹´Â ÀÏ¹Ý ¹®¹ýÀ» »ç¿ëÇϴ Ưº° ±ÔÄ¢ÀÌ´Ù. Ÿ°Ù ÆÄÀÏÀº µÎ°³ÀÇ ¹ÌÁö ÁöÁ¤µÈ ÆÄÀÏ¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀ» °®°í ÀÖ´Ù. Ÿ°Ù ÆÄÀÏÀº $(obj)¸¦ »ç¿ëÇÏ°í ¹Ì¸® ÁöÁ¤µÈ ÆÄÀÏÀº ÀÏ¹Ý ÆÄÀÏÀÌ ¾Æ´Ï±â ´ë¹®¿¡ $(src)¸¦ »ç¿ëÇÑ´Ù.


4. È£½ºÆ® ÇÁ·Î±×·¥ Áö¿ø

kbuild´Â ÄÄÆÄÀÏ ½ºÅ×ÀÌÁö µ¿¾È »ç¿ëµÇ´Â È£½ºÆ® »ó¿¡¼­ µ¹¾Æ°¡´Â ÇÁ·Î±×·¥À» ¸¸µé±âµµ ÇÑ´Ù. È£½ºÆ® ½ÇÇà ÆÄÀÏÀ» ¸¸µé±â À§Çؼ± µÎ ½ºÅÜÀÇ ÀýÂ÷°¡ ÇÊ¿äÇÏ´Ù.

ù¹ø° ½ºÅÜÀº kbuild¿¡°Ô È£½ºÆ® ÇÁ·Î±×·¥ÀÌ Á¸ÀçÇÑ´Ù°í ¾Ë¸®´Â °ÍÀÌ´Ù. ÀÌ°Ç host-prog¸¦ »ç¿ëÇØ ÇÑ´Ù. µÎ¹øÀç ½ºÅÜÀº ½ÇÇà ÆÄÀÏ¿¡ ´ëÇÑ Á¤È®ÇÑ ÀÇÁ¸¼ºÀ» ´õÇØÁÖ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ±ÔÄ¢¿¡ ÀÇÁ¸¼ºÀ» ´õÇϰųª $(always) º¯¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù.


4.1. °£´ÜÇÑ È£½ºÆ® ÇÁ·Î±×·¥

¶§·Î´Â ºôµå°¡ ½ÇÇàµÇ´Â ÄÄÇ»ÅÍ »ó¿¡¼­ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÏ°í ½ÇÇàÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾Æ·¡ ¿¹´Â kbuild¿¡°Ô bin2hex¸¦ È£½ºÆ®¿¡¼­ ¸¸µé¶ó°í ¾Ë·ÁÁØ´Ù.

	¿¹:
		host-progs := bin2hex
			

kbuild´Â bin2hex°¡ Makefile°ú °°Àº µð·ºÅ丮¿¡ ÀÖ´Â bin2hex.c¶ó´Â ÇϳªÀÇ ¼Ò½º ÆÄÀÏ¿¡¼­ ¸¸µé¾îÁø´Ù°í °¡Á¤ÇÑ´Ù.


4.2. º¹ÇÕÀûÀΠȣ½ºÆ® ÇÁ·Î±×·¥

È£½ºÆ® ÇÁ·Î±×·¥Àº ¿©·¯ °³ÀÇ ¿ÀºêÁ§Æ®·Î ±¸¼ºµÉ¼öµµ ÀÖ´Ù. º¹ÇÕ ¿ÀºêÁ§Æ®¸¦ Á¤ÀÇÇÏ´Â ¹®¹ýÀº Ä¿³Î ¿ÀºêÁ§Æ®¿¡ »ç¿ëµÈ ¹®¹ý°ú ºñ½ÁÇÏ´Ù. $(<executeable>-objs)´Â ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀ» ±¸¼ºÇÏ´Â ¿ÀºêÁ§Æ®¸¦ ³ªÅ¸³½´Ù.

	¿¹:
		#scripts/lxdialog/Makefile
		host-progs    := lxdialog  
		lxdialog-objs := checklist.o lxdialog.o
			

.o È®ÀåÀÚ¸¦ °®´Â ¿ÀºêÁ§Æ®´Â ±×¿¡ »óÀÀÇÏ´Â .c ÆÄÀÏ·Î ºÎÅÍ ÄÄÆÄÀϵȴÙ. À§ÀÇ ¿¹¿¡¼± checklist.c°¡ ÄÄÆÄÀÏ µÇ checklist.o¸¦ ¸¸µç´Ù. ÃÖÁ¾ÀûÀ¸·Î µÎ°³ÀÇ .o ÆÄÀÏÀÌ ÇϳªÀÇ ½ÇÇà ÆÄÀÏÀÎ lxdialog·Î ¸µÅ©µÈ´Ù.

Note: <executable>-y¿Í °°Àº ¹®¹ýÀº È£½ºÆ® ½ÇÇà ÆÄÀÏ¿¡´Â Àû¿ëµÇÁö ¾Ê´Â´Ù.


4.3. °øÀ¯ ¶óÀ̺귯¸® Á¤ÀÇ

.so È®ÀåÀÚ¸¦ °°´Â ¿ÀºêÁ§Æ®´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ³ªÅ¸³»°í À§Ä¡¿¡ »ó°ü ¾ø´Â ¿ÀºêÁ§Æ®·Î ÄÄÆÄÀÏ µÈ´Ù. kbuild´Â °íÀ¯ ¶óÀ̺귯¸®¸¦ Á¦°øÇÏÁö¸¸ »ç¿ëÀº Á¦ÇÑ µÇ¾î ÀÖ´Ù. ¾Æ·¡ ¿¹¿¡¼­ conf¶ó´Â ½ÇÇà ÆÄÀÏÀ» ¸µÅ©Çϱâ À§ÇØ libkconfig.so°¡ »ç¿ëµÈ´Ù.

	¿¹:
		#scripts/kconfig/Makefile
		host-progs      := conf
		conf-objs       := conf.o libkconfig.so
		libkconfig-objs := expr.o type.o
				

°øÀ¯ ¶óÀ̺귯¸®´Â ¾ðÁ¦³ª ±×¿¡ »óÀÀÇÏ´Â -objs ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ±×¸®°í À§ ¿¹Á¦¿¡¼­ libkconfig´Â µÎ°³ÀÇ ¿ÀºêÁ§Æ® expr.o¿Í type.o·ÎºÎÅÍ ¸¸µé¾îÁø´Ù. expr.o¿Í type.o´Â À§Ä¡ µ¶¸³ ÀûÀÎ ÄÚµå·Î ¸¸µé¾îÁö°í libkconfig.so·Î ¸µÅ©µÈ´Ù. C++Àº °øÀ¯ ¶óÀ̺귯¸®¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù.


4.4. È£½ºÆ® ÇÁ·Î±×·¥¿¡ C++ »ç¿ëÇϱâ

kbuild´Â C++·Î ÀÛ¼ºµÈ È£½ºÆ® ÇÁ·Î±×·¥À» Áö¿øÇÑ´Ù. ÀÌ°ÍÀº kconfig¸¦ À§ÇØ ¼Ò°³µÇÁö¸¸ ÀϹÝÀûÀÎ »ç¿ë¿¡¼­´Â ÃßõÇÏÁö ¾Ê´Â´Ù.

	¿¹:
		#scripts/kconfig/Makefile
		host-progs	:= qconf
		qconf-cxxobjs	:= qconf.o
				

¿¹Á¦¿¡¼­ ½ÇÇà ÆÄÀÏÀº C++ÆÄÀÏÀÎ qconf.cc·Î ÀÛ¼ºµÇ¾î ÀÖ°í $(qconf-cxxobjs)·Î Á¤ÀǵȴÙ. ¸¸¾à qconf°¡ .c¿Í .cc ÆÄÀÏ·Î ÀÌ·ïÁ® ÀÖ´Ù¸é À̸¦ ±¸ºÐÇϱâ À§ÇØ Ãß°¡ ÁÙÀÌ ´õ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù.

	¿¹:
		#scripts/kconfig/Makefile
		host-progs	:= qconf
		qconf-cxxobjs	:= qconf.o
		qconf-objs	:= check.o
				

4.5. È£½ºÆ® ÇÁ·Î±×·¥¿ë ÄÄÆÄÀÏ·¯ ¿É¼Ç ¼³Á¤

È£½ºÆ® ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÏ´Â µ¿¾È¿¡ Ưº°ÇÑ Ç÷¡±×°¡ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù. ÇÁ·Î±×·¥Àº ¾ðÁ¦³ª $(HOSTCC)¸¦ »ç¿ëÇØ ÄÄÆÄÀÏ µÇ¹Ç·Î $(HOSTCFLAGS)¸¦ »ç¿ëÇÏ¸é µÈ´Ù. Makefile¿¡ÀÇÇØ ¸¸µé¾îÁö´Â ¸ðµç È£½ºÆ® ÇÁ·Î±×·¥¿¡ °ÉÃÄ ¿µÇâÀ» ÁÖ´Â Ç÷¡±×¸¦ ¼¼ÆÃÇϱâ À§Çؼ± HOST_EXTRACFLAGS º¯¼ö¸¦ »ç¿ëÇÑ´Ù.

	¿¹:
		#scripts/lxdialog/Makefile
		HOST_EXTRACFLAGS += -I/usr/include/ncurses
				

ÇÑ°³ÀÇ ÆÄÀÏ ¸¸À» À§ÇÑ Ç÷¡±×´Â ¾Æ·¡¿Í °°Àº ¹æ¹ýÀ¸·Î ÇÑ´Ù.

	¿¹:
		#arch/ppc64/boot/Makefile
		HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE)
				

¾Æ·¡ ¿¹Á¦´Â ¸µÄ¿¿¡°Ô Ưº°ÇÑ ¿É¼ÇÀ» Ãß°¡ ÁöÁ¤ÇØÁØ´Ù.

	¿¹:
		#scripts/kconfig/Makefile
		HOSTLOADLIBES_qconf := -L$(QTDIR)/lib
				

qconf¸¦ ¸µÅ©ÇÒ ¶§ Ưº° ¿É¼ÇÀÎ ¡°-L$(QTDIR)/lib¡±ÀÌ Àü´ÞµÈ´Ù.


4.6. È£½ºÆ® ÇÁ·Î±×·¥ÀÌ ½ÇÁ¦·Î ¸¸µé¾îÁú ¶§

kbuild´Â È£½ºÆ® ÇÁ·Î±×·¥ÀÌ Á¤È®ÇÏ°Ô ¹Ì¸® ÁöÁ¤µÆÀ» °æ¿ì¿¡¸¸ ¸¸µç´Ù. ÀÌ·± °æ¿ì´Â µÎ°¡Áö°¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù.

  1. Ưº°ÇÑ ±ÔÄ¢ ³»¿¡ ¸íÈ®ÇÏ°Ô ¹Ì¸® ÁöÁ¤µÈ ÆÄÀÏÀ» ³ª¿­ÇÑ´Ù.

    	¿¹:
    		#drivers/pci/Makefile
    		host-progs := gen-devlist
    		$(obj)/devlist.h: $(src)/pci.ids $(obj)/gen-devlist
    			( cd $(obj); ./gen-devlist ) < $<
    						

    Ÿ°Ù $(obj)/devlist.h´Â $(obj)/gen-devlist°¡ ¾÷µ¥ÀÌÆ® µÇ±â Àü¿¡´Â ¸¸µé¾îÁöÁö ¾Ê´Â´Ù. Ưº° ±ÔÄ¢¿¡¼­ È£½ºÆ® ÇÁ·Î±×·¥¿¡ ´ëÇÑ ·¹ÆÛ·±½º´Â $(obj)·Î ½ÃÀÛÇؾ߸¸ ÇÑ´Ù.

  2. $(always) »ç¿ë

    Àû´çÇÑ Æ¯º° ±ÔÄ¢ÀÌ ¾ø´Â °æ¿ì¿£ makefile¿¡¼­ È£½ºÆ® ÇÁ·Î±×·¥ÀÌ ¸¸µé¾îÁú ¶§ $(always) º¯¼ö°¡ »ç¿ëµÈ´Ù.

    	¿¹:
    		#scripts/lxdialog/Makefile
    		host-progs    := lxdialog
    		always        := $(host-progs)
    							
    ÀÌ ¿¹Á¦´Â kbuild¿¡°Ô ¾î´À ±ÔÄ¢¿¡µµ ¾ð±ÞµÇÁö ¾Ê¾ÒÁö¸¸ lxdialog¸¦ ¸¸µéµµ·Ï ÇÑ´Ù.


5. kbuild clean ÀÎÇÁ¶ó ½ºÆ®·°ÃÄ

"make clean"Àº Ä¿³ÎÀÌ ÄÄÆÄÀÏ µÇ´Â ¼Ò½º Æ®¸® ³»¿¡¼­ »ý¼ºµÈ(È£½ºÆ® ÇÁ·Î±×·¥ Æ÷ÇÔ) ¸ðµç ÆÄÀÏÀ» Áö¿î´Ù. $(host-progs), $(always), $(extra-y)¿¡ ÁöÁ¤µÈ ¸ðµç Ÿ°ÙÀÌ Áö¿öÁø´Ù. "*.[oas]", "*.ko"¿Í kbuild¿¡ ÀÇÇØ ¸¸µé¾îÁø ¾à°£ÀÇ Ãß°¡ ÆÄÀÏÀÌ Áö¿öÁø´Ù.

Ãß°¡ ÆÄÀÏÀº $(clean-files)¿¡ ÁöÁ¤µÈ´Ù.

	¿¹:
		#drivers/pci/Makefile
		clean-files := devlist.h classlist.h
		

"make clean"À» ½ÇÇà ÇÏ¸é µÎ°³ÀÇ ÆÄÀÏ ¡°devlist.h classlist.h¡±°¡ Áö¿öÁö°í kbuild´Â $(clean-files)¿¡ ÁöÁ¤µÈ ÀÌ µÎ ÆÄÀÏÀ» makefileÀÌ ÀÖ´Â µð·ºÅ丮¿¡¼­ ã´Â´Ù.

º¸Åë kbuild´Â ¡°obj-* := dir/¡±¿¡ ÀÇÇØ ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡Áö¸¸ ¾ÆÅ°ÅØÃÄ º° makefile¿¡¼­´Â ÀÌ°Ô ÃæºÐÇÏÁö ¾Ê¾Æ ¶§·Î´Â Á¤È®ÇÏ°Ô ÁöÁ¤ÇؾßÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

	¿¹:
		#arch/i386/boot/Makefile
		subdir- := compressed/
		

À§ÀÇ ¿¹Á¦´Â ¡°make clean¡±ÀÌ ½ÇÇàµÉ ¶§ compressed/ µð·ºÅ丮·Î ³»·Á°¡¼­ Áö¿ì¶õ °ÍÀ» °¡¸£ÃÄÁÖ°í ÀÖ´Ù.

ÃÖÁ¾ ºÎÆ® À̹ÌÁö¸¦ ¸¸µå´Â Makefile¿¡¼­ Áö¿ì±â¸¦ Áö¿øÇϱâ À§Çؼ± archclean:À̶õ À̸§ÀÇ Å¸°ÙÀ» »ç¿ëÇÑ´Ù.

	¿¹:
		#arch/i386/Makefile
		archclean:
			$(Q)$(MAKE) $(clean)=arch/i386/boot
		

"make clean"ÀÌ ½ÇÇàµÇ°í arch/i386/boot·Î ³»·Á°¡¸é °Å±â µé¾îÀÖ´Â MakefileÀº ÇÏÀ§ µð·ºÅ丮·Î ´õ ³»·Á°¡±â À§ÇØ subdir- Æ®¸¯À» »ç¿ëÇÑ´Ù.

Note 1: arch/$(ARCH)/MakefileÀº ÃÖ»óÀ§ Makefile¿¡ Æ÷ÇԵǹǷΠ¡°subdir-¡±À» »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×¸®°í ÃÖ»óÀ§ Makefile¿¡¼­´Â kbuild ÀÎÇÁ¶ó ½ºÆ®·°ÃÄ°¡ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.

Note 2: core-y, libs-y, drivers-y, net-y¿¡ ³ª¿­µÈ ¸ðµç µð·ºÅ丮´Â ¡°make clean¡± µ¿¾È ¸ðµÎ ¹æ¹®µÈ´Ù.


6. ¾ÆÅ°ÅØÃÄ Makefiles

ÃÖ»óÀ§ MakefileÀº °¢ µð·ºÅ丮·Î ³»·Á°¡±â Àü¿¡ ȯ°æÀ» ¼³Á¤ÇÏ°í Áغñ¸¦ ÇÑ´Ù. ÃÖ»óÀ§ MakefileÀº ÀϹÝÀûÀÎ ºÎºÐÀ» °¡Áö°í ÀÖ°í arch/$(ARCH)/MakefileÀÌ ¾ÆÅ°ÅØÃÄ¿¡ µû¸¥ kbuild¸¦ ¼Â¾÷Çϴµ¥ ÇÊ¿äÇÑ °ÍÀ» ´ã°í ÀÖ´Ù. ÀÌ·¸°Ô Çϱâ À§Çؼ­ ÃÖ»óÀ§ Makefile¿¡ Æ÷ÇԵǴ arch/$(ARCH)/MakefileÀº ¸î°¡Áö º¯¼ö¿Í Ÿ°ÙÀ» Á¤ÀÇÇÑ´Ù.

kbuild°¡ ½ÇÇàµÉ ¶§ ´ë·« ´ÙÀ½°ú °°Àº ÀýÂ÷¸¦ °ÅÄ£´Ù.

  1. Ä¿³Î ¼³Á¤

    .config¸¦ ¸¸µé¾î ³¿

  2. Ä¿³Î ¹öÀüÀ» include/linux/version.h¿¡ ÀúÀå

  3. include/asm-$(ARCH)¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µç´Ù

  4. ±× ¿ÜÀÇ ´Ù¸¥ ¸ðµç Ÿ°ÙÀ» ÁغñÇÑ´Ù

    ÇÊ¿äÇÑ °ÍÀº arch/$(ARCH)/Makefile¿¡¼­ ÁöÁ¤µÈ´Ù.

  5. ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¨

    init-* core* driver-* net-* libs-*°ú ¸ðµç Ÿ°ÙÀ» ¸¸µë

    À§ÀÇ º¯¼ö °ªÀº arch/$(ARCH)/Makefile¿¡¼­ È®ÀåµÈ´Ù.

  6. ¸ðµç ¿ÀºêÁ§Æ®´Â ¸µÅ©µÇ°í ¼Ò½º Æ®¸®ÀÇ ·çÆ® µð·ºÅ丮¿¡ vmlinux¸¦ ¸¸µé¾î ³½´Ù

    Head-y¿Í arch/$(ARCH)/Makefile¿¡ ÁöÁ¤µÈ ¿ÀºêÁ§Æ®°¡ °¡Àå ¸ÕÀú ¸µÅ©µÈ´Ù.

  7. ¸¶Áö¸·À¸·Î Æ÷½ºÆ® ÇÁ·Î¼¼½ÌÀ̳ª ÃÖÁ¾ ºÎÆ® À̹ÌÁö¸¦ ¸¸µé±â À§ÇÑ ¾ÆÅ°ÅØÃÄ¿¡ µû¸¥ ºÎºÐÀÌ ½ÇÇàµÈ´Ù

    ºÎÆ® ·¹Äڵ带 ¸¸µå´Â ÀÏ°ú initrd À̹ÌÁö¿Í °°Àº °ÍÀ» ¸¸µå´Â ÀÏÀÌ Æ÷ÇԵȴÙ.


6.1. ¾ÆÅ°ÅØÃÄ ºôµå¸¦ ¼öÁ¤Çϱâ À§ÇÑ º¯¼ö ¼¼ÆÃ

  • LDFLAGS - ÀϹÝÀûÀÎ $(LD) ¿É¼Ç

    ¸µÄ¿¸¦ ºÎ¸¦ ¶§ Ç×»ó »ç¿ëµÇ´Â Ç÷¡±×ÀÌ´Ù. º¸Åë ¿¡¹Ä·¹À̼ÇÀ» ÁöÁ¤ÇÏ´Â °Í¸¸À¸·Îµµ ÃæºÐÇÏ´Ù.

    	¿¹:
    		#arch/s390/Makefile
    		LDFLAGS := -m elf_s390
    						
    Note: EXTRA_LDFLAGS¿Í LDFLAGS_$@´Â Ç÷¡±×¸¦ Á»´õ Ä¿½ºÅ͸¶ÀÌÁî Çϴµ¥ »ç¿ëµÈ´Ù. 7ÀåÀ» ÂüÁ¶Ç϶ó.

  • LDFLAGS_MODULE - ¸ðµâÀ» ¸µÅ©ÇÒ ¶§ $(LD)¿¡ »ç¿ëµÇ´Â ¿É¼Ç

    LDFLAGS_MODULEÀº ¸ðµâÀ» ¸¸µå´Âµ¥ »ç¿ëµÇ´Â .ko ÆÄÀÏÀ» ¸µÅ©ÇÒ ¶§ $(LD)¿¡ ÁöÁ¤µÇ´Â Ç÷¡±×´Ù. ±âº»Àº Àç¹èÄ¡¸¦ À§ÇÑ ¡°-r¡±.

  • LDFLAGS_vmlinux - vmlinux¸¦ ¸µÅ©ÇÒ ¶§ »ç¿ëµÇ´Â $(LD)¿ë Ç÷¡±×

    LDFLAGS_vmlinux´Â ¸¶Áö¸·À¸·Î vmlinux¸¦ ¸µÅ©ÇÒ ¶§ ¸µÄ¿¿¡°Ô Àü´ÞµÇ´Â Ç÷¡±×´Ù. LDFLAGS_vmlinux´Â LDFLAGS_$@¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    	¿¹:
    		#arch/i386/Makefile
    		LDFLAGS_vmlinux := -e stext
    						

  • LDFLAGS_BLOB - initramfs blobÀ» ¸µÅ©ÇÒ ¶§ $(LD)¿¡ »ç¿ëµÇ´Â Ç÷¡±×

    Initramfs¿¡ »ç¿ëµÇ´Â À̹ÌÁö´Â ºôµå ÇÁ·Î¼¼½º µ¿¾È ¸¸µé¾îÁø´Ù. LDFLAGS_BLOBÀº initramfs_data.o ÆÄÀÏÀ» ¸¸µå´Â¿¡ »ç¿ëµÈ´Ù.

    	¿¹:
    		#arch/i386/Makefile
    		LDFLAGS_BLOB := --format binary --oformat elf32-i386
    						

  • OBJCOPYFLAGS - objcopy Ç÷¡±×

    .o ÆÄÀÏÀ» ¹ø¿ªÇϱâ À§ÇØ $(call if_changed,objcopy)°¡ »ç¿ëµÇ¸é OBJCOPYFLAGS°¡ »ç¿ëµÈ´Ù. $(call if_changed,objcopy)´Â º¸Åë vmlinux¿¡¼­ ¹ÙÀ̳ʸ®¸¦ ÃßÃâÇϱâ À§ÇØ »ç¿ëµÈ´Ù

    	¿¹:
    		#arch/s390/Makefile
    		OBJCOPYFLAGS := -O binary
    
    		#arch/s390/boot/Makefile
    		$(obj)/image: vmlinux FORCE
    			$(call if_changed,objcopy)
    						
    ÀÌ ¿¹Á¦¿¡¼± $(obj)/image°¡ vmlinuxÀÇ ¹ÙÀ̳ʸ® ¹öÀüÀÌ´Ù. $(call if_changed,xxx)ÀÇ ¿ëµµ´Â ³ªÁß¿¡ ¼³¸íµÈ´Ù.

  • AFLAGS - $(AS) ¾î¼Àºí·¯ Ç÷¡±×

    ±âº» °ªÀº ÃÖ»óÀ§ MakefileÀ» º¸¶ó. ÇÊ¿ä¿¡ µû¶ó ¾ÆÅ°ÅØÃÄ ¸¶´Ù Ãß°¡Çϰųª ¼öÁ¤Ç϶ó.

    	¿¹:
    		#arch/sparc64/Makefile
    		AFLAGS += -m64 -mcpu=ultrasparc
    						

  • CFLAGS - $(CC) ÄÄÆÄÀÏ·¯ Ç÷¡±×

    ±âº» °ªÀº ÃÖ»óÀ§ MakefileÀ» º¸¶ó. ÇÊ¿ä¿¡ µû¶ó ¾ÆÅ°ÅØÃÄ ¸¶´Ù Ãß°¡Çϰųª ¼öÁ¤Ç϶ó. º¸Åë CFLAGS´Â ¼³Á¤¿¡ µû¶ó ´Þ¶óÁø´Ù.

    	¿¹:
    		#arch/i386/Makefile
    		cflags-$(CONFIG_M386) += -march=i386
    		CFLAGS += $(cflags-y)
    						
    ¸¹Àº ¾ÆÅ°ÅØÃÄ MakefileÀº µ¿ÀûÀ¸·Î Ÿ°Ù C ÄÄÆÄÀÏ·¯¸¦ ½ÇÇàÇØ Áö¿øµÇ´Â ¿É¼ÇÀ» °Ë»çÇÑ´Ù.
    		#arch/i386/Makefile
    		check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc \
    			/dev/null\ > /dev/null 2>&1; then echo "$(1)"; \
    			else echo "$(2)"; fi)
    		cflags-$(CONFIG_MCYRIXIII) += $(call check_gcc,-march=c3,-march=i486)
    
    		CFLAGS += $(cflags-y)
    						

  • CFLAGS_KERNEL - built-in¿ë ƯÁ¤ $(CC) ¿É¼Ç

    $(CFLAGS_KERNEL)´Â ¸Þ¸ð¸® »óÁÖ Ä¿³Î Äڵ带 ÄÄÆÄÀÏÇϴµ¥ »ç¿ëµÇ´Â Ưº° C ÄÄÆÄÀÏ·¯ Ç÷¡±×¸¦ ´ã°í ÀÖ´Ù.

  • CFLAGS_MODULE - ¸ðµâ¿ë ƯÁ¤ $(CC) ¿É¼Ç

    $(CFLAGS_MODULE)Àº ÀûÀç °¡´ÉÇÑ Ä¿³Î ¸ðµâÀ» ÄÄÆÄÀÏÇϴµ¥ »ç¿ëµÇ´Â Ưº° C ÄÄÆÄÀÏ·¯ Ç÷¡±×¸¦ ´ã°í ÀÖ´Ù.


6.2. Add prerequisites to prepare

The prepare: ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡±â Àü¿¡ ¹Ì¸® ÁöÁ¤µÈ ¸®½ºÆ®¸¦ ¸¸µé±â À§ÇØ »ç¿ëµÇ´Â ±ÔÄ¢À» ÁغñÇÑ´Ù. ÀÌ°ÍÀº º¸Åë ¾î¼Àºí·¯ »ó¼ö¸¦ ´ã°í ÀÖ´Â Çì´õÆÄÀÏÀÌ´Ù.

	¿¹:
		#arch/s390/Makefile
		prepare: include/asm-$(ARCH)/offsets.h
			

ÀÌ ¿¹¿¡¼­ include/asm-$(ARCH)/offsets.h´Â ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡±â Àü¿¡ ¸¸µé¾îÁø´Ù. kbuild°¡ offset header ÆÄÀÏÀ» ¸¸µå´Â °ÍÀº ´Ù¸¥ ÀåÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù.


6.3. List directories to visit when descending

¾ÆÅ°ÅØÃÄ MakefileÀº vmlinux¸¦ ¾î¶»°Ô ¸¸µå´ÂÁö ÁöÁ¤Çϱâ À§ÇØ ÃÖ»óÀ§ Makefile°ú °°ÀÌ ÇùÁ¶ÇÑ´Ù. ¸ðµâ¿¡ ´ëÇؼ± ¾ÆÅ°ÅØÁ® º°·Î Ưº°È÷ ±¸ºÐÇÏ´Â °ÍÀÌ ¾ø´Ù. Áï ¸ðµâÀ» ¸¸µå´Â °ÍÀº ¾ÆÅ°ÅØÃÄ¿¡ µ¶¸³ÀûÀÌ´Ù.

  • head-y

    $(head-y)´Â vmlinux¿¡ ¸µÅ©µÉ ¿ÀºêÁ§Æ®¸¦ ³ª¿­ÇÏ°í ÀÖ´Ù. $(libs-y)´Â lib.a°¡ Á¸ÀçÇÒ ¼ö ÀÖ´Â µð·ºÅ丮¸¦ ³ª¿­ÇÏ°í ÀÖ´Ù. ³ª¸ÓÁö´Â °¢°¢ built-in.o ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ Á¸ÀçÇÒ ¼ö ÀÖ´Â µð·ºÅ丮¸¦ ³ª¿­ÇÏ°í ÀÖ´Ù.

  • init-y

    $(init-y) ¿ÀºêÁ§Æ®´Â $(head-y) µÚ¿¡ À§Ä¡ÇÑ´Ù. ±×¸®°í ³ª¼­ ³ª¸ÓÁö µéÀº ´ÙÀ½°ú °°Àº ¼ø¼­·Î À§Ä¡ÇÑ´Ù.

    $(core-y), $(libs-y), $(drivers-y) ±×¸®°í $(net-y).

    ÃÖ»óÀ§ MakefileÀº ¸ðµç ÀÏ¹Ý µð·ºÅ丮¿¡ ´ëÇÑ °ªÀ» Á¤ÀÇÇÑ´Ù. arch/$(ARCH)/MakefileÀº ¾ÆÅ°ÅØÃÄ ¿¡ µû¸¥ µð·ºÅ丮¿¡¸¸ ´õÇØÁø´Ù.

    	¿¹:
    		#arch/sparc64/Makefile
    		core-y += arch/sparc64/kernel/
    		libs-y += arch/sparc64/prom/ arch/sparc64/lib/
    		drivers-$(CONFIG_OPROFILE)  += arch/sparc64/oprofile/
    						


6.4. Architecture specific boot images

arch MakefileÀº vmlinux ÆÄÀÏÀ» ¸¸µé°í ¾ÐÃàÇÏ°í ºÎÆ®½º·¦ÇÎ ÄÚµå·Î °¨½Î°í Çؼ­ °á°ú¸¦ ¾îµò°¡¿¡ ÀúÀåÇÏ´Â ÀÏÀ» ´ã´çÇÑ´Ù. ÀÌ°ÍÀº ¿©·¯ Á¾·ùÀÇ ¼³Ä¡ ¸í·ÉÀ» Æ÷ÇÔÇÑ´Ù. ½ÇÁ¦ ¸ñÇ¥´Â ¾ÆÅ°ÅØÃÄ ¸¶´Ù ´Ù¸£±â ¶§¹®¿¡ Ç¥ÁØÈ­ µÇ¾î ÀÖÁø ¾Ê´Ù. º¸Åë arch/$(ARCH)/ ¹Ø¿¡ ÀÖ´Â boot/ µð·ºÅ丮¿¡¼­ ¿©·¯ ÇÁ·Î¼¼½ÌÀÌ ½ÇÇàµÈ´Ù. kbuild´Â boot/³»¿¡ Àִ Ÿ°ÙÀ» ¸¸µé±â À§ÇÑ ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù. ±×·¡¼­ arch/$(ARCH)/MakefileÀº boot/¿¡ Àִ Ÿ°ÙÀ» ºôµåÇϱâ À§ÇØ make¸¦ ¸Å´º¾ó·Î ½ÇÇàÇÑ´Ù.

ÃßõµÈ Á¢±Ù ¹æ¹ýÀº arch/$(ARCH)/Makefile¿¡ ¼ôÄÆÀ» Æ÷ÇÔ½ÃÅ°°í arch/$(ARCH)/boot/Makefile·Î ³»·Á°¥ ¶§ Àüü Æнº¸¦ »ç¿ëÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù.

	¿¹:
		#arch/i386/Makefile
		boot := arch/i386/boot
		bzImage: vmlinux
			$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
				

"$(Q)$(MAKE) $(build)=<dir>"Àº ÇÏÀ§ µð·ºÅ丮¿¡¼­ make¸¦ ½ÇÇàÇÏ´Â ¹æ¹ýÀÌ ÁÁ´Ù.

¾ÆÅ°ÅØÃÄ¿¡ µû¸¥ Ÿ°ÙÀÇ À̸§À» Á¤Çϴµ¥´Â ±ÔÄ¢ÀÌ ¾ø´Ù. ±×·¯³ª ¡°make help¡±¸¦ ½ÇÇàÇÒ ¶§ °ü°èµÈ ¸ðµç Ÿ°ÙÀ» Ãâ·ÁÇØÁà¾ßÇÑ´Ù. À̸¦ Áö¿øÇϱâ À§Çؼ± $(archhelp)°¡ ¹Ýµå½Ã Á¤ÀǵǾî ÀÖ¾î¾ßÇÑ´Ù.

	¿¹:
		#arch/i386/Makefile
		define archhelp
			echo  '* bzImage      - Image (arch/$(ARCH)/boot/bzImage)'
		endef
				

Make¸¦ ¾Æ±Ô¸ÕÆ® ¾øÀÌ ½ÇÇàÇßÀ» ¶© ù¹ø° ¸ñÇ¥°¡ ¸¸µé¾î Áø´Ù. ÃÖ»óÀ§ Makefile¿¡¼­ ù¹ø° ¸ñÇ¥´Â all: ÀÌ´Ù. ÀϹÝÀûÀ¸·Ð ºÎÆ® °¡´ÉÇÑ À̹ÌÁö¸¦ ¸¸µéµµ·Ï µÇ¾î ÀÖ´Ù. "make help"¸¦ ÇÏ¸é ³ª¿À´Â ¸®½ºÆ®¿¡¼­ ±âº» ¸ñÇ¥°¡ '*'·Î ±¸ºÐµÇ¾î ÀÖ´Ù.

	¿¹:
		#arch/i386/Makefile
		all: bzImage 
				
¿¹Á¦¿¡¼± ¾Æ±Ô¸ÕÆ® ¾øÀÌ ¡°make¡±¸¦ ½ÇÇà ÇßÀ» ¶§ bzImage°¡ ¸¸µé¾îÁø´Ù.


6.5. Building non-kbuild targets

extra-y´Â obj-*¿¡ ÀÇÇØ ÁöÁ¤µÈ Ÿ°Ù ¸»°í ÇöÀç µð·ºÅ丮¿¡¼­ ¸¸µé¾îÁö´Â Ãß°¡ Ÿ°ÙÀ» ÁöÁ¤ÇÑ´Ù. extra-y¿¡ ¸ðµç Ÿ°ÙÀ» ¿­°ÅÇÏ´Â °ÍÀº ´ÙÀ½°ú °°Àº µÎ°¡Áö ¸ñÀûÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.

  1. kbuild°¡ Ä¿¸Çµå¶óÀο¡ º¯°æÀÌ ÀÖ´ÂÁö üũÇÒ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ $(call if_changed,xxx)°¡ »ç¿ëµÈ °æ¿ì

  2. kbuild°¡ ¡°make clean¡± µ¿¾È ¹«½¼ ÆÄÀÏÀÌ Áö¿öÁ³´ÂÁö ¾Ë¼¼ Çϱâ À§ÇØ

	¿¹:
		#arch/i386/kernel/Makefile
		extra-y := head.o init_task.o
			

ÀÌ ¿¹Á¦¿¡¼± extra-y°¡ ¸¸µé¾îÁö±ä ÇÏÁö¸¸ built-in.oÀÇ ºÎºÐÀ¸·Î ¸µÅ©µÇÁö´Â ¾Ê´Â °ÍÀ» ¿­°ÅÇÏ°í ÀÖ´Ù.


6.6. Commands useful for building a boot image

kbuild´Â ºÎÆ® À̹ÌÁö¸¦ ¸¸µå´Âµ¥ À¯¿ëÇÑ ¸î °¡ÁöÀÇ ¸ÅÅ©·Î¸¦ Á¦°øÇÑ´Ù.

  • if_changed

    if_changed´Â ¾Æ·¡¿Í °°Àº ¶§¿¡ À¯¿ëÇÑ ÀÎÇÁ¶ó ½ºÆ®·°ÃÄ´Ù.

    	»ç¿ë¹ý:
    		target: source(s) FORCE
    			$(call if_changed,ld/objcopy/gzip)
    						

    ±ÔÄ¢ÀÌ Æò°¡µÉ ¶§ ¾î´À ÆÄÀÏÀ̵çÁö ¾÷µ¥ÀÌÆ® µÇ¾ßÇϰųª ¸í·ÉÀÌ ¸¶Áö¸· È£ÃâµÈ ÀÌÈÄ·Î º¯°æµÇ¾ú´Ù¸é ±ÔÄ¢Àº üũµÉ °ÍÀÌ´Ù. ½ÇÇà ÆÄÀÏ¿¡ ´ëÇÑ ¾î´À ¿É¼ÇÀ̵çÁö ¹Ù²î¾ú´Ù¸é ³ªÁß¿¡ °­Á¦·Î ´Ù½Ã ¸¸µé¾îÁú °ÍÀÌ´Ù. if_changed¸¦ »ç¿ëÇÏ´Â ¾î¶² Ÿ°ÙÀ̵çÁö $(targets)¾È¿¡ ¹«Á¶°Ç ³ª¿­µÇ¾ßÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¸í·É üũ´Â ½ÇÆÐÇÏ°í Ÿ°ÙÀº ¸¸µé¾îÁöÁö ¾ÊÀ» °ÍÀÌ´Ù. $(targets)¿¡ ÇÒ´çÇÑ °ÍÀº $(obj)/ Á¢µÎ»ç°¡ ÇÊ¿ä ¾ø´Ù. if_changed´Â 6.7Àý¿¡¼­ Á¤ÀǵǴ Ŀ½ºÅÒ Ä¿¸Çµå¿Í Ãæµ¹ÇÒ ¼öµµ ÀÖ´Ù.

    Note: º¸ÅëÀº ÀÌ·± ½Ç¼ö°¡ FORCE¸¦ ±î¸Ô¾î¼­ »ý±ä´Ù.

  • ld

    Ÿ°ÙÀ» ¸µÅ©ÇÑ´Ù. º¸Åë LDFLAGS_$@°¡ ld¿¡ Ưº°ÇÑ ¿É¼ÇÀ» ¼¼Æ®Çϱâ À§ÇØ »ç¿ëµÈ´Ù.

  • objcopy

    ¹ÙÀ̳ʸ®¸¦ Ä«ÇÇÇÑ´Ù. OBJCOPYFLAGS°¡ arch/$(ARCH)/Makefile¿¡¼­ »ç¿ëµÈ´Ù. OBJCOPYFLAGS_$@´Â Ãß°¡ ¿É¼ÇÀ» ¼³Á¤ÇÒ ¶§ »ç¿ëµÉ ¼ö ÀÖ´Ù.

  • gzip

    Ÿ°ÙÀ» ¾ÐÃàÇÑ´Ù. ÃÖ´ë ¾ÐÃàÀ» »ç¿ëÇ϶ó.

    	¿¹:
    		#arch/i386/boot/Makefile
    		LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
    		LDFLAGS_setup    := -Ttext 0x0 -s --oformat binary -e begtext
    
    		targets += setup setup.o bootsect bootsect.o
    		$(obj)/setup $(obj)/bootsect: %: %.o FORCE
    			$(call if_changed,ld)
    						
    ÀÌ ¿¹Á¦¿¡¼­´Â ¼­·Î´Ù¸¥ ¸µÄ¿ ¿É¼ÇÀ» ÇÊ¿ä·Î ÇÏ´Â µÎ°¡ÁöÀÇ Å¸°ÙÀÌ °¡´ÉÇÏ´Ù. ¸µÄ¿ ¿É¼ÇÀº LDFLAGS_$@ ¹®¹ýÀ» »ç¿ëÇØ °¢°¢¿¡°Ô ÁöÁ¤µÈ´Ù. $(targets)´Â ¸ðµç ºñÁßÀִ Ÿ°Ù¿¡ ÇÒ´çµÈ´Ù. kbuild´Â Ÿ°ÙÀ» ¾Ë°í ÀÖ°í ´ÙÀ½°ú °°Àº °ÍÀ» ½ÇÇàÇÑ´Ù.

    1. Ä¿¸Çµå ¶óÀÎÀÌ º¯°æµÆ´ÂÁö üũ

    2. make clean µ¿¾È Ÿ°ÙÀÌ Áö¿î´Ù

  • ": %: %.o"

    setup.o¿Í bootsect.o ÆÄÀÏÀ» ³ª¿­Çϴµ¥¼­ Çعæ½ÃÄÑÁÖ´Â ¾à¾î´Ù.

    Note: º¸Åë "target :="À» ±î¸Ô¾î ¾Æ¹«·± ÀÌÀ¯µµ ¾øÀÌ Å¸°ÙÀÌ ´Ù½Ã ÄÄÆÄÀϵǴ ½Ç¼ö¸¦ ¸¸µé¾î³½´Ù.


6.7. Custom kbuild commands

KBUILD_VERBOSE=0ÀÎ »óÅ·Πkbuild°¡ ½ÇÇàµÇ¸é È­¸é¿£ ¾à½ÄÀÇ Ç¥½Ã¸¸µÈ´Ù. ÀÌ·± ¸ð¾çÀÇ Ä¿½ºÅÒ Ä¿¸Çµå¸¦ °¡´ÉÇÏ°Ô ÇϱâÀ§Çؼ± µÎº¯¼ö¸¦ ¼¼ÆÃÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

quiet_cmd_<command> - ¹«¾ùÀÌ Ãâ·ÂµÉ °ÍÀΰ¡?

cmd_<command> - ½ÇÇàµÉ Ä¿¸Çµå

	¿¹:
		#
		quiet_cmd_image = BUILD   $@
		cmd_image = $(obj)/tools/build $(BUILDFLAGS) \
			$(obj)/vmlinux.bin > $@

		targets += bzImage
		$(obj)/bzImage: $(obj)/vmlinux.bin $(obj)/tools/build FORCE
			$(call if_changed,image)
			@echo 'Kernel: $@ is ready'
			

$(obj)/bzImage Ÿ°Ù ¶óÀÎÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¶§ BUILD arch/i386/boot/bzImage´Â "make KBUILD_VERBOSE=0"À» Ãâ·ÂÇÒ °ÍÀÌ´Ù.


7. kbuild Variables

ÃÖ»óÀ§ MakefileÀº ´ÙÀ½°ú °°Àº º¯¼ö¸¦ exportÇÑ´Ù.

  • VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION

    ÀÌ º¯¼öµéÀº ÇöÀç Ä¿³ÎÀÇ ¹öÀüÀ» ³ª´Ù³½´Ù. ¸î ¸î ¼Ò¼öÀÇ arch Makefile ¸¸ÀÌ ÀÌ °ªÀ» Á÷Á¢ »ç¿ëÇÑ´Ù. º¸ÅëÀº $(KERNELRELEASE)¸¦ ´ë½Å »ç¿ëÇÑ´Ù. $(VERSIlN), $(PATCHLEVEL), $(SUBLEVEL)Àº '2", "4", "0"°ú °°Àº ±âº»ÀûÀÎ ¹öÀüÀÇ ¼¼ºÎºÐÀ» ³ªÅ¸³½´Ù. ÀÌ ¼¼ °ªÀº ¾ðÁ¦³ª ¼ýÀÚ´Ù. $(EXTRAVERSION)Àº ÇÁ¸® ÆÐÄ¡³ª Ãß°¡ ÆÐÄ¡ÀÇ ¼­ºê·¹º§À» ³ªÅ¸³½´Ù. ¹®ÀÚ ½ºÆ®¸µÀÌ°í ¡°-pre4¡±¿Í °°Àº °ªÀ» °®°í º¸ÅëÀº °ø¹éÀÌ´Ù.

  • KERNELRELEASE

    $(KERNELRELEASE)´Â "2.4.0-pre4"¿Í °°Àº ¹öÀüÀ» ³ªÅ¸³»°Å³ª Ä¿³ÎÀÌ ÀνºÅçµÇ´Â µð·ºÅ丮 À̸§À̵Ǵ ÇϳªÀÇ ½ºÆ®¸µÀÌ´Ù. ¸î¸î arch MakefileÀº ÀÌ·± ¿ëµµ·Î ÀÌ°ÍÀ» »ç¿ëÇÑ´Ù.

  • ARCH

    ÀÌ º¯¼ö´Â Ÿ°Ù ¾ÆÅ°ÅØÃĸ¦ Á¤ÀÇÇÑ´Ù. ¸î¸î kbuild Makefile µéÀº $(ARCH)¸¦ Å×½ºÆ®ÇØ ÄÄÆÄÀϵǾßÇÏ´Â ÆÄÀÏÀ» Á¤ÇÑ´Ù. ±âº»Àº ÃÖ»óÀ§ MakefileÀÌ $(ARCH)¸¦ È£½ºÆ® ½Ã½ºÅÛ°ú °°Àº ¾ÆÅ°ÅØÃÄ·Î ¼³Á¤ÇÑ´Ù. Å©·Î½º ÄÄÆÄÀÏ ÇÏ·Á¸é ÀÌ °ªÀ» Ä¿¸Çµå ¶óÀο¡¼­ ÁöÁ¤ÇÏ¸é µÈ´Ù.

    make ARCH=m68k ...

  • INSTALL_PATH

    ¸Þ¸ð¸®¿¡ »óÁÖÇÒ Ä¿³Î À̹ÌÁö¿Í System.map ÆÄÀÏÀÇ ¼³Ä¡ À§Ä¡¸¦ ³ªÅ¸³½´Ù. ÀνºÅçÇÒ Å¸°ÙÀº ¾ÆÅ°ÅØÃÄ¿¡ ´Ù¶ó ´Ù¸¥ °ÍÀ» »ç¿ëÇÑ´Ù.

  • INSTALL_MOD_PATH, MODLIB

    $(INSTALL_MOD_PATH)´Â ¸ðµâÀÇ ¼³Ä¡ À§Ä¡ÀÎ $(MODLIB)ÀÇ Á¢µÎ»ç´Ù. ÀÌ º¯¼ö´Â Makefile¿¡ Á¤ÀǵǾî ÀÖÁö ¾Ê°í ÇÊ¿äÇÑ °æ¿ì¿¡ »ç¿ëÀÚ¿¡ ÀÇÇØ ³Ñ°ÜÁø´Ù. $(MODLIB)´Â ¸ðµâÀÌ ¼³Ä¡µÉ À§Ä¡¸¦ ³ªÅ¸³½´Ù. ÃÖ»óÀ§ MakefileÀº $(MODLIB)¸¦ $(INSTALL_MOD_PAHT)/lib/modules/$(KERNELRELEASE)·Î Á¤ÀÇÇÑ´Ù. »ç¿ëÀÚ´Â ÇÊ¿äÇÑ °æ¿ì ÀÌ º¯¼ö¸¦ ÀçÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.


8. Makefile language

Ä¿³Î MakefileÀº GNU Make¿Í µ¿ÀÛÇϵµ·Ï ¸¸µé¾îÁ® ÀÖ´Ù. Makefile µéÀº GNU MakeÀÇ ¹®¼­¿¡ ³ª¿Â °Íµé¸¸À» »ç¿ëÇÏÁö¸¸ GNU È®Àåµµ ¸¹ÀÌ »ç¿ëÇÑ´Ù. GNU Make´Â ÇÔ¼ö¸¦ ó¸®ÇÏ´Â ±âº» ¸®½ºÆ®¸¦ Á¦°øÇÑ´Ù. Ä¿³Î Makefile µéÀº ¾à°£ÀÇ ¡°if¡± ¹®ÀåÀ¸·Î ¸¸µé¾îÁö°Å³ª À¯ÁöµÉ ¸®½ºÆ®¿¡ ´ëÇÑ novel styleÀ» »ç¿ëÇÑ´Ù. GNU Makef´Â µÎ °¡ÁöÀÇ ÇÒ´ç ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. ¡°:=¡±Àº ¿À¸¥ ÆíÀÇ °ªÀ» ¹Ù·Î °è»êÇÏ°í ¿ÞÆíÀ¸·Î ´ëÀÔÇÑ´Ù. ¡°=¡±´Â °ø½Ä Á¤ÀÇ¿Í ºñ½ÁÇؼ­ ¿À¸¥ ÆíÀÇ °ªÀ» °è»êÇÏÁö ¾Ê°í ¿ÞÆíÀÇ °ªÀÌ »ç¿ëµÉ ¶§ ¸¶´Ù °è»êÇÑ´Ù. ¿©·¯ °æ¿ì¿¡¼­ ¡°=¡±ÀÌ Àû´çÇÏ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¡°:=¡±ÀÌ ¿Ã¹Ù¸¥ ¼±ÅÃÀÌ´Ù.


9. Credits

Original version made by Michael Elizabeth Chastain, <mailto:mec (at) shout.net>

Updates by Kai Germaschewski <kai (at) tp1.ruhr-uni-bochum.de>

Updates by Sam Ravnborg <sam (at) ravnborg.org>


10. TODO

- Describe how kbuild support shipped files with _shipped.

- Generating offset header files.

- Add more variables to section 7


ID
Password
Join
You will overcome the attacks of jealous associates.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2004-01-07 14:06:47
Processing time 0.0015 sec