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