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
  • Konfigürasyon
  • Derleme

Was this helpful?

  1. Android Platformu

İnşa Süreci

Android build sistemi, açık kaynak dünyasında kendisinden önceki projelerden önemli farklılıklar içermektedir. İyi ve kötü yanlarını bir kenara bırakıp bu sistemin genel olarak öğrenilmesinde fayda vardır.

Build süreci geleneksel make uygulaması ile çalışır. Bu yönüyle bir benzerlik taşıdığı düşünülebilirse de, esasen tek benzerlik bundan ibaret olup, make sistematiği alışılagelmişin dışında kullanılır.

Açık kaynak dünyasında bu denli büyük projelerde genellikle en üst dizinde bir ana Makefile bulunur. Build sürecinin bileşenlerinin seçimi ve diğer özelleştirmeler, ana dizinde yer alan bir konfigürasyon dosyasında tutulur (.config). Konfigürasyon dosyasının üretimi görece uzun ve detaylı bir işlem olduğundan, bu süreci kolaylaştıracak çeşitli araçlar sunulur (menuconfig, xconfig, sistem içi yardım vb.). Ana dizindeki Makefile, .config dosyasını işler, alt dizinleri recursive olarak dolaşır ve yapılan seçimler doğrultusunda alt dizinlerde yer alan Makefile dosyalarını da make ile işler.

Android build sisteminde ise ana dizinde genel bir Makefile ve konfigürasyon dosyası bulunmaz. Alt dizinler dolaşılıp her birindeki Makefile dosyaları üzerinden make de işletilmeye çalışılmaz. Bunun yerine, dizin ve alt dizinlerde, Android.mk dosyası aranır. Bu make uygulaması için hazırlanmış bir Makefile dosyasıdır. Eğer bir dizinde Android.mk bulunur ise make ile işlenir ve bu noktadan sonra, dosyanın bulunduğu dizinin alt dizinlerinde arama işlemi devam etmez. Yani Android.mk bulunduğunda, daha derinlerdeki dizinlere inilmez. Bir üst seviyedeki dizinlerin aranmasına ve oralarda bulunan Android.mk dosyalarının aynı şekilde işlenmesine devam edilir.

Konfigürasyon

Build işlemine başlarken öncelikle envsetup.sh betiği çalışılan kabuk içerisinde işletilir:

$ source build/envsetup.sh

Daha sonra lunch komutuyla üretilecek hedef imaja ait parametreler belirtilir. Girilecek parametrenin formatı BUILD-BUILDTYPE şeklinde olup aşağıdaki tabloya göre belirlenebilir:

Build İsmi

Cihaz

Açıklama

aosp_arm

ARM emülator

Tüm uygulamalar, diller ve giriş yöntemleri aktif bir imaj

aosp_maguro

maguro

Galaxy Nexus GSM/HSPA+ ("maguro") imajı

aosp_panda

panda

PandaBoard üzerinde çalışacak imaj

Build tipleri ise aşağıdakilerden biri olabilir:

Build Tipi

Kullanım Amacı

user

Nihai ürün kullanımına uygun, kısıtlı erişim

userdebug

Root erişimin ve debug imkanın eklendiği "user" tipi

eng

Ek debug araçlarıyla zenginleştirilmiş geliştiricilere yönelik

Şimdi geliştiricilere yönelik ARM emülatorü üzerinde çalışacak imajımızı üretmeye başlayalım:

$ lunch aosp_arm-eng

Yukarıdaki komutun çalışması bittiğinde, ayarlanan değişkenlerle ilgili aşağıdaki gibi bir çıktı verilecektir:

PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=5.0.50.50.50.50
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.16.0-4-amd64-x86_64-with-debian-jessie-sid
HOST_BUILD_TYPE=release
BUILD_ID=AOSP
OUT_DIR=out

Not: Herhangi bir parametre verilmediğinde lunch uygulaması seçim yapabilmemiz için bizi yönlendirecektir.

Derleme

Derleme süreci oldukça fazla zaman alacaktır. Bu nedenle ccache gibi bir compiler cache sistemi kullanılmasında fayda vardır.

Bunun için USE_CCACHE ortam değişkeninin değerini 1 olarak atamalıyız:

$ export USE_CCACHE=1

Bu işlemin kalıcı olması için ~/.bashrc dosyasının sonuna yazabilirsiniz.

Not: ccache öntanımlı olarak ~/.ccache dizinini kullanacaktır. Farklı bir dizin kullanmak istiyorsanız (ortak bir dizin de olabilir) CCACHE_DIR ortam değişkenini de benzer şekilde tanımlamanız yeterlidir.

Sonrasında bir defaya mahsus, ccache için kullanılacak maksimum disk alanını limitleyebiliriz:

$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
  Set cache size limit to 50.0 Gbytes

Derleme sürecinde GNU make'in -j parametresiyle paralel derleme yeteneklerinden mutlaka faydalanılmalıdır. Genel bir kural olarak CPU core sayısının 2 katı olacak şekilde bir değer verilmesi önerilir. Örneğin 4 core'lu bir sistemde, -j 8 parametresinin kullanılması uygun olacaktır.

Derleme işlemi, standart make komutuyla aşağıdaki gibi başlatılır:

$ make -j8
PreviousGeliştirme Ortamının HazırlanmasıNextSistem Çağrıları

Last updated 5 years ago

Was this helpful?