| ||||||
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 |
| |||||||||