¡Ý 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 »ý¼º |
|
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>°ú °°´Ù.