07.01.2013 Views

Linux i386 Önyükleme Kodu NASIL

Linux i386 Önyükleme Kodu NASIL

Linux i386 Önyükleme Kodu NASIL

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Linux</strong> <strong>i386</strong> <strong>Önyükleme</strong> <strong>Kodu</strong> <strong>NASIL</strong><br />

2.5. linux/arch/<strong>i386</strong>/boot/compressed/Makefile<br />

Bu dosya görüntüsünün sıkı¸stırılıp çözülmesi mekanizmasını yerine getirir.<br />

Sıkı¸stırma/çözmeyi önyükleme kodundan ayırmak iyidir. Bu böl–ve–yönet çözümü bizim sıkı¸stırma/çözme<br />

mekanizmasını kolayca geli¸stirmemize veya yeni bir önyükleme yöntemi uyarlamamıza imkan sa˘glar.<br />

linux/arch/<strong>i386</strong>/boot/compressed/ dizini head.S ve misc.c dosyalarını içerir.<br />

linux/arch/<strong>i386</strong>/boot/compressed/Makefile içindeki hedefler<br />

Hedef Komut<br />

vmlinux (5) $(LD) –Ttext 0x1000 –e startup_32 –o vmlinux head.o misc.o<br />

piggy.o<br />

bvmlinux $(LD) –Ttext 0x100000 –e startup_32 –o bvmlinux head.o misc.o<br />

piggy.o<br />

head.o $(CC) $(AFLAGS) –traditional –c head.S<br />

misc.o $(CC) $(CFLAGS) ¬<br />

–DKBUILD_BASENAME=$(subst $(comma),_,$(subst –,_,$(*F))) ¬<br />

–c misc.c (6)<br />

piggy.o tmppiggy=_tmp_$$$$piggy; \<br />

rm –f $$tmppiggy $$tmppiggy.gz $$tmppiggy.lnk; \<br />

$(OBJCOPY) $(SYSTEM) $$tmppiggy; \<br />

gzip –f –9 < $$tmppiggy > $$tmppiggy.gz; \<br />

echo "SECTIONS { .data : { input_len = .; \<br />

LONG(input_data_end – input_data) input_data = .; \<br />

*(.data) input_data_end = .; }}" > $$tmppiggy.lnk; \<br />

$(LD) –r –o piggy.o –b binary $$tmppiggy.gz –b elf32–<strong>i386</strong> \<br />

–T $$tmppiggy.lnk; \<br />

rm –f $$tmppiggy $$tmppiggy.gz $$tmppiggy.lnk<br />

piggy.o input_len de˘gi¸skeninini ve gzip ile sıkı¸stırılmı¸s linux/vmlinux’ı içerir. input_len<br />

piggy.o’nun ba¸sında yer alır ve input_len’in kendisi hariç piggy.o’nun boyutuna e¸sittir. piggy.o<br />

ba˘glayıcı beti˘ginde geni¸s açıklamalar için bakınız Using LD, the GNU linker: Section Data Expressions (B23) .<br />

Tam olarak söylemek gerekirse objcopy tarafından üretilen gzip ile sıkı¸stırılmı¸s olan linux/vmlinux’un<br />

kendisi (ELF biçiminde) de˘gil onun ikili görüntüsüdür. Dikkat ederseniz $(OBJCOPY),<br />

linux/arch/<strong>i386</strong>/Makefile linux/arch/<strong>i386</strong>/Makefile (sayfa: 7) içerisinde –O binary seçene˘gini<br />

kullanarak ham ikili çıktı almak için yeniden tanımlanmı¸stır.<br />

{bootsect, setup} veya {bbootsect, bsetup} ba˘glandı˘gı zaman, $(LD) onların ikili biçimde çıktı<br />

alınması için ––oformat binary seçene˘gini belirtir. zImage (veya bzImage) yapıldı˘gında, $(OBJCOPY)<br />

compressed/vmlinux (veya compressed/bvmlinux)’dan da bir ara ikili çıktı üretir. zImage veya<br />

bzImage’ın tüm bile¸senlerinin ham ikili biçimde olması görüntünün kendi kendini bir yükleyiciye ba¸svurmadan<br />

yükleyebilmesi ve yerle¸stirebilmesi için elzemdir.<br />

Hem vmlinux hem de bvmlinux head.o ve misc.o’yu piggy.o’dan önce hazırlar, fakat farklı ba¸slangıç<br />

adreslerine (0x1000 ve 0x100000) ba˘glanırlar.<br />

2.6. linux/arch/<strong>i386</strong>/tools/build.c<br />

linux/arch/<strong>i386</strong>/tools/build.c zImage veya bzImage üretmek için konak aracıdır.<br />

linux/arch/<strong>i386</strong>/boot/Makefile içinde:<br />

tools/build bootsect setup compressed/vmlinux.out $(ROOT_DEV) > zImage<br />

http://belgeler.org <strong>Linux</strong> Kitaplı˘gı 10 / 77

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!