|
include .depend include .config include arch/i386/Makefile vmlinux: linux/vmlinux üretir /* "stext" giriş noktası arch/i386/kernel/head.S dosyasında tanımlı*/ $(LD) -T $(TOPDIR)/arch/i386/vmlinux.lds -e stext /* $(HEAD) */ + from arch/i386/Makefile arch/i386/kernel/head.o arch/i386/kernel/init_task.o init/main.o init/version.o init/do_mounts.o --start-group /* $(CORE_FILES) */ + from arch/i386/Makefile arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o /* $(DRIVERS) */ drivers/... char/char.o block/block.o misc/misc.o net/net.o media/media.o cdrom/driver.o and other static linked drivers + from arch/i386/Makefile arch/i386/math-emu/math.o (ifdef CONFIG_MATH_EMULATION) /* $(NETWORKS) */ net/network.o /* $(LIBS) */ + from arch/i386/Makefile arch/i386/lib/lib.a lib/lib.a --end-group -o vmlinux $(NM) vmlinux | grep ... | sort > System.map tags: vim için linux/tags üretir modules: modülleri üretir modules_install: modülleri kurar clean mrproper distclean: derlemenin yapıldığı dizini temizler psdocs pdfdocs htmldocs mandocs: çekirdek belgelerini üretir include Rules.make rpm: bir rpm üretir
/* i386 Linux çekirdeği oluşturmak için ld betiği * Martin Mares <mj@atrey.karlin.mff.cuni.cz> tarafından yazılmıştır; */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) /* "ENTRY" linux/Makefile içinde "-e stext" komut satırı seçeneği ile değiştirilir */ ENTRY(_start) /* Çıktı dosyası (linux/vmlinux) yerleşimi. * Bakınız Using LD, the GNU linker: Specifying Output Sections */ SECTIONS { /* Çıktı bölümü .text 3G+1M adresinden başlar. * Bakınız Using LD, the GNU linker: The Location Counter */ . = 0xC0000000 + 0x100000; _text = .; /* Metin ve salt okunur veri */ .text : { *(.text) *(.fixup) *(.gnu.warning) } = 0x9090 /* Tahsis edilmemiş oyuklar 0x9090 ile doldurulur, örn. "NOP NOP" için opcode. * Bakınız Using LD, the GNU linker: Optional Section Attributes */ _etext = .; /* text bölümünün sonu */ .rodata : { *(.rodata) *(.rodata.*) } .kstrtab : { *(.kstrtab) } /* Sonraki 16 baytlık sınıra hizalandı. * Bakınız Using LD, the GNU linker: Arithmetic Functions */ . = ALIGN(16); /* Olağandışılık tablosu */ __start___ex_table = .; __ex_table : { *(__ex_table) } __stop___ex_table = .; __start___ksymtab = .; /* Çekirdek sembol tablosu */ __ksymtab : { *(__ksymtab) } __stop___ksymtab = .; .data : { /* Veri */ *(.data) CONSTRUCTORS } /* "CONSTRUCTORS" için bakınız: * Using LD, the GNU linker: Option Commands */ _edata = .; /* data bölümünün sonu */ . = ALIGN(8192); /* init_task */ .data.init_task : { *(.data.init_task) } . = ALIGN(4096); /* Init kodu ve veri */ __init_begin = .; .text.init : { *(.text.init) } .data.init : { *(.data.init) } . = ALIGN(16); __setup_start = .; .setup.init : { *(.setup.init) } __setup_end = .; __initcall_start = .; .initcall.init : { *(.initcall.init) } __initcall_end = .; . = ALIGN(4096); __init_end = .; . = ALIGN(4096); .data.page_aligned : { *(.data.idt) } . = ALIGN(32); .data.cacheline_aligned : { *(.data.cacheline_aligned) } __bss_start = .; /* BSS */ .bss : { *(.bss) } _end = . ; /* Çıktı bölümü /DISCARD/ son ilintileme çıktısına dahil edilmeyecektir. * Bakınız Using LD, the GNU linker: Section Definitions */ /* Çıkarılacak bölümler */ /DISCARD/ : { *(.text.exit) *(.data.exit) *(.exitcall.exit) } /* Aşağıdaki çıktı bölümleri 0. bellek konumuna adreslenmiştir. * Bakınız Using LD, the GNU linker: Optional Section Attributes */ /* Stab hata ayıklama bölümleri. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } }
Hedef | Komut |
---|---|
zImage[a] | @$(MAKE) -C arch/i386/boot zImage[b] |
bzImage | @$(MAKE) -C arch/i386/boot bzImage |
zlilo | @$(MAKE) -C arch/i386/boot BOOTIMAGE=zImage zlilo |
bzlilo | @$(MAKE) -C arch/i386/boot BOOTIMAGE=bzImage zlilo |
zdisk | @$(MAKE) -C arch/i386/boot BOOTIMAGE=zImage zdisk |
bzdisk | @$(MAKE) -C arch/i386/boot BOOTIMAGE=bzImage zdisk |
install | @$(MAKE) -C arch/i386/boot BOOTIMAGE=bzImage install |
[a] zImage mahlası: sıkıştırılmış; [b]
-C makefile'ları okumadan önce dizin değiştirmek için kullanılan bir make komut satırı seçeneğidir.
|
OBJCOPY=$(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S
LIBS := $(TOPDIR)/arch/i386/lib/lib.a $(LIBS) $(TOPDIR)/arch/i386/lib/lib.a
Hedef | Komut |
---|---|
zImage | $(OBJCOPY) compressed/vmlinux compressed/vmlinux.out tools/build bootsect setup compressed/vmlinux.out $(ROOT_DEV) > zImage |
bzImage | $(OBJCOPY) compressed/bvmlinux compressed/bvmlinux.out tools/build -b bbootsect bsetup compressed/bvmlinux.out $(ROOT_DEV) \ > bzImage |
zdisk | dd bs=8192 if=$(BOOTIMAGE) of=/dev/fd0 |
zlilo | if [ -f $(INSTALL_PATH)/vmlinuz ]; then mv $(INSTALL_PATH)/vmlinuz $(INSTALL_PATH)/vmlinuz.old; fi if [ -f $(INSTALL_PATH)/System.map ]; then mv $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi cat $(BOOTIMAGE) > $(INSTALL_PATH)/vmlinuz cp $(TOPDIR)/System.map $(INSTALL_PATH)/ if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi |
install | sh -x ./install.sh $(KERNELRELEASE) $(BOOTIMAGE) $(TOPDIR)/System.map "$(INSTALL_PATH)" |
Hedef: Öngereksinimler | Komut |
---|---|
compressed/vmlinux: linux/vmlinux | @$(MAKE) -C compressed vmlinux |
compressed/bvmlinux: linux/vmlinux | @$(MAKE) -C compressed bvmlinux |
tools/build: tools/build.c | $(HOSTCC) $(HOSTCFLAGS) -o $@ $< -I$(TOPDIR)/include[a] |
bootsect: bootsect.o | $(LD) -Ttext 0x0 -s --oformat binary bootsect.o[b] |
bootsect.o: bootsect.s | $(AS) -o $@ $< |
bootsect.s: bootsect.S ... | $(CPP) $(CPPFLAGS) -traditional $(SVGA_MODE) $(RAMDISK) $< -o $@ |
bbootsect: bbootsect.o | $(LD) -Ttext 0x0 -s --oformat binary $< -o $@ |
bbootsect.o: bbootsect.s | $(AS) -o $@ $< |
bbootsect.s: bootsect.S ... | $(CPP) $(CPPFLAGS) -D__BIG_KERNEL__ -traditional $(SVGA_MODE) $(RAMDISK) $< -o $@ |
setup: setup.o | $(LD) -Ttext 0x0 -s --oformat binary -e begtext -o $@ $< |
setup.o: setup.s | $(AS) -o $@ $< |
setup.s: setup.S video.S ... | $(CPP) $(CPPFLAGS) -D__ASSEMBLY__ -traditional $(SVGA_MODE) $(RAMDISK) $< -o $@ |
bsetup: bsetup.o | $(LD) -Ttext 0x0 -s --oformat binary -e begtext -o $@ $< |
bsetup.o: bsetup.s | $(AS) -o $@ $< |
bsetup.s: setup.S video.S ... | $(CPP) $(CPPFLAGS) -D__BIG_KERNEL__ -D__ASSEMBLY__ -traditional $(SVGA_MODE) $(RAMDISK) $< -o $@ |
[a] "$@" hedef anlamındadır, "$<" ilk öngereksinim anlamındadır; Bakınız GNU make: Automatic Variables; [b]
--oformat binary çalıştırılabilirin bellek dökümüne eşdeğer bir ham ikilik çıktı arar; Bakınız Using LD, the GNU linker: Command Line Options. |
Hedef | Komut |
---|---|
vmlinux[a] | $(LD) -Ttext 0x1000 -e startup_32 -o vmlinux head.o misc.o piggy.o |
bvmlinux | $(LD) -Ttext 0x100000 -e startup_32 -o bvmlinux head.o misc.o piggy.o |
head.o | $(CC) $(AFLAGS) -traditional -c head.S |
misc.o | $(CC) $(CFLAGS) ¬ -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) ¬ -c misc.c[b] |
piggy.o | tmppiggy=_tmp_$$$$piggy; \ rm -f $$tmppiggy $$tmppiggy.gz $$tmppiggy.lnk; \ $(OBJCOPY) $(SYSTEM) $$tmppiggy; \ gzip -f -9 < $$tmppiggy > $$tmppiggy.gz; \ echo "SECTIONS { .data : { input_len = .; \ LONG(input_data_end - input_data) input_data = .; \ *(.data) input_data_end = .; }}" > $$tmppiggy.lnk; \ $(LD) -r -o piggy.o -b binary $$tmppiggy.gz -b elf32-i386 \ -T $$tmppiggy.lnk; \ rm -f $$tmppiggy $$tmppiggy.gz $$tmppiggy.lnk |
[a] Hedef vmlinux burada linux/Makefile içinde tanımlanana göre değişiktir; [b] "subst" bir MAKE işlevidir; Bakınız GNU make: Functions for String Substitution and Analysis. |
tools/build bootsect setup compressed/vmlinux.out $(ROOT_DEV) > zImage tools/build -b bbootsect bsetup compressed/bvmlinux.out $(ROOT_DEV) > bzImage
Offset | Byte | Değişken | Komut |
---|---|---|---|
1F1 (497) | 1 | setup_sectors | kurulum sektörleri sayısı, >=4 |
1F4 (500) | 2 | sys_size | system size in 16-bytes cinsinden sistem boyutu, küçük-biten |
1FC (508) | 1 | minor_root | root dev minor |
1FD (509) | 1 | major_root | root dev major |
|