kbuild system³²»ó±ÔÀÌ ¹®¼´Â ¸®´ª½º Ä¿³Î 2.6.x¿¡ »ç¿ëµÇ´Â kbuild System¿¡ ´ëÇØ ¼³¸í ÇÕ´Ï´Ù. Linux Kernel¼Ò½ºÀÇ Documents/kbuild/makefiles.txt ¹®¼¸¦ ¹ø¿ªÇÑ °Í¿¡ Áö³ªÁö ¾ÊÀ¸¸ç ¹ø¿ªÀÌ ¸Å²ô·´Áö ¸øÇÏ°í Á÷¿ªÀ» ÇÑ ºÎºÐÀÌ ÀÖÀ¸³ª ÀÌÇØ ¹Ù¶ø´Ï´Ù. ÀÇ¿ªÀ» ÇÏ·Á¸é ÀåȲÇÏ°Ô ¼³¸íÀ» Çϰųª ÇØ¾ß Çϴµ¥ ±×·± Æí º¸´Ù´Â Â÷¶ó¸® ¿ø¹®À» ÀÐ¾î º¸½Ã´Â °ÍÀÌ ³´°Ú´Ü »ý°¢¿¡¼ ±×·± °ÍÀÔ´Ï´Ù. ¹ø¿ªÀÌ ¸Å²ô·´Áö ¸øÇÑ ºÎºÐÀº ¹Ýµå½Ã ¿ø¹®À» ÀÐ¾î ¿µ¾î ´Ü¾îÀÇ ¶æÀ» ÆľÇÇϽñ⠹ٶø´Ï´Ù.
1. ¿À¹öºäMakefileÀº ¸î°³ÀÇ ºÎºÐÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. 표 1. MakefileÀÇ ±¸¼º
ÃÖ»óÀ§ 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 Á¾·ù°¡ ÀÖ´Ù.
À̹®¼´Â ÀÏ¹Ý °³¹ßÀÚ³ª arch °³¹ßÀÚ¸¦ À§ÇÑ °ÍÀÌ´Ù. ±×·¯³ª Ä¿³Î MakefileÀÌ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Æ´Â °ÍÀÌ ÁÁÀº °æ¿ì°¡ ¸¹´Ù. ´Ü¼øÈ÷ »õ·Î¿î Ä¿³ÎÀ» ÄÄÆÄÀÏÇØ ¼³Ä¡ÇØ »ç¿ëÇÏ´Â »ç¿ëÀÚ°¡ ¾Æ´Ï°í ½Ã½ºÅÛ ¿£Áö´Ï¾î¶ó¸é Ä¿³ÎÀÌ ¾î¶»°Ô ¸¸µé¾îÁö´Â ¾Ë°í ÀÖ´Â °ÍÀÌ µµ¿òÀÌ µÉ ¶§°¡ ¸¹´Ù. ¿¹¸¦ µé¾î ÇöÀç ¼³Á¤¿¡ ÀÇÇØ ¾î¶² ¸ðµâÀÌ ¾î¶² ÆÄÀÏ·Î ÀÌ·ç¾îÁ® ÀÖ´ÂÁö ¾Ë¼ö ÀÖÀ¸¸é ±× ÆÄÀϵéÀ» Á¶»çÇØ ¼öÁ¤Çϰųª ÇÏ´Â ÀÏÀÌ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù. 3. kbuild MakefilesÄ¿³Î ³»ÀÇ ´ëºÎºÐÀÇ MakefileÀº kbuild ÀÎÇÁ¶ó ½ºÆ®·°Ãĸ¦ »ç¿ëÇÑ´Ù. ÀÌ Àå¿¡¼´Â kbuild makefileµé¿¡¼ »ç¿ëµÇ´Â ¹®¹ý¿¡ ´ëÇØ ¼Ò°³ÇÑ´Ù. 3.1ÀåÀº ¡°Goal Á¤ÀÇ¡±¿¡ ´ëÇÑ °£´ÜÇÑ ¼Ò°³°í ±× ÀÌÈÄ Àå¿¡¼ ´õ ÀÚ¼¼ÇÑ °ÍÀ» ´Ù·ê °ÍÀÌ´Ù. 3.1. Goal Á¤ÀÇGoal Á¤ÀÇ´Â kbuild MakefileÀÇ °¡Àå Áß¿äÇÑ ºÎºÐÀÌ´Ù. GoalÀº ¸¸µé¾îÁ®ÇÒ °Í, Ưº°ÇÑ ÄÄÆÄÀÏ ¿É¼Ç, »ç¿ëµÇ¾ßÇÒ ÇÏÀ§µð·ºÅ丮¸¦ Á¤ÀÇÇÑ´Ù. °¡Àå °£´ÜÇÑ kbuild makefileÀº ´ÙÀ½°ú °°Àº ÇÑ ÁÙÀ» °®´Â´Ù.
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) ºÎÆÃÇÏ´Â µ¿¾È ³ªÅ¸³ª´Â ¼ø¼´ë·Î ºÒ·ÁÁö±â ¶§¹®¿¡ ¸µÅ© ¼ø¼µµ Áß¿äÇÏ´Ù. ±×·¡¼ ¼ø¼¸¦ ¹Ù²Ù°ÔµÇ¸é µð½ºÅ© µîÀÇ µå¶óÀ̹ö°¡ »ç¿ëµÇ´Â ¼ø¼°¡ ¹Ù²î´Â µîÀÇ ÀÏ ¶§¹®¿¡ µð½ºÅ©ÀÇ ¹øÈ£µµ ¹Ù²ð¼ö ÀÖ´Ù.
3.3. Loadable module goals(obj-m)$(obj-m)Àº ÀûÀç °¡´ÉÇÑ ¸ðµâÀ» ¸¸µé ¶§ »ç¿ëµÈ´Ù. ¸ðµâÀº ÇϳªÀÇ ¼Ò½º Äڵ峪 ¿©·¯ °³ÀÇ ¼Ò½º Äڵ忡¼ ¸¸µé¾îÁú ¼ö ÀÖ´Ù. ÇϳªÀÇ ¼Ò½º ÄÚµå·Î ¸¸µé¾îÁö´Â °æ¿ì¿£ ±×³É $(obj-m)¿¡ ´õÇϱ⸸ ÇÏ¸é µÈ´Ù.
¸¸¾à Ä¿³Î ¸ðµâÀÌ ¿©·¯ °³ÀÇ ¼Ò½º ÆÄÀϷκÎÅÍ ¸¸µé¾îÁö¸é À§¿¡ ³ª¿Â °Í°ú °°Àº ¹æ½ÄÀ¸·Î ÁöÁ¤ÇϸéµÈ´Ù. kbuild´Â ¸¸µé°íÀÚÇÏ´Â ¸ðµâÀÌ ¾î´À ºÎºÐ¿¡¼ ¿À´ÂÁö¸¦ ¾Ë¸éµÇ°í $(<module_name>-objs)¿¡ ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù.
ÀÌ ¿¹¿¡¼ ¸ðµâ À̸§Àº isdn.oÀÌ°í kbuild´Â $(isdn-objs)¾È¿¡ ÀÖ´Â ¿ÀºêÁ§Æ®¸¦ ÄÄÆÄÀÏ ÇÑ ÈÄ¿¡ ¡°$(LD) -r¡±À» ½ÇÇàÇØ isdn.o¸¦ ¸¸µé¾î³½´Ù. kbuild´Â ¿ÀºêÁ§Æ®¸¦ Á¢¹Ì»ç -objs¿Í -y¿¡ ÀÇÇØ ¸¸µé¾îÁö´Â º¹ÇÕ ¿ÀºêÁ§Æ®·Î ÀνÄÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ¿ÀºêÁ§Æ®°¡ º¹ÇÕ ¿ÀºêÁ§Æ®ÀÇ ÀϺζó¸é MakefileÀÌ CONFIG_ °ªÀ» »ç¿ëÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù.
ÀÌ ¿¹¿¡¼± 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 µÑ´Ù Á¸ÀçÇÒ ¼öµµ ÀÖ´Ù.
ÀÌ ¿¹Á¦´Â checksum.o¿Í delay.o¸¦ ±â¹ÝÀ¸·ÎÇÏ´Â lib.a¸¦ ¸¸µç´Ù. º¸Åë lib-yÀÇ »ç¿ëÀº lib/¿Í arch/*/lib µð·ºÅ丮¿¡ ÇÑÇÑ´Ù. 3.6. ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡±âMakefileÀº ±×°ÍÀÌ ¼ÓÇÑ µð·ºÅ丮¸¸À» Ã¥ÀÓÁø´Ù. ÇÏÀ§ µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀϵéÀº ±× ÇÏÀ§ µð·ºÅ丮¿¡ ÀÖ´Â ´Ù¸¥ Makefile¿¡ ÀÇÇØ °ü¸®µÈ´Ù. ºôµå ½Ã½ºÅÛÀº ÀÚµ¿ÀûÀ¸·Î ÇÏÀ§ µð·ºÅ丮¸¦ ¸®Ä¿½ÃºêÇÏ°Ô ºÎ¸¥´Ù. ±×·¸°Ô Çϱâ À§Çؼ obj-y¿Í obj-mÀÌ »ç¿ëµÈ´Ù. ¿øÇÏ´Â µð·ºÅ丮 À̸§ µÚ¿¡ /¸¦ ºÙ¿© ÀÌ·¸°Ô ÇÑ´Ù. ext2¶ó´Â ¸ðµâÀº ¿©·¯ µð·ºÅ丮¿¡ °ÉÃÄ ÀÖ°í fs/¿¡ MakefileÀÌ ÀÖ´Ù. ÀÌ MakefileÀº kbuild¿¡°Ô ¾Æ·¡¿Í °°Àº ÇÒ´çÀ» µ¿ÇØ ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡µµ·Ï ÇÑ´Ù.
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ÀÇ ¸ðµç ½ÇÇàµÇ´Â ¸í·É¿¡ Àû¿ëµÈ´Ù.
CFLAGS_$@, AFLAGS_$@ CFLAGS_$@¿Í AFLAGS_$@´Â ÇöÀç kbuild makefile ³»ÀÇ ¸í·É¿¡¸¸ Àû¿ëµÈ´Ù.
3.8. ÀÇÁ¸¼º ÃßÀûkbuild´Â ´ÙÀ½°ú °°Àº ÀÇÁ¸¼ºÀ» ÃßÀûÇÑ´Ù.
±×·¡¼ $(CC)¿¡ ´ëÇÑ ¿É¼ÇÀÌ ¹Ù²î¸é °ü·ÃµÈ ¸ðµç ÆÄÀÏÀº ÀçÄÄÆÄÀÏ µÈ´Ù. 3.9. Ưº° ±ÔĢƯº°ÇÑ ±ÔÄ¢Àº kbuild ÀÎÇÁ¶ó ½ºÆ®·°ÃÄ°¡ ÇÊ¿ä·Î ÇÏ´Â ±â´ÉÀ» Á¦°øÇÏÁö ¸øÇÒ ¶§ »ç¿ëÇÑ´Ù. ´ëÇ¥ÀûÀÎ ¿¹°¡ ºôµå µ¿¾È »ý¼ºµÇ´Â Çì´õ ÆÄÀÏ °°Àº °ÍÀÌ´Ù. ´Ù¸¥ ¿¹´Â ¾ÆÅ°ÅØÃÄ¿¡ µû¶ó ºÎÆ® À̹ÌÁö µîÀ» Áغñµî¿¡ ÇÊ¿äÇÑ Æ¯º°ÇÑ ±ÔÄ¢À» ÇÊ¿ä·Î ÇÏ´Â °æ¿ì´Ù. Ưº° ±ÔÄ¢Àº º¸ÅëÀÇ make ±ÔÄ¢À» »ç¿ëÇØ ¾º¾îÁö°í MakefileÀÌ Á¸ÀçÇÏ´Â °÷¿¡¼´Â kbuild°¡ ½ÇÇàµÇÁö ¾Ê´Â´Ù. ±×·¡¼ ¸ðµç Ưº° ±ÔÄ¢Àº ÇÊ¿äÇÑ ÆÄÀÏÀ̳ª Ÿ°Ù ÆÄÀÏ¿¡ ´ëÇÑ »ó´ë °æ·Î(relative path)¸¦ Á¦°øÇؾ߸¸ ÇÑ´Ù. Ưº° ±ÔÄ¢À» Á¤ÀÇÇÒ ¶§ »ç¿ëµÇ´Â µÎ°¡ÁöÀÇ º¯¼ö:
4. È£½ºÆ® ÇÁ·Î±×·¥ Áö¿økbuild´Â ÄÄÆÄÀÏ ½ºÅ×ÀÌÁö µ¿¾È »ç¿ëµÇ´Â È£½ºÆ® »ó¿¡¼ µ¹¾Æ°¡´Â ÇÁ·Î±×·¥À» ¸¸µé±âµµ ÇÑ´Ù. È£½ºÆ® ½ÇÇà ÆÄÀÏÀ» ¸¸µé±â À§Çؼ± µÎ ½ºÅÜÀÇ ÀýÂ÷°¡ ÇÊ¿äÇÏ´Ù. ù¹ø° ½ºÅÜÀº kbuild¿¡°Ô È£½ºÆ® ÇÁ·Î±×·¥ÀÌ Á¸ÀçÇÑ´Ù°í ¾Ë¸®´Â °ÍÀÌ´Ù. ÀÌ°Ç host-prog¸¦ »ç¿ëÇØ ÇÑ´Ù. µÎ¹øÀç ½ºÅÜÀº ½ÇÇà ÆÄÀÏ¿¡ ´ëÇÑ Á¤È®ÇÑ ÀÇÁ¸¼ºÀ» ´õÇØÁÖ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ±ÔÄ¢¿¡ ÀÇÁ¸¼ºÀ» ´õÇϰųª $(always) º¯¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. 4.1. °£´ÜÇÑ È£½ºÆ® ÇÁ·Î±×·¥¶§·Î´Â ºôµå°¡ ½ÇÇàµÇ´Â ÄÄÇ»ÅÍ »ó¿¡¼ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÏ°í ½ÇÇàÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾Æ·¡ ¿¹´Â kbuild¿¡°Ô bin2hex¸¦ È£½ºÆ®¿¡¼ ¸¸µé¶ó°í ¾Ë·ÁÁØ´Ù.
kbuild´Â bin2hex°¡ Makefile°ú °°Àº µð·ºÅ丮¿¡ ÀÖ´Â bin2hex.c¶ó´Â ÇϳªÀÇ ¼Ò½º ÆÄÀÏ¿¡¼ ¸¸µé¾îÁø´Ù°í °¡Á¤ÇÑ´Ù. 4.2. º¹ÇÕÀûÀΠȣ½ºÆ® ÇÁ·Î±×·¥È£½ºÆ® ÇÁ·Î±×·¥Àº ¿©·¯ °³ÀÇ ¿ÀºêÁ§Æ®·Î ±¸¼ºµÉ¼öµµ ÀÖ´Ù. º¹ÇÕ ¿ÀºêÁ§Æ®¸¦ Á¤ÀÇÇÏ´Â ¹®¹ýÀº Ä¿³Î ¿ÀºêÁ§Æ®¿¡ »ç¿ëµÈ ¹®¹ý°ú ºñ½ÁÇÏ´Ù. $(<executeable>-objs)´Â ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀ» ±¸¼ºÇÏ´Â ¿ÀºêÁ§Æ®¸¦ ³ªÅ¸³½´Ù.
.o È®ÀåÀÚ¸¦ °®´Â ¿ÀºêÁ§Æ®´Â ±×¿¡ »óÀÀÇÏ´Â .c ÆÄÀÏ·Î ºÎÅÍ ÄÄÆÄÀϵȴÙ. À§ÀÇ ¿¹¿¡¼± checklist.c°¡ ÄÄÆÄÀÏ µÇ checklist.o¸¦ ¸¸µç´Ù. ÃÖÁ¾ÀûÀ¸·Î µÎ°³ÀÇ .o ÆÄÀÏÀÌ ÇϳªÀÇ ½ÇÇà ÆÄÀÏÀÎ lxdialog·Î ¸µÅ©µÈ´Ù. Note: <executable>-y¿Í °°Àº ¹®¹ýÀº È£½ºÆ® ½ÇÇà ÆÄÀÏ¿¡´Â Àû¿ëµÇÁö ¾Ê´Â´Ù. 4.3. °øÀ¯ ¶óÀ̺귯¸® Á¤ÀÇ.so È®ÀåÀÚ¸¦ °°´Â ¿ÀºêÁ§Æ®´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ³ªÅ¸³»°í À§Ä¡¿¡ »ó°ü ¾ø´Â ¿ÀºêÁ§Æ®·Î ÄÄÆÄÀÏ µÈ´Ù. kbuild´Â °íÀ¯ ¶óÀ̺귯¸®¸¦ Á¦°øÇÏÁö¸¸ »ç¿ëÀº Á¦ÇÑ µÇ¾î ÀÖ´Ù. ¾Æ·¡ ¿¹¿¡¼ conf¶ó´Â ½ÇÇà ÆÄÀÏÀ» ¸µÅ©Çϱâ À§ÇØ libkconfig.so°¡ »ç¿ëµÈ´Ù.
°øÀ¯ ¶óÀ̺귯¸®´Â ¾ðÁ¦³ª ±×¿¡ »óÀÀÇÏ´Â -objs ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ±×¸®°í À§ ¿¹Á¦¿¡¼ libkconfig´Â µÎ°³ÀÇ ¿ÀºêÁ§Æ® expr.o¿Í type.o·ÎºÎÅÍ ¸¸µé¾îÁø´Ù. expr.o¿Í type.o´Â À§Ä¡ µ¶¸³ ÀûÀÎ ÄÚµå·Î ¸¸µé¾îÁö°í libkconfig.so·Î ¸µÅ©µÈ´Ù. C++Àº °øÀ¯ ¶óÀ̺귯¸®¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. 4.4. È£½ºÆ® ÇÁ·Î±×·¥¿¡ C++ »ç¿ëÇϱâkbuild´Â C++·Î ÀÛ¼ºµÈ È£½ºÆ® ÇÁ·Î±×·¥À» Áö¿øÇÑ´Ù. ÀÌ°ÍÀº kconfig¸¦ À§ÇØ ¼Ò°³µÇÁö¸¸ ÀϹÝÀûÀÎ »ç¿ë¿¡¼´Â ÃßõÇÏÁö ¾Ê´Â´Ù.
¿¹Á¦¿¡¼ ½ÇÇà ÆÄÀÏÀº C++ÆÄÀÏÀÎ qconf.cc·Î ÀÛ¼ºµÇ¾î ÀÖ°í $(qconf-cxxobjs)·Î Á¤ÀǵȴÙ. ¸¸¾à qconf°¡ .c¿Í .cc ÆÄÀÏ·Î ÀÌ·ïÁ® ÀÖ´Ù¸é À̸¦ ±¸ºÐÇϱâ À§ÇØ Ãß°¡ ÁÙÀÌ ´õ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù.
4.5. È£½ºÆ® ÇÁ·Î±×·¥¿ë ÄÄÆÄÀÏ·¯ ¿É¼Ç ¼³Á¤È£½ºÆ® ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÏ´Â µ¿¾È¿¡ Ưº°ÇÑ Ç÷¡±×°¡ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù. ÇÁ·Î±×·¥Àº ¾ðÁ¦³ª $(HOSTCC)¸¦ »ç¿ëÇØ ÄÄÆÄÀÏ µÇ¹Ç·Î $(HOSTCFLAGS)¸¦ »ç¿ëÇÏ¸é µÈ´Ù. Makefile¿¡ÀÇÇØ ¸¸µé¾îÁö´Â ¸ðµç È£½ºÆ® ÇÁ·Î±×·¥¿¡ °ÉÃÄ ¿µÇâÀ» ÁÖ´Â Ç÷¡±×¸¦ ¼¼ÆÃÇϱâ À§Çؼ± HOST_EXTRACFLAGS º¯¼ö¸¦ »ç¿ëÇÑ´Ù.
ÇÑ°³ÀÇ ÆÄÀÏ ¸¸À» À§ÇÑ Ç÷¡±×´Â ¾Æ·¡¿Í °°Àº ¹æ¹ýÀ¸·Î ÇÑ´Ù.
¾Æ·¡ ¿¹Á¦´Â ¸µÄ¿¿¡°Ô Ưº°ÇÑ ¿É¼ÇÀ» Ãß°¡ ÁöÁ¤ÇØÁØ´Ù.
qconf¸¦ ¸µÅ©ÇÒ ¶§ Ưº° ¿É¼ÇÀÎ ¡°-L$(QTDIR)/lib¡±ÀÌ Àü´ÞµÈ´Ù. 4.6. È£½ºÆ® ÇÁ·Î±×·¥ÀÌ ½ÇÁ¦·Î ¸¸µé¾îÁú ¶§kbuild´Â È£½ºÆ® ÇÁ·Î±×·¥ÀÌ Á¤È®ÇÏ°Ô ¹Ì¸® ÁöÁ¤µÆÀ» °æ¿ì¿¡¸¸ ¸¸µç´Ù. ÀÌ·± °æ¿ì´Â µÎ°¡Áö°¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù.
5. kbuild clean ÀÎÇÁ¶ó ½ºÆ®·°ÃÄ"make clean"Àº Ä¿³ÎÀÌ ÄÄÆÄÀÏ µÇ´Â ¼Ò½º Æ®¸® ³»¿¡¼ »ý¼ºµÈ(È£½ºÆ® ÇÁ·Î±×·¥ Æ÷ÇÔ) ¸ðµç ÆÄÀÏÀ» Áö¿î´Ù. $(host-progs), $(always), $(extra-y)¿¡ ÁöÁ¤µÈ ¸ðµç Ÿ°ÙÀÌ Áö¿öÁø´Ù. "*.[oas]", "*.ko"¿Í kbuild¿¡ ÀÇÇØ ¸¸µé¾îÁø ¾à°£ÀÇ Ãß°¡ ÆÄÀÏÀÌ Áö¿öÁø´Ù. Ãß°¡ ÆÄÀÏÀº $(clean-files)¿¡ ÁöÁ¤µÈ´Ù.
"make clean"À» ½ÇÇà ÇÏ¸é µÎ°³ÀÇ ÆÄÀÏ ¡°devlist.h classlist.h¡±°¡ Áö¿öÁö°í kbuild´Â $(clean-files)¿¡ ÁöÁ¤µÈ ÀÌ µÎ ÆÄÀÏÀ» makefileÀÌ ÀÖ´Â µð·ºÅ丮¿¡¼ ã´Â´Ù. º¸Åë kbuild´Â ¡°obj-* := dir/¡±¿¡ ÀÇÇØ ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡Áö¸¸ ¾ÆÅ°ÅØÃÄ º° makefile¿¡¼´Â ÀÌ°Ô ÃæºÐÇÏÁö ¾Ê¾Æ ¶§·Î´Â Á¤È®ÇÏ°Ô ÁöÁ¤ÇؾßÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.
À§ÀÇ ¿¹Á¦´Â ¡°make clean¡±ÀÌ ½ÇÇàµÉ ¶§ compressed/ µð·ºÅ丮·Î ³»·Á°¡¼ Áö¿ì¶õ °ÍÀ» °¡¸£ÃÄÁÖ°í ÀÖ´Ù. ÃÖÁ¾ ºÎÆ® À̹ÌÁö¸¦ ¸¸µå´Â Makefile¿¡¼ Áö¿ì±â¸¦ Áö¿øÇϱâ À§Çؼ± archclean:À̶õ À̸§ÀÇ Å¸°ÙÀ» »ç¿ëÇÑ´Ù.
"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°¡ ½ÇÇàµÉ ¶§ ´ë·« ´ÙÀ½°ú °°Àº ÀýÂ÷¸¦ °ÅÄ£´Ù.
6.1. ¾ÆÅ°ÅØÃÄ ºôµå¸¦ ¼öÁ¤Çϱâ À§ÇÑ º¯¼ö ¼¼ÆÃ
6.2. Add prerequisites to prepareThe prepare: ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡±â Àü¿¡ ¹Ì¸® ÁöÁ¤µÈ ¸®½ºÆ®¸¦ ¸¸µé±â À§ÇØ »ç¿ëµÇ´Â ±ÔÄ¢À» ÁغñÇÑ´Ù. ÀÌ°ÍÀº º¸Åë ¾î¼Àºí·¯ »ó¼ö¸¦ ´ã°í ÀÖ´Â Çì´õÆÄÀÏÀÌ´Ù.
ÀÌ ¿¹¿¡¼ include/asm-$(ARCH)/offsets.h´Â ÇÏÀ§ µð·ºÅ丮·Î ³»·Á°¡±â Àü¿¡ ¸¸µé¾îÁø´Ù. kbuild°¡ offset header ÆÄÀÏÀ» ¸¸µå´Â °ÍÀº ´Ù¸¥ ÀåÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù. 6.3. List directories to visit when descending¾ÆÅ°ÅØÃÄ MakefileÀº vmlinux¸¦ ¾î¶»°Ô ¸¸µå´ÂÁö ÁöÁ¤Çϱâ À§ÇØ ÃÖ»óÀ§ Makefile°ú °°ÀÌ ÇùÁ¶ÇÑ´Ù. ¸ðµâ¿¡ ´ëÇؼ± ¾ÆÅ°ÅØÁ® º°·Î Ưº°È÷ ±¸ºÐÇÏ´Â °ÍÀÌ ¾ø´Ù. Áï ¸ðµâÀ» ¸¸µå´Â °ÍÀº ¾ÆÅ°ÅØÃÄ¿¡ µ¶¸³ÀûÀÌ´Ù.
6.4. Architecture specific boot imagesarch MakefileÀº vmlinux ÆÄÀÏÀ» ¸¸µé°í ¾ÐÃàÇÏ°í ºÎÆ®½º·¦ÇÎ ÄÚµå·Î °¨½Î°í Çؼ °á°ú¸¦ ¾îµò°¡¿¡ ÀúÀåÇÏ´Â ÀÏÀ» ´ã´çÇÑ´Ù. ÀÌ°ÍÀº ¿©·¯ Á¾·ùÀÇ ¼³Ä¡ ¸í·ÉÀ» Æ÷ÇÔÇÑ´Ù. ½ÇÁ¦ ¸ñÇ¥´Â ¾ÆÅ°ÅØÃÄ ¸¶´Ù ´Ù¸£±â ¶§¹®¿¡ Ç¥ÁØÈ µÇ¾î ÀÖÁø ¾Ê´Ù. º¸Åë arch/$(ARCH)/ ¹Ø¿¡ ÀÖ´Â boot/ µð·ºÅ丮¿¡¼ ¿©·¯ ÇÁ·Î¼¼½ÌÀÌ ½ÇÇàµÈ´Ù. kbuild´Â boot/³»¿¡ Àִ Ÿ°ÙÀ» ¸¸µé±â À§ÇÑ ¹æ¹ýÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù. ±×·¡¼ arch/$(ARCH)/MakefileÀº boot/¿¡ Àִ Ÿ°ÙÀ» ºôµåÇϱâ À§ÇØ make¸¦ ¸Å´º¾ó·Î ½ÇÇàÇÑ´Ù. ÃßõµÈ Á¢±Ù ¹æ¹ýÀº arch/$(ARCH)/Makefile¿¡ ¼ôÄÆÀ» Æ÷ÇÔ½ÃÅ°°í arch/$(ARCH)/boot/Makefile·Î ³»·Á°¥ ¶§ Àüü Æнº¸¦ »ç¿ëÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù.
"$(Q)$(MAKE) $(build)=<dir>"Àº ÇÏÀ§ µð·ºÅ丮¿¡¼ make¸¦ ½ÇÇàÇÏ´Â ¹æ¹ýÀÌ ÁÁ´Ù. ¾ÆÅ°ÅØÃÄ¿¡ µû¸¥ Ÿ°ÙÀÇ À̸§À» Á¤Çϴµ¥´Â ±ÔÄ¢ÀÌ ¾ø´Ù. ±×·¯³ª ¡°make help¡±¸¦ ½ÇÇàÇÒ ¶§ °ü°èµÈ ¸ðµç Ÿ°ÙÀ» Ãâ·ÁÇØÁà¾ßÇÑ´Ù. À̸¦ Áö¿øÇϱâ À§Çؼ± $(archhelp)°¡ ¹Ýµå½Ã Á¤ÀǵǾî ÀÖ¾î¾ßÇÑ´Ù.
Make¸¦ ¾Æ±Ô¸ÕÆ® ¾øÀÌ ½ÇÇàÇßÀ» ¶© ù¹ø° ¸ñÇ¥°¡ ¸¸µé¾î Áø´Ù. ÃÖ»óÀ§ Makefile¿¡¼ ù¹ø° ¸ñÇ¥´Â all: ÀÌ´Ù. ÀϹÝÀûÀ¸·Ð ºÎÆ® °¡´ÉÇÑ À̹ÌÁö¸¦ ¸¸µéµµ·Ï µÇ¾î ÀÖ´Ù. "make help"¸¦ ÇÏ¸é ³ª¿À´Â ¸®½ºÆ®¿¡¼ ±âº» ¸ñÇ¥°¡ '*'·Î ±¸ºÐµÇ¾î ÀÖ´Ù.
6.5. Building non-kbuild targetsextra-y´Â obj-*¿¡ ÀÇÇØ ÁöÁ¤µÈ Ÿ°Ù ¸»°í ÇöÀç µð·ºÅ丮¿¡¼ ¸¸µé¾îÁö´Â Ãß°¡ Ÿ°ÙÀ» ÁöÁ¤ÇÑ´Ù. extra-y¿¡ ¸ðµç Ÿ°ÙÀ» ¿°ÅÇÏ´Â °ÍÀº ´ÙÀ½°ú °°Àº µÎ°¡Áö ¸ñÀûÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù.
ÀÌ ¿¹Á¦¿¡¼± extra-y°¡ ¸¸µé¾îÁö±ä ÇÏÁö¸¸ built-in.oÀÇ ºÎºÐÀ¸·Î ¸µÅ©µÇÁö´Â ¾Ê´Â °ÍÀ» ¿°ÅÇÏ°í ÀÖ´Ù. 6.6. Commands useful for building a boot imagekbuild´Â ºÎÆ® À̹ÌÁö¸¦ ¸¸µå´Âµ¥ À¯¿ëÇÑ ¸î °¡ÁöÀÇ ¸ÅÅ©·Î¸¦ Á¦°øÇÑ´Ù.
6.7. Custom kbuild commandsKBUILD_VERBOSE=0ÀÎ »óÅ·Πkbuild°¡ ½ÇÇàµÇ¸é ȸ鿣 ¾à½ÄÀÇ Ç¥½Ã¸¸µÈ´Ù. ÀÌ·± ¸ð¾çÀÇ Ä¿½ºÅÒ Ä¿¸Çµå¸¦ °¡´ÉÇÏ°Ô ÇϱâÀ§Çؼ± µÎº¯¼ö¸¦ ¼¼ÆÃÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. quiet_cmd_<command> - ¹«¾ùÀÌ Ãâ·ÂµÉ °ÍÀΰ¡? cmd_<command> - ½ÇÇàµÉ Ä¿¸Çµå
$(obj)/bzImage Ÿ°Ù ¶óÀÎÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¶§ BUILD arch/i386/boot/bzImage´Â "make KBUILD_VERBOSE=0"À» Ãâ·ÂÇÒ °ÍÀÌ´Ù. 7. kbuild VariablesÃÖ»óÀ§ MakefileÀº ´ÙÀ½°ú °°Àº º¯¼ö¸¦ exportÇÑ´Ù.
8. Makefile languageÄ¿³Î MakefileÀº GNU Make¿Í µ¿ÀÛÇϵµ·Ï ¸¸µé¾îÁ® ÀÖ´Ù. Makefile µéÀº GNU MakeÀÇ ¹®¼¿¡ ³ª¿Â °Íµé¸¸À» »ç¿ëÇÏÁö¸¸ GNU È®Àåµµ ¸¹ÀÌ »ç¿ëÇÑ´Ù. GNU Make´Â ÇÔ¼ö¸¦ ó¸®ÇÏ´Â ±âº» ¸®½ºÆ®¸¦ Á¦°øÇÑ´Ù. Ä¿³Î Makefile µéÀº ¾à°£ÀÇ ¡°if¡± ¹®ÀåÀ¸·Î ¸¸µé¾îÁö°Å³ª À¯ÁöµÉ ¸®½ºÆ®¿¡ ´ëÇÑ novel styleÀ» »ç¿ëÇÑ´Ù. GNU Makef´Â µÎ °¡ÁöÀÇ ÇÒ´ç ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. ¡°:=¡±Àº ¿À¸¥ ÆíÀÇ °ªÀ» ¹Ù·Î °è»êÇÏ°í ¿ÞÆíÀ¸·Î ´ëÀÔÇÑ´Ù. ¡°=¡±´Â °ø½Ä Á¤ÀÇ¿Í ºñ½ÁÇؼ ¿À¸¥ ÆíÀÇ °ªÀ» °è»êÇÏÁö ¾Ê°í ¿ÞÆíÀÇ °ªÀÌ »ç¿ëµÉ ¶§ ¸¶´Ù °è»êÇÑ´Ù. ¿©·¯ °æ¿ì¿¡¼ ¡°=¡±ÀÌ Àû´çÇÏ´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¡°:=¡±ÀÌ ¿Ã¹Ù¸¥ ¼±ÅÃÀÌ´Ù. 9. CreditsOriginal 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 |
A gift of flower will soon be made to you. |