Gömülü Linux
  • Giriş
  • Linux Çekirdeği
    • Gömülü Sistemlerdeki Kullanımı
    • Geliştirme Süreci ve Versiyonlar
    • Kod Sözdizim Rehberi
    • Konfigürasyon Süreci ve Kbuild Sistemi
    • Derleme ve Çapraz Derleme
    • Initramfs İmajının Eklenmesi
    • U-boot İmajı Haline Getirilmesi
  • Gömülü Sistemlerde Boot Yükleyiciler
    • U-boot
    • RedBoot
    • ARM Mimarisinde Açılış Süreci
  • Linux Açılış Süreci
    • Kernel Açılış Süreci
    • Kullanıcı Kipine Geçiş - Init Süreci
  • Kök Dosya Sistemi Oluşturma
  • Initramfs İle Erken Kullanıcı Kipi
  • Devtmpfs Dosya Sistemi
  • NfsRoot Çalışma Yöntemi
  • Çapraz Derleme ve Gerekli Ekipmanlar
  • NOR, NAND, eMMC ve Flash Tabanlı Depolama
  • Memory Technology Device - MTD Katmanı
  • Unsorted Block Images - UBI Katmanı
  • Gömülü Sistemlerde Kullanılan Dosya Sistemleri
    • JFFS2 Dosya Sistemi
    • YAFFS2 Dosya Sistemi
    • UBIFS Dosya Sistemi
    • Cramfs Dosya Sistemi
    • Squashfs Dosya Sistemi
    • Minix Dosya Sistemi
    • FAT Dosya Sistemi
    • Ext2,3,4 Dosya Sistemi
  • Watchdog Kullanımı
  • CPU Frequency Scaling
  • Buildroot
  • Android Platformu
    • Geliştirme Ortamının Hazırlanması
    • İnşa Süreci
  • Sistem Çağrıları
  • I2C Protokolü
    • I2C Protokolünün Tanıtılması
    • Linux Altında I2C İşlemleri
    • Board Seçimi ve İlk İşlemler
    • Sıcaklık Sensörünün Seçilmesi
    • Sıcaklık Değerinin Yazılımsal Olarak Elde Edilmesi
  • Strace Kullanımı
  • GNU Build Sistemi Araçları
    • Make
    • Autoconf, Automake
  • Orange Pi Zero
    • Orange Pi Zero Teknik Özellikleri
    • Gerekli Araçların Elde Edilmesi
    • U-boot Derleme Süreci
    • Kernel Derleme Süreci
    • Wifi Desteği - Problemli Senaryo Örneği
    • Dosya Sisteminin Hazırlanması
    • SD Kartın Hazırlanması
    • Cihazın Açılması
  • Raspberry Pi
    • Raspberry Pi 2 Teknik Özellikleri
    • Açılış Süreci
    • Gerekli Araçların Elde Edilmesi
    • Kernel Derleme Süreci
    • U-boot Derleme Süreci
    • Dosya Sisteminin Hazırlanması
    • Cihazın Açılması
    • NFS Root Çalışma
    • Sistem Konfigürasyonu
    • Raspberry Pi 3
  • Board Spesifik Kılavuzlar
    • Hawkboard
    • Olimex A20
    • TI DM6446 EVM
    • BeagleBoard
    • BeagleBoneBlack
    • Savage Board
  • EKLER
    • Seri Konsol Kullanımı
    • TFTP Sunucu Kurulumu
    • NFS Sunucu Kurulumu
    • TI işlemcilerinde DSP kullanımı
      • C6Run
      • DSP Testi
    • Ubuntu Sanal Makine Performansı
Powered by GitBook
On this page
  • Paralel Derleme
  • Çapraz Derleme

Was this helpful?

  1. Linux Çekirdeği

Derleme ve Çapraz Derleme

Konfigürasyon süreci tamamlandıktan ve herhangi bir yolla .config dosyası kernel kaynak kodlarının bulunduğu ana dizinde oluşturulduktan sonra derleme aşamasına geçilir.

Derleme işlemi sonucunda işlemin yapıldığı sistem için çalışacak native kernel imajı elde edilebileceği gibi, çapraz derleme (cross-compiling) metoduyla farklı bir mimari için imaj üretimi de sağlanabilir.

Normal derleme işlemi için make komutunu vermeniz yeterlidir. Öncelikle ana dizinde yer alan Makefile dosyası okunacak ve .config dosyasında yapılan seçimler export edilerek derleme sürecinin ilerleyen aşamalarında kullanılabilir olması sağlanacaktır.

Kernel imajı sıkıştırılmadığında biraz büyükçe olduğundan her zaman sıkıştırılmış formda kullanılır. Bunun için kernel imajı içerisinde kendi kendini decompress edebilecek bir rutin eklenir ve kernel imajı sıkıştırılmış haliyle kullanılır.

Bu süreci otomatik hale getirmek için PC mimarisi için yapılan derlemeler için bzImage hedefi kullanılmaktadır:

$ make bzImage

Komut işletilirken build işleminin çıktıları aşağıdaki gibi olacaktır:

...
CC      arch/arm/kernel/topology.o
CC      arch/arm/kernel/io.o
AS      arch/arm/kernel/debug.o
CC      arch/arm/kernel/early_printk.o
LD      arch/arm/kernel/built-in.o
AS      arch/arm/kernel/head.o
LDS     arch/arm/kernel/vmlinux.lds
...

Bu özet çıktı yerine çalıştırılan derleyici, linker vb. tüm aldığı parametreleri görmek isterseniz, make komutunun sonuna V=1 parametresini ekleyebilirsiniz (verbosity):

$ make bzImage V=1
...
gcc -Wp,-MD,arch/x86/crypto/.aes-x86_64-asm_64.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.9/include
-I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated 
-Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi 
-I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h 
-D__KERNEL__  -D__ASSEMBLY__ -m64 -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 
-DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 
-DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1  -Wa,-gdwarf-2  -mfentry 
-DCC_USING_FENTRY -DMODULE -c -o arch/x86/crypto/aes-x86_64-asm_64.o
arch/x86/crypto/aes-x86_64-asm_64.S
...

Derleme işlemi bittiğinde bzImage dosyası oluşur. Bu dosya vmlinux kernel imajının sıkıştırılmış halini ve decompress rutinini içerir.

Derleme işlemi çıktısının son bölümü aşağıdaki gibi bir çıktı üretecektir:

  LINK    vmlinux
  LD      vmlinux.o
  MODPOST vmlinux.o
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  KSYM    .tmp_kallsyms1.o
  KSYM    .tmp_kallsyms2.o
  LD      vmlinux
  SORTEX  vmlinux
  SYSMAP  System.map
  CC      arch/x86/boot/a20.o
  AS      arch/x86/boot/bioscall.o
  CC      arch/x86/boot/cmdline.o
  AS      arch/x86/boot/copy.o
  HOSTCC  arch/x86/boot/mkcpustr
  CC      arch/x86/boot/cpuflags.o
  CC      arch/x86/boot/cpucheck.o
  CC      arch/x86/boot/early_serial_console.o
  CC      arch/x86/boot/edd.o
  VOFFSET arch/x86/boot/voffset.h
  CC      arch/x86/boot/main.o
  CC      arch/x86/boot/mca.o
  LDS     arch/x86/boot/compressed/vmlinux.lds
  AS      arch/x86/boot/compressed/head_64.o
  CC      arch/x86/boot/compressed/misc.o
  CC      arch/x86/boot/memory.o
  CC      arch/x86/boot/compressed/string.o
  CC      arch/x86/boot/compressed/cmdline.o
  OBJCOPY arch/x86/boot/compressed/vmlinux.bin
  HOSTCC  arch/x86/boot/compressed/mkpiggy
  CC      arch/x86/boot/compressed/cpuflags.o
  CC      arch/x86/boot/compressed/early_serial_console.o
  CC      arch/x86/boot/pm.o
  AS      arch/x86/boot/pmjump.o
  CC      arch/x86/boot/printf.o
  CC      arch/x86/boot/compressed/eboot.o
  AS      arch/x86/boot/compressed/efi_stub_64.o
  CC      arch/x86/boot/regs.o
  CC      arch/x86/boot/string.o
  CC      arch/x86/boot/tty.o
  CC      arch/x86/boot/video.o
  CC      arch/x86/boot/video-mode.o
  CC      arch/x86/boot/version.o
  CC      arch/x86/boot/video-vga.o
  XZKERN  arch/x86/boot/compressed/vmlinux.bin.xz
  CC      arch/x86/boot/video-vesa.o
  CC      arch/x86/boot/video-bios.o
  HOSTCC  arch/x86/boot/tools/build
  CPUSTR  arch/x86/boot/cpustr.h
  CC      arch/x86/boot/cpu.o
  MKPIGGY arch/x86/boot/compressed/piggy.S
  AS      arch/x86/boot/compressed/piggy.o
  LD      arch/x86/boot/compressed/vmlinux
  ZOFFSET arch/x86/boot/zoffset.h
  OBJCOPY arch/x86/boot/vmlinux.bin
  AS      arch/x86/boot/header.o
  LD      arch/x86/boot/setup.elf
  OBJCOPY arch/x86/boot/setup.bin
  BUILD   arch/x86/boot/bzImage
Setup is 17388 bytes (padded to 17408 bytes).
System is 3131 kB
CRC 43b226da
Kernel: arch/x86/boot/bzImage is ready  (#1)

İşlem bitiminde kullanacağımız kernel imaj dosyası arch/x86/boot dizini altında oluşur.

Diğer mimariler için derleme yaptığımızda arch/<mimari>/boot dizini altında oluşacaktır.

Derleme sürecini yönettiğimiz kernel ana dizininde ise vmlinux adında bir dosya oluştuğunda dikkat ediniz. Bu dosya kernel imajının sıkıştırılmamış halidir:

$ ls -lh vmlinux
-rwxr-xr-x 1 demirten demirten 120M May 16 07:58 vmlinux

$ file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked,
BuildID[sha1]=f6c3556c7b74f9b300b03275831a4b716d18ee9e, not stripped

$ ls -lh arch/x86/boot/bzImage 
-rw-r--r-- 1 demirten demirten 3.1M May 16 07:58 arch/x86/boot/bzImage

Görüldüğü üzere sıkıştırılmamış hali 120 MB iken, sıkıştırılmış hali 3.1 MB seviyelerindedir.

Kernel imajı üretildikten sonra modüllerin derlenmesi ve uygun dizin yapısı ile sistemde oluşturulması gerekir. Bu işlemler için modules ve modules_install make hedefleri kullanılır:

$ make modules
$ make modules_install

modules_install hedefi, modüllere ait dizin yapısını öntanımlı olarak derlemenin yapıldığı sistemde, /lib/modules/<KERNEL-VERSION> dizini altında oluşturacaktır. Eğer derlediğimiz kernel imajını kendi sistemimizde kullanmak istemiyorsak (çapraz derleme vb.) modulleri ayrı bir dizine install etmemiz gerekir. Bunun için INSTALL_MOD_PATH değişkenini aşağıdaki gibi kullanmalısınız:

$ make modules_install INSTALL_MOD_PATH=/tmp/modules

İşlem sonucunda tüm modüller /tmp/modules dizini altındaki dizin yapıları içerisinde oluşturulacaktır.

Paralel Derleme

Derleme süreci oldukça cpu yoğun bir işlemdir. Ek bir parametre verilmemesi halinde sadece tek bir cpu core kullanılır. Oysa kernel içerisindeki Makefile dosyaları paralel derlemeye imkan verecek şekilde düzenlenmiştir. Birden fazla cpu core var ise, bunları maksimum düzeyde kullanmak ve derleme sürecini çok daha çabuk sonuçlandırmak için, paralel derleme yöntemini uygulayabilirsiniz. Bu yöntemde kaç adet paralel derleme süreci olacağını -j N parametresi ile verebilirsiniz.

Genel bir yaklaşım, sistemdeki tüm kapasiteyi kullanmak istiyorsanız cpu core sayısının 2 katı kadar bir değer kullanmak yönündedir. Bunun sebebi derleme sürecinde arada gcc dışında da betik uygulamaları vb. çalıştığından tam olarak cpu core sayısı verildiğinde atıl kalan bir kapasite olmasıdır. 2 katı gibi bir değer verildiğinde sistemin tüm performansından faydalanabilirsiniz:

$ make bzImage -j 8

Çapraz Derleme

PreviousKonfigürasyon Süreci ve Kbuild SistemiNextInitramfs İmajının Eklenmesi

Last updated 5 years ago

Was this helpful?