1.5 Makefile

¡Ý main Makefile

1) VERSION = 1

PATCHLEVEL = 0

ALPHA =

2) all: Version zImage

3) .EXPORT_ALL_VARIABLES:

4) CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \

else if [ -x /bin/bash ]; then echo /bin/bash; \

else echo sh; fi ; fi)

#

# Make "config" the default target if there is no configuration file or

# "depend" the target if there is no top-level dependency information.

#

5) ifeq (.config,$(wildcard .config))

include .config

ifeq (.depend,$(wildcard .depend))

include .depend

else

CONFIGURATION = depend

endif

else

CONFIGURATION = config

endif

ifdef CONFIGURATION

CONFIGURE = dummy

endif

#

# ROOT_DEV specifies the default root-device when making the image.

# This can be either FLOPPY,CURRENT,/dev/xxxx or empty, in which case

# the default of FLOPPY is used by 'build'.

#

6) ROOT_DEV = CURRENT

#

# If you want to preset the SVGA mode, uncomment the next line and

# set SVGA_MODE to whatever number you want.

# Set it to -DSVGA_MODE=NORMAL_VGA if you just want the EGA/VGA mode.

# The number is the same as you would ordinarily press at bootup.

#

SVGA_MODE= -DSVGA_MODE=NORMAL_VGA

#

# standard CFLAGS

#

7) CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe

ifdef CONFIG_CPP

CFLAGS := $(CFLAGS) -x c++

endif

ifdef CONFIG_M486

CFLAGS := $(CFLAGS) -m486

else

CFLAGS := $(CFLAGS) -m386

endif

#

# if you want the ram-disk device, define this to be the

# size in blocks.

#

#RAMDISK = -DRAMDISK=512

8) AS86 =as86 -0 -a

LD86 =ld86 -0

AS =as

LD =ld

HOSTCC =gcc

CC =gcc -D__KERNEL__

MAKE =make

CPP =$(CC) -E

AR =ar

STRIP =strip

ARCHIVES =kernel/kernel.o mm/mm.o fs/fs.o net/net.o ipc/ipc.o

FILESYSTEMS =fs/filesystems.a

DRIVERS =drivers/block/block.a \

drivers/char/char.a \

drivers/net/net.a \

ibcs/ibcs.o

LIBS =lib/lib.a

SUBDIRS =kernel drivers mm fs net ipc ibcs lib

KERNELHDRS =/usr/src/linux/include

ifdef CONFIG_SCSI

DRIVERS := $(DRIVERS) drivers/scsi/scsi.a

endif

ifdef CONFIG_SOUND

DRIVERS := $(DRIVERS) drivers/sound/sound.a

endif

ifdef CONFIG_MATH_EMULATION

DRIVERS := $(DRIVERS) drivers/FPU-emu/math.a

endif

9) .c.s:

$(CC) $(CFLAGS) -S -o $*.s $<

.s.o:

$(AS) -c -o $*.o $<

.c.o:

$(CC) $(CFLAGS) -c -o $*.o $<

Version: dummy

rm -f tools/version.h

10) config:

$(CONFIG_SHELL) Configure $(OPTS) < config.in

@if grep -s '^CONFIG_SOUND' .tmpconfig ; then \

$(MAKE) -C drivers/sound config; \

else : ; fi

mv .tmpconfig .config

linuxsubdirs: dummy

set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done

tools/./version.h: tools/version.h

tools/version.h: $(CONFIGURE) Makefile

@./makever.sh

@echo \#define UTS_RELEASE \"$(VERSION).$(PATCHLEVEL)$(ALPHA)\" > tools/version.h

@echo \#define UTS_VERSION \"\#`cat .version` `date`\" >> tools/version.h

@echo \#define LINUX_COMPILE_TIME \"`date +%T`\" >> tools/version.h

@echo \#define LINUX_COMPILE_BY \"`whoami`\" >> tools/version.h

@echo \#define LINUX_COMPILE_HOST \"`hostname`\" >> tools/version.h

@echo \#define LINUX_COMPILE_DOMAIN \"`domainname`\" >> tools/version.h

11)tools/build: tools/build.c $(CONFIGURE)

$(HOSTCC) $(CFLAGS) -o $@ $<

boot/head.o: $(CONFIGURE) boot/head.s

boot/head.s: boot/head.S $(CONFIGURE) include/linux/tasks.h

$(CPP) -traditional $< -o $@

tools/version.o: tools/version.c tools/version.h

12)init/main.o: $(CONFIGURE) init/main.c

$(CC) $(CFLAGS) $(PROFILING) -c -o $*.o $<

tools/system: boot/head.o init/main.o tools/version.o linuxsubdirs

$(LD) $(LDFLAGS) -Ttext 1000 boot/head.o init/main.o tools/version.o \

$(ARCHIVES) \

$(FILESYSTEMS) \

$(DRIVERS) \

$(LIBS) \

-o tools/system

nm tools/zSystem | grep -v '\(compiled\)\|\(\.o$$\)\|\( a \)' | \

sort > System.map

boot/setup: boot/setup.o

$(LD86) -s -o $@ $<

boot/setup.o: boot/setup.s

$(AS86) -o $@ $<

boot/setup.s: boot/setup.S $(CONFIGURE) include/linux/config.h Makefile

$(CPP) -traditional $(SVGA_MODE) $(RAMDISK) $< -o $@

boot/bootsect: boot/bootsect.o

$(LD86) -s -o $@ $<

boot/bootsect.o: boot/bootsect.s

$(AS86) -o $@ $<

boot/bootsect.s: boot/bootsect.S $(CONFIGURE) include/linux/config.h Makefile

$(CPP) -traditional $(SVGA_MODE) $(RAMDISK) $< -o $@

13) zBoot/zSystem: zBoot/*.c zBoot/*.S tools/zSystem

$(MAKE) -C zBoot

14) zImage: $(CONFIGURE) boot/bootsect boot/setup zBoot/zSystem tools/build

tools/build boot/bootsect boot/setup zBoot/zSystem $(ROOT_DEV) > zImage

sync

zdisk: zImage

dd bs=8192 if=zImage of=/dev/fd0

zlilo: $(CONFIGURE) zImage

if [ -f /vmlinuz ]; then mv /vmlinuz /vmlinuz.old; fi

if [ -f /zSystem.map ]; then mv /zSystem.map /zSystem.old; fi

cat zImage > /vmlinuz

cp zSystem.map /

if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi

15) tools/zSystem: boot/head.o init/main.o tools/version.o linuxsubdirs

$(LD) $(LDFLAGS) -Ttext 100000 boot/head.o init/main.o

tools/version.o \

$(ARCHIVES) \

$(FILESYSTEMS) \

$(DRIVERS) \

$(LIBS) \

-o tools/zSystem

nm tools/zSystem | grep -v '\(compiled\)\|\(\.o$$\)\|\( a \)' | \

16) sort > zSystem.map

fs: dummy

$(MAKE) linuxsubdirs SUBDIRS=fs

lib: dummy

$(MAKE) linuxsubdirs SUBDIRS=lib

mm: dummy

$(MAKE) linuxsubdirs SUBDIRS=mm

ipc: dummy

$(MAKE) linuxsubdirs SUBDIRS=ipc

kernel: dummy

$(MAKE) linuxsubdirs SUBDIRS=kernel

drivers: dummy

$(MAKE) linuxsubdirs SUBDIRS=drivers

net: dummy

$(MAKE) linuxsubdirs SUBDIRS=net

clean:

rm -f kernel/ksyms.lst

rm -f core `find . -name '*.[oas]' -print`

rm -f core `find . -name 'core' -print`

rm -f zImage zSystem.map tools/zSystem tools/system

rm -f Image System.map boot/bootsect boot/setup

rm -f zBoot/zSystem zBoot/xtract zBoot/piggyback

rm -f .tmp* drivers/sound/configure

rm -f init/*.o tools/build boot/*.o tools/*.o

17) mrproper: clean

rm -f include/linux/autoconf.h tools/version.h

rm -f drivers/sound/local.h

rm -f .version .config* config.old

rm -f .depend `find . -name .depend -print`

distclean: mrproper

backup: mrproper

cd .. && tar cf - linux | gzip -9 > backup.gz

sync

depend dep:

touch tools/version.h

for i in init/*.c;do echo -n "init/";$(CPP) -M $$i;done > .tmpdepend

for i in tools/*.c;do echo -n "tools/";$(CPP) -M $$i;done >> .tmpdepend

set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i dep; done

rm -f tools/version.h

mv .tmpdepend .depend

ifdef CONFIGURATION

..$(CONFIGURATION):

@echo

@echo "You have a bad or nonexistent" .$(CONFIGURATION) ": running 'make" $(CONFI

GURATION)

@echo"'"

$(MAKE) $(CONFIGURATION)

@echo

@echo "Successful. Try re-making (ignore the error that follows)"

@echo

exit 1

18)dummy: ..$(CONFIGURATION)

else

19)dummy:

endif

#

# Leave these dummy entries for now to tell people that they are going away..

#

lilo:

@echo

@echo Uncompressed kernel images no longer supported. Use

@echo \"make zlilo\" instead.

@echo

@exit 1

Image:

@echo

@echo Uncompressed kernel images no longer supported. Use

@echo \"make zImage\" instead.

@echo

@exit 1

disk:

@echo

@echo Uncompressed kernel images no longer supported. Use

@echo \"make zdisk\" instead.

@echo

@exit 1


1) kernel version

2) make ½ÇÇà½Ã ÃÖÁ¾ÀûÀ¸·Î »ý¼ºµÉ µÎ ÆÄÀÏ. Verison, zImage

3) °¢ µð·ºÅ丮ÀÇ sub-makefile·Î ¸ðµç º¯¼ö°ªµéÀÌ Àü´ÞµÈ´Ù.

4) CONFIG_SHELLº¯¼ö¿¡ ¿ì¸®°¡ »ç¿ëÁßÀÎ shellÀ» ³Ö´Â´Ù.

(GNU MAKE MANUAL ¿¡¼­ shell FUNCTIONºÎºÐ ÂüÁ¶)

5) Ä¿³Î óÀ½ ÄÄÆÄÀϽà Çöµð·ºÅ丮¿¡ .depend .config°¡ ¾øÀ½À» È®ÀÎÇϰí make depend, make config¸¦ ½ÇÇàÇÒ¼ö ÀÖµµ·Ï ÇÑ´Ù.

# make depend

´Â »ý¼º½Ãų object fileÀÇ target°ú dependancy °ü°è¿¡ ´ëÇÑ Á¤º¸ fileÀÎ .dependÀ» »ý¼ºÇϰí

´ÙÀ½°ú °°Àº ¸Þ¼¼Áö¸¦ Ãâ·ÂÇÑ´Ù.

Successful. Try re-making (ignore the error that follows)

´Ù½Ã

# make

ÇÒ¶§´Â .depend fileÀÌ includeµÈ´Ù. ´ÙÀ½Àº main directory¿¡ ÀÖ´Â .depend fileÀÇ ³»¿ëÀÌ´Ù. .depend fileÀº sub-MakefileÀÌ ÀÖ´Â °¢ sub-directoryµé¿¡µµ »ý±ä´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á 9¹ø line°ú °°ÀÌ ¾Ï½ÃÀû ±ÔÄ¢(implicit rule)À» »ç¿ëÇÒ¶§ »ç¶÷ÀÌ taget°ú dependancy °ü°è¸¦ ÀÏÀÏÀÌ ÀÛ¼ºÇÏÁö ¾Ê¾Æµµ µÇ´Â °ÍÀÌ´Ù.

init/main.o : init/main.c /usr/lib/gcc-lib/i486-linux/2.5.8/include/stdarg.h

/usr/include/asm/system.h \

/usr/include/linux/segment.h /usr/include/asm/io.h /usr/include/linux/types.h \

/usr/include/linux/fcntl.h /usr/include/linux/config.h /usr/include/linux/autoconf.h \

/usr/include/linux/sched.h /usr/include/linux/tasks.h /usr/include/linux/head.h \

/usr/include/linux/fs.h /usr/include/linux/linkage.h /usr/include/linux/limits.h \

/usr/include/linux/wait.h /usr/include/linux/dirent.h /usr/include/linux/vfs.h \

/usr/include/linux/net.h /usr/include/linux/socket.h /usr/include/linux/sockios.h \

/usr/include/linux/pipe_fs_i.h /usr/include/linux/minix_fs_i.h

/usr/include/linux/ext_fs_i.h \

/usr/include/linux/ext2_fs_i.h /usr/include/linux/hpfs_fs_i.h

/usr/include/linux/msdos_fs_i.h \

/usr/include/linux/iso_fs_i.h /usr/include/linux/nfs_fs_i.h /usr/include/linux/nfs.h \

/usr/include/linux/xia_fs_i.h /usr/include/linux/sysv_fs_i.h

/usr/include/linux/minix_fs_sb.h \

/usr/include/linux/ext_fs_sb.h /usr/include/linux/ext2_fs_sb.h

/usr/include/linux/hpfs_fs_sb.h \

/usr/include/linux/msdos_fs_sb.h /usr/include/linux/iso_fs_sb.h

/usr/include/linux/nfs_fs_sb.h \

/usr/include/linux/xia_fs_sb.h /usr/include/linux/sysv_fs_sb.h /usr/include/linux/mm.h \

/usr/include/linux/page.h /usr/include/linux/errno.h /usr/include/linux/kernel.h \

/usr/include/linux/signal.h /usr/include/linux/time.h /usr/include/linux/param.h \

/usr/include/linux/resource.h /usr/include/linux/vm86.h /usr/include/linux/math_emu.h \

/usr/include/linux/tty.h /usr/include/linux/termios.h /usr/include/linux/unistd.h \

/usr/include/linux/string.h /usr/include/linux/timer.h /usr/include/linux/ctype.h \

/usr/include/linux/delay.h /usr/include/linux/utsname.h /usr/include/linux/ioport.h

tools/build.o : tools/build.c /usr/include/stdio.h /usr/include/features.h

/usr/include/sys/cdefs.h \

/usr/include/libio.h /usr/include/_G_config.h /usr/include/string.h

/usr/lib/gcc-lib/i486-linux/2.5.8/include/stddef.h \

/usr/include/stdlib.h /usr/include/errno.h /usr/include/linux/errno.h

/usr/lib/gcc-lib/i486-linux/2.5.8/include/float.h \

/usr/include/alloca.h /usr/include/sys/types.h /usr/include/linux/types.h

/usr/include/sys/stat.h \

/usr/include/linux/stat.h /usr/include/sys/sysmacros.h /usr/include/unistd.h \

/usr/include/posix_opt.h /usr/include/gnu/types.h /usr/include/fcntl.h

/usr/include/linux/fcntl.h \

/usr/include/linux/config.h /usr/include/linux/autoconf.h /usr/include/linux/a.out.h \

/usr/include/linux/page.h

tools/version.o : tools/version.c /usr/include/linux/config.h

/usr/include/linux/autoconf.h \

/usr/include/linux/utsname.h tools/./version.h

±×·±µ¥ 11¹ø line°ú 12¹ø lineÀÇ °æ¿ì¸¦ º¸ÀÚ. ÀÌ¹Ì ±ÔÄ¢(rule)ÀÌ ÀÛ¼ºµÇ¾î ÀÖ´Ù. ÀÌ·²¶§´Â ¸í½ÃÀû ±ÔÄ¢ÀÌ Àû¿ëµÈ´Ù. ¸í½ÃÀû ±ÔÄ¢ÀÌ ¾Ï½ÃÀû ±ÔÄ¢º¸´Ù ¿ì¼±Çϱ⠶§¹®ÀÌ´Ù.

6) 11¹ø lineÀÇ build½ÇÇà½Ã »ç¿ë.

7) ¿É¼Ç -W : warinig ¸Þ¼¼Áö Ãâ·Â.

-02 : ÃÖÀûÈ­. ¹Ý¸é¿¡ ÄÄÆÄÀÏ ½Ã°£ÀÌ ±æ¾îÁø´Ù.

-fomit-frame-ponter : frame pointer¸¦ ¿ä±¸ÇÏÁö ¾Ê´Â ÇÔ¼ö¿¡ ´ëÇØ¼­

´Â ·¹Áö½ºÅÍ¿¡ frame pointer¸¦ saveÇÏÁö ¸¶¶ó.

-pipe : ÄÄÆÄÀÏ »óÅ»çÀÌÀÇ ´ëÈ­¸¦ À§ÇØ ÀÓ½ÃÆÄÀÏÀÌ ¾Æ´Ñ ÆÄÀÌÇÁ¸¦

»ç¿ëÇ϶ó.

(GNU CC MANUAL ÂüÁ¶)

8) as86°ú as´Â 16 bit ¾î¼Àºí·¯¿Í 32 bit ¾î¼Àºí·¯¿¡ °¢°¢ ÇØ´çÇÑ´Ù. bootsect.S¿Í setup.S´Â as8 6¿¡ ÀÇÇØ, head.S´Â as¿¡ ÀÇÇØ ¾î¼Àºí¸µ(assembling)ÀÌ ÀÌ·ç¾îÁø´Ù. ld86°ú ldµµ ¶ÇÇÑ °°Àº ³» ¿ëÀÌ´Ù.

-E ¿É¼ÇÀº ÇÁ¸®ÇÁ·Î¼¼¼­(#include,#define)µîÀ» ¸ÕÀú ó¸®ÇÑÈÄ ÄÄÆÄÀÏÀ» ¸ØÃß¶ó´Â ÀǹÌÀÌ´Ù.

ÄÄÆÄÀÏÀº ¼ø¼­´ë·Î Ç¥<1.1>¿Í °°Àº °úÁ¤À» °ÅÄ£´Ù.


ÄÄÆÄÀÏ ¼ø¼­


°ú Á¤


ÀÛ ¾÷


gcc ¿É¼Ç

1

preprocessing

preprocessorÀ» ó¸®ÇÑÈÄ Á¤Áö

-E

2

compile proper

C code¸¦ ¾î¼Àºí¸® code·Î ¸¸µç

ÈÄ Á¤Áö

-S

3

assembling

object ¸ðµâ»ý¼º


4

link

object moduleµéÀ» ¹­¾î ½ÇÇà file

»ý¼º


<Ç¥1.1> ÄÄÆÄÀÏ °úÁ¤


10) make config½Ã ¼öÇà.

13) 15¹ø lineÀÇ tools/zSystemÀ» source·ÎÇÏ¿© zBootµð·ºÅ丮³»ÀÇ MakefileÀ» ´ë»óÀ¸·Î ÄÄÆÄÀÏ.

À̰÷¿¡¼­ ¾ÐÃàÀÌ ÀÌ·ç¾îÁ® compressed kernelÀÌ µÇµµ·Ï ÇÑ´Ù.

14) kernel image.

build¿¡ ÀÇÇØ ÄÄÆÄÀÏµÈ bootsect, setup, zSystemÀÌ ÇÕÃÄÁø´Ù.

15) 16) °¢ sub-directoryÀÇ ÄÄÆÄÀÏµÈ ¿ÀºêÁ§Æ®µéÀ» linkÇÑ´Ù. -Ttext ¿É¼ÇÀº Äڵ尡 ¸Þ¸ð¸®»ó¿¡

³õÀÌ´Â À§Ä¡¸¦ ÀǹÌÇÑ´Ù. ÃÖÁ¾ÀûÀ¸·Î kernelÀº 0x100000 byteÀÇ À§Ä¡¿¡ ³õÀÌ°Ô µÈ´Ù.

zSystem.map file¿¡´Â object file¿¡¼­ÀÇ symbolµéÀÌ ÀûÀçµÇ¸ç ÃʱâÇʵåÀÇ hexa°ªµé¿¡ ÀÇ ÇØ °¢ symbolµéÀÇ ¸Þ¸ð¸®³»¿¡¼­ÀÇ À§Ä¡(ÁÖ¼Ò°ª)¸¦ ¾Ë¼ö ÀÖ´Ù. ÀÌ fileÀº Ä¿³ÎÀ» ºÐ¼®Çϴµ¥ ÀÖ¾î ¸Å¿ì À¯¿ëÇÏ´Ù.

17) make cleanÀº depend file°ú config fileÀº ¾ø¾ÖÁö ¾Ê´Âµ¥ ¹ÝÇØ, À̰ÍÀº ¿ÏÀüÈ÷ kernel source ¸¸ ³²µµ·Ï ÇÑ´Ù.

18) 19) dummy¿Í ¾Õ¿¡¼­ »ç¿ëµÈ CONFIGURE´Â depend file°ú config fileÀÇ Á¸À縦 È®ÀÎÇϱâ À§ÇØ ÀÌ¿ëµÈ´Ù.

¡Ý /zBoot³»ÀÇ sub-Makefile

HEAD = head.o

SYSTEM = ../tools/zSystem

#LD = gcc

#TEST = -DTEST_DRIVER

1) zOBJECTS = $(HEAD) inflate.o unzip.o misc.o

CFLAGS = -O2 -DSTDC_HEADERS $(TEST)

2) .c.s:

$(CC) $(CFLAGS) -S -o $*.s $<

.s.o:

$(AS) -c -o $*.o $<

.c.o:

$(CC) $(CFLAGS) -c -o $*.o $<

3) all: zSystem

4) zSystem: piggy.o $(zOBJECTS)

$(LD) $(LDFLAGS) -o zSystem -Ttext 1000 $(zOBJECTS) piggy.o

head.o: head.s

5) head.s: head.S ../include/linux/tasks.h

$(CPP) -traditional head.S -o head.s

6) piggy.o: $(SYSTEM) xtract piggyback

./xtract $(SYSTEM) | gzip -9 | ./piggyback > piggy.o

7) $(SYSTEM):

$(MAKE) -C .. tools/zSystem

1) zSystem¿¡ µé¾î°¡´Â ³»¿ëÀÇ ¼ø¼­¸¦ ¾Ë¼ö ÀÖ´Ù. ¾ÐÃàÇìµå¿ëÆÄÀÏÀÎ head.S,¾ÐÃàÀ» Ç®±âÀ§ÇÑ ¾Ð ÃàÇÁ·Î±×·¥ ÄÚµå,tools/zSystem¾ÐÃàµÈ ³»¿ëÀÇ ¼ø¼­·Î µé¾î°¡°Ô µÈ´Ù. zOBJECTS´Â ±×¸²<1.2>¿¡ ¼­ ¾ÐÃàÇ®±â Äڵ忡 ÇØ´çÇÑ´Ù.

ºÎÆÃ½Ã bootsect.S,setup.S°¡ ¼öÇàµÇ°í ³ª¼­ ÀÌ head.S°¡ ¼öÇàµÇ¸é¼­ ¾ÐÃàÄڵ带 ÀÌ¿ëÇØ ¿©±â¼­ ¾ÐÃàÇß´ø tools/zSystemÀ» Ç®¾î ¿øÇÏ´Â À§Ä¡(¹°¸®¸Þ¸ð¸® 0x100000<1M>)¿¡ °®´Ù ³õ°í boot/he -ad.S°¡ ¼öÇàµÈ´Ù.

¡ß kernelÀÌ ½ÃÀ۵Ǵ ¸Þ¸ð¸®¹øÁö¿¡ ´ëÇØ

zSystem.map³»ÀÇ startup_32ÀÇ ¹øÁö¸¦ º¸ÀÚ.

00100000 t startup_32

001000c0 t isnew

001000e7 t is486

................................

±×¸®°í, main-MakefileÀÇ 13¹ø line¿¡ ´ÙÀ½°ú °°Àº ¿ì¸®ÀÇ ±ÔÄ¢À» Ãß°¡½ÃÄÑ zSystem2.mapÀ» »ý¼º½ÃÄÑ º¸¾Ò´Ù.

zBoot/zSystem: zBoot/*.c zBoot/*.S tools/zSystem

$(MAKE) -C zBoot

nm zBoot/zSystem | grep -v '\(compiled\)\|\(\.o$$\)\|\( a \)' | \

sort > zSystem2.map

»ý¼ºµÈ zSystem2.map³»ÀÇ startup_32ÀÇ ¹øÁö¸¦ º¸ÀÚ

00001000 t startup_32

00001058 T _huft_build

00001658 T _huft_free

.........................................

zSystem.map³»ÀÇ startup_32´Â boot/head.S¿¡ ÀÖ´Â symbol·Î¼­ ½ÇÁ¦ kernelÀÌ ½ÃÀ۵Ǵ ¹øÁö ¸¦ °¡¸®Å°¸ç, ¿ì¸®°¡ ¸¸µç zSystem2.map³»ÀÇ startup_32´Â zBoot/head.S³»ÀÇ symbol·Î¼­ ¾Ð Ãà kernelÀÌ ³õ¿©Áú ¹øÁö¸¦ ³ªÅ¸³»°í ÀÖ´Ù.

2) -S¿É¼ÇÀº ¾î¼Àºí¸®¾î source¸¦ »ý¼ºÈÄ Stop

gccÀÇ -c ¿É¼ÇÀº compiling, ¶Ç´Â assemblingÈÄ¿¡ Á¤Áö, Áï link´Â ÇÏÁö ¸»¶ó´Â ÀǹÌ.

3) zSystemÀÌ ÃÖÁ¾»ý¼ºÆÄÀÏ.

4) 0x1000¹øÁö¸¦ text segment·Î linkÇÔÀ¸·Î½á ÀÌ ¹øÁö°¡ Ãʱ⿡ ¾ÐÃàµÈ kernelÀÌ ³õÀÌ´Â °÷ÀÌ µÈ´Ù.

5) -traditinal¿É¼ÇÀº ÀüÇüÀûÀÎ C compilerÀÇ Æ¯Â¡À» Áö¿øÇÑ´Ù.

(ÀÚ¼¼ÇÑ °ÍÀº GNU CC MANUALÂüÁ¶)

6) ¿©±â¼­ zSystemÀ» ¾ÐÃàÇÑ´Ù.

tools/zSystem¿¡´Â boot/bootsect.S¿Í boot/setup.S¸¦ Á¦¿ÜÇÑ boot/head.S¿Í ³ª¸ÓÁö ¸ðµç ker -nel sourceµéÀÌ ÄÄÆÄÀÏµÇ¾î µé¾î°£´Ù. (main Makefile 12¹ø line)

7) -C¿É¼ÇÀÇ µð·ºÅ丮(¿©±â¼­´Â ..)·Î directory changeÈÄ make. tools/zSystemÀÌ ¸¸µé¾îÁöµµ·Ï ÇÑ´Ù.

°á°ú·Î¼­ »ý±â´Â zImage fileÀÇ ±¸Á¶´Â ±×¸²<1.2>°ú °°´Ù.