[MAGP] Android Kaynak Kodunu Anlamak

Sponsorlu Bağlantılar

HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
[MAGP] Android Kaynak Kodunu Anlamak
Artık konularıma kendi bloğumdan devam edeceğim. Bloğa alttaki resime tıklayarak ulaşabilirsiniz.



Android Kaynak Kod Dosyalarını Tanıma


Ekli resimleri görüntülemek için kayıt olmalısınız


Bu CM11 için oluşturulmuş bir dosyadır.
Alfabetik sırayla tanıtmak gerekirse;

1. abi - Bu klasörün içinde cpp adında birçok yerle bağlantılı pek çok C ++ dosyaları içeren bir alt klasör bulunur.

2. android - Alttaki kodu hatırladınız mı?

Kod:
repo init -u git://github.com/CyanogenMod/android.git

Bu kodla indirdiğiniz şey aslında bu dosyadır.

3. art - Belki ART runtime motorunu duymuşsunuzdur :) Google artık Android işletim sisteminde Dalvik runtime yerine bu uygulama motorunu kullanıyor. Eski android sürümlerinde bu dosya yok.

4. bionic - biyonic başlıca aşağıdaki eklemeler / değişiklikler ile Linux için BSD C kütüphanelerinin portudur :
- Yerel ayar desteği yok.
- Geniş karakter desteği yok (ş, ğ, ü, ö vb.).
- Linux tabanlı küçük uygulamaları.
- x86, ARM ve ARM mimarisi CPU komut setleri ve çekirdek arabirimleri için destek.

5. bootable - Önyükleyici (boot) ve başlatma ile ilgili kodlar bulunur.

6. build - Alttaki kodu hatırlarsak;

Kod:
. build/envsetup.sh

Sistem derleme işleminin ana girdileri bu klasörün içindeki envsetup.sh dosyasında bulunuyor. Yukarıdaki kod Derleme işleminden önce gerekli olan şeylerin kullanılabilirliğini kontrol eder. Ayrıca cihaz kaynak kodlarınında kurulumunu gerçekleştirir. yani lunch komutu verdiğinizde önünüze gelen listeyide hazırlar.

7. cts - Derlemenin Android şartnamesiyle uyumluluğunu kontrol eder.

8. Dalvik - Dalvik runtime motorudur. Android uygulamaları bu motor üzerinde çalışır.

art ve dalvik dosyalarının içeriklerine bakın. Aralarındaki fark ise Dalvik hızlı kurulum yapar fakat dosyaları derlemediği için her uygulama açılışında uygulamanın derlenmesini beklersiniz. ART ise kurulumda derleme yaptığı için kurulumu daha uzun sürer fakat uygulama açılışları daha hızlıdır.

ART
Ekli resimleri görüntülemek için kayıt olmalısınız


Dalvik
Ekli resimleri görüntülemek için kayıt olmalısınız


9. Development - Bu klasörde derlemeden sonra roma eklenmeyecek uygulamalar bulunur.

10. Device - Bu dosya pek çok cihazın yapılandırma dosyalarını içerir.

Bu klasör içindeki dosyalara gelecek olursak;

> common - Bu klasörde gps bilgileri ve cihazınınzdaan cihazınızın yapılandırma kodlarını çıkaracak bir dosya bulunur. (Cihaz kaynak kodlarına ve xm.mk dosyasına bakarak aralarındaki ilişkiyi görebilirsiniz. Şöyle bir şey göreceksiniz.)

Kod:
# GSM bileşenlerini içerir
$(call inherit-product, vendor/cm/config/gsm.mk)
-and-
# GPS bileşenlerini içerir
$(call inherit-product, device/common/gps/gps_eu_supl.mk)

> generic - Bu dizin "goldfish" olarak adlandırılan genel aygıt yapılandırmasını içerir. Bu emülatör oluştururken kullanılan cihaz sınıflandırmasıdır.

> Google - Bu klasör Android Accessories Kit kodlarını içerir.

> sample - Bu klasör Android fremework değiştirmeden kendi Android platformu paylaşılan kütüphanelerinizi yazmanız için örnek içerir.Bu örnek içinde de görüldüğü gibi özel kütüphanelere ihtiyaç duyan cihazlar için açık kaynak kodlar üzerinde çalışanlar içindir.

11. docs - source.android.com alt klasörünü içerir. Android Açık Kaynak Projesi(AOSP) ile ilgili anlatımlar, referanslar ve çeşitli bilgiler içerir.

12. external - Bu dizin tüm harici açık kaynak projeleri için kaynak kod içerir. (SQLite, Freetype, webkit ve webview gibi.)

13. frameworks - Framework kodlarını içerir. Burada sistemin ana uygulamaları bulunur ve java uygulama API'leri ve yerli kütüphaneler arasındaki eşleme yapılır.

14. hardware - Android hardware abstraction layer (Android donanım soyutlama katmanı) ile ilgili kaynak kodları içerir. Bu klasör ayrıca Radio Interface Layer [RIL-modem ile iletişim kurmak için] (Radyo Arayüz Katmanı) içerir.

15. kernel - Kernel kaynak kodlarını içerir.

16. libcore - İçindeki önemli dosyalar;

  • dalvik - DalvikVM runtime
  • dom - DOM için Java kütüphane testleri
  • expectations - Test bilgilerini içerir.
  • include - Bazı izi ve dize işleme için kullanılan C/C++ dosyaları içerir
  • json - JSON tabanlı Java uygulamaları
  • luni - *.jar ve *.dex dosyalarının yüklenmesi için kaynak kod testleri içerir.
  • support - Dalvik testleri için desteklenen kütüphane dosyalarını içerir.
  • xml - XML alma ve koyma uygulaması
17. libnativehelper

18. ndk - Derleme dosyaları ve NDK derlemesi için yardımcı dosyalar.

19. out - Derlenen romun oluştuğu dizin.

20. packages - Android uygulamalarının bulunduğu dizin. (SMS, kamera, kişiler vb.)

21. pdk - Açılımı Platform Development Kit. PDK Google'ın donanım üreticilerine(OEM) gönderdiği ve bunun üzerinde kendi düzenlemelerini yapabildikleri bir araçtır.

22. prebuilt - Kolaylık sağlamak için dijital formda dağıtılan dosyaları içerir. Örnek olarak farklı geliştirme makineleri için çapraz derleme araçlarını içerir.

23. sdk - Roma dahil edilmeyen pek çok uygulama içerir bunlar geliştiriciler için çeşitli analiz programaları ve daha farklı programlar olabilir.

24. system - Android sistem çekirdeği için kaynak kodlar içerir. Bu Androidin linuz çekirdeğidir. yani Dalvik Virtual Machine(Dalvik Sanal Makinesi) ve Java tabanki hizmetlerin altında çalışan bölüm. Sitemi başlatan bölüm ve platformunun dinamik konfigürasyonunu sağlayan init.rc komut dosyası bunun içindedir.

25. tools - Derlemeye yardımcı oran yan araçlar bulunur.

26. vendor - Bu dizin cihaz üreticilerinin özel kütüphanelerini içerir. Derleme sırasında kullanılan kapalı kaynak kodları bulunur.

.repo - Bu dosya gizlidir.(Ctrl+H ile görebilirsiniz.) içinde repo aracı ve kaynak kodunuzun indirme bağlantıları bulunur. Ayrıca içine sizin eklediğiniz cihaz kaynak kodlarını da içerir.

Android Yapılandırma Dosyası [Makefile] (Android.mk)

Eğer Android kaynak kodlarını incelediyseniz Android.mk dosyasını görmüşsünüzdür. Bu dosya kaynak kodun nasıl derleneceğini belirler. Bu dosya içinde yapılacak derlemeye isim verilebilir(LOCAL_MODULE :=), yerel değişkenler temizlenebilir(include $(CLEAR_VARS)), derlenecek dosyaları ekleyebilir(LOCAL_SRC_FILES := main.c), derleme için etiket tanımlayabilir(LOCAL_MODULE_TAGS := eng development), eklenecek kütüphaneler varsa bunlar tanımlanabilir(LOCAL_SHARED_LIBRARIES := cutils) ve daha pek çok işlem yaptırabilirsiniz.

Örnek olarak aşağıda bir APK dosyası derlemek için hazırlanmış android.mk içeriği göreceksiniz. # bu işaretle yazılanlar altındaki kodun açıklamasıdır.

Kod:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# java alt klasöründeki java dosyalarını derler
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# derlenecek APK dosyasının adı
LOCAL_PACKAGE_NAME := LocalPackage
# APK derleme komutu
include $(BUILD_PACKAGE)

Not: my-dir ve all-subdir-java-files gibi dosya yollarının tanımlamaları build/core/definitions.mk içinde bulunmaktadır.

Cihaz Kaynak Kodlarını(Device Tree) Anlama

Android.mk - Bir önceki başlıktada bahsettiğim gibi bu dosya kaynak kodun cihazınıza göre nasıl derleneceğini açıklar.( Kurtarma modu(recovery), sensör, ışıklar, kamera vb.)

Kod:
LOCAL_PATH := $(my-dir)

ifeq ($(TARGET_DEVICE),pico)
include $(call all-makefiles-under,$(LOCAL_PATH))
endif

AndroidBoard.mk - Bu dosya kernel imaj dosyası oluşturur. Kernel derleme sırasında üretici kaynak kodlarında AndroidBoardVendor.mk dosyasını kullanır.

Kod:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET)

# açık kaynak olmayan dosyaları belirtir
-include vendor/uretici/cihazkodadi/AndroidBoardVendor.mk

AndroidProducts.mk - Derleme için kullanılacak, uygun cihaz yapılandırma dosyalarını(makefile) belirtir. Bu aynı zamanda cihaz özeldir. Mesela Moto G(Cihaz kod adı "falcon") için;

Kod:
PRODUCT_MAKEFILES := \
    #derlenecek rom yapılandırma dosyası
    $(LOCAL_DIR)/cm.mk \
    #derlenecek cihaz yapılandırma dosyası
    $(LOCAL_DIR)/falcon.mk

cihazkodadi.mk - Her android cihaz bir kod ada ve bu kod adlı bir yapılandırma dosyasına sahiptir(Moto G için falcon.mk). Bu dosya cihaz özelliklerini ve çıktı dosyalarının yerini belirler.

BoardConfig.mk - Bu dosya kernel derleme işlemlerinde kullanılır. Ayrıca derleme sırasında kullanılacak derleme platformunuda belirler(*TARGET_BOARD_PLATFORM*/*TARGET_CPU_ABI*). Bölüm düzenleri, önyükleme adresleri, ramdisk boyutunu ayarlamak gibi işlemleri yapar.

Kod:
LOCAL_PATH:= $(call my-dir)

TARGET_NO_BOOTLOADER := true
TARGET_PREBUILT_KERNEL := device/lg/gt540/kernel
TARGET_PREBUILT_RECOVERY_KERNEL := device/lg/gt540/recovery_kernel

# Cihaza göre değişir!
TARGET_BOARD_PLATFORM := msm7k
TARGET_ARCH_VARIANT := armv6-vfp
TARGET_CPU_ABI := armeabi
TARGET_CPU_ABI := armeabi-v6l
TARGET_CPU_ABI2 := armeabi

# OpenGL sürücüsü düzenleme dosyası
BOARD_EGL_CFG := device/lg/gt540/egl.cfg

BOARD_GLOBAL_CFLAGS += -DHAVE_FM_RADIO

BOARD_KERNEL_BASE := 0x02600000

# Bu bölüm cihaza özeldir. Çeşitlli bölümlerin boyutları hex kodu olarak yazılmıştır.
BOARD_BOOTIMAGE_PARTITION_SIZE     := 0x00480000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x00480000
BOARD_SYSTEMIMAGE_PARTITION_SIZE   := 0x0cf80000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x0d020000
BOARD_FLASH_BLOCK_SIZE := 131072

Bazı Boardconfig.mk parametreleri ve açıklamaları;
  • TARGET_ARCH: Android cihazlar için ARM mimarisini belirtir.
  • BOARD_KERNEL_CMDLINE: Cihazınız açılırken boot parametrelerini aşıyorsa bu komutu kullanmalısınız.
  • BOARD_KERNEL_PAGESIZE: Kernel dosya boyutunu belirler. Bu değerler orjinal kernelden çıkarılabilir.
  • BOARD_BOOTIMAGE_PARTITION_SIZE: Kernel imajı için belirlenen byte değeri.
  • BOARD_RECOVERYIMAGE_PARTITION_SIZE: Kurtarma modu(recovery) imajı için belirlenen byte değeri.
  • BOARD_SYSTEMIMAGE_PARTITION_SIZE: Sistem imajı için belirlenen byte değeri.
  • BOARD_USERDATAIMAGE_PARTITION_SIZE: Data imajı için belirlenen byte değeri.
  • BOARD_HAS_NO_SELECT_BUTTON: (isteğe bağlı), Kurtarma modunda(recovery) güç tuşuyla seçim yapıyorsanız kullanmalısınız.
Kernel Kaynak Kodunu Anlamak




Bildiğiniz gibi Android Linux kernelini kullanan bir sistem. Bu yüzden bu bölümde size Linux Kernelinin kaynak kodunu anlatmış olacağım.

Ekli resimleri görüntülemek için kayıt olmalısınız


1. arch - Bu klasör içinde Kconfig dosyası bulunur. Bu dosya içinde derleme ayarlarını bulunur. Ayrıca desteklenen her işlemci mimariside bu klasörde bulunur. Alfa işlemciler için kaynak kodlarıda alpha klasörü içindedir. Bu klasör içine yeni çekirdek mimarileri için destek eklenebilir veya silinebilir.

2. block - Bu klasör blok cihaz kodları içerir. Blok cihazlar bir paket halinde bulunan sürücülerden oluşur.

3. crypto - İçinde pek çok şifreleme algoritması için kaynak kodları bulunur. Mesela sha1_generic.c dosyası sha1 şifreleme algoritmalarını içerir.

4. Documentation - Bu klasör pek çok klasör için düz metin bilgileri içerir.

Ekli resimleri görüntülemek için kayıt olmalısınız


5. drivers - Sürücüler için kodlar içerir. Sürücüler donanımın bir kısmını kontrol eden yazılımlardır. Bu klasörün içinde pek çok klasör bulunur. Her dosya bir donanımın adıyla adlandırılmıştır. mesela bluetooth klasörü bluetooth kodlarını içerir. scsi, usb ve firewire klasörleride adlarını taşıdıkları donanım sürücülerini içerir. Bazı sürücüler farklı alt klasörlerde olabilir. Mesela joystick, klavye ve fare sürücüleri drivers/input/ klasörü altındadır. Macintosh klasörü Apple donanımlarının sürücülerini içerir. Xen klasörü Xen hypervisor kodlarını içerir. Hypervisor aynı donanım üzerinde birden fazla işletim sistemi çalıştırmaya yarayan sanallaştırıcılardır.

6. firmware - Bu klasör cihazın donanımlardan gelen sinyalleri okumasını ve anlamasını sağlayan kodlar içerir. firmware kodları olmasaydı Linux sistemi donanımlardan gelen bilgileri nasıl yarumlayacağını bilemezdi. Ayrıca firmware Linuxun donanımlara mesaj göndermesinide sağlar.

7. fs - "fs" File System(dosya sistemi)'in kısaltmasıdır. İçindeki kodlar cihazın dosya sistemlerini tanımasını sağlar (NTFS,EXT4,EXT3 gibi). Her dosya sisteminin kendi adını taşıyan bir klasörü vardır. Hiç bir alt klasörün içinde bulunmayan maunt.c gibi dosyalar ise her dosya sistemiyle çalışabilen kodlardır. Dosya sistemler verileri depolar, düzenler ve yönetir. Her birinin kendine göre artı ve eksileri vardır.

8. include - Kernelin kullandığı çeşitli başlık dosyaları(header files) içerir. Adın C dilinde başlık(header) ekleme komutu olan "include" komutundan alır.

9. init - [INITiation(başlatma)] Kerneli başlatan kodları içerir. main.c dosyası diğer tüm dosyalarla başlantı kuran kernelin ana kaynak kod dosyasıdır.

10. ipc - IPC(Inter-Process Communication) işlemler arası iletişim anlamına gelmektedir. Bu klasördeki kodlar kernel ve işlemler arasındaki iletişimi sağlayan ara katmanı oluşturur. Mesela bir program kamerayı açmak istediği zaman IPC katmanına bir sinyal yollar. Bu katman kernele bu isteği bildirir. Kernel kameraya bir sinyal göndererek kameranın açılmasını sağlar.

11. kernel - Kernelin kendisini kontrol eden kodları içerir. Kernelin gerçekleştirdiği işlemleri zamanıyla beraber kaydeder. Böylece bir debugger uygulaması bu kayıtlara ulaşarak yazılımdaki herhangi bir hatayı bulabilir. Ayrıca içerisinde bulunan power klasörü cihazı kapatma yeniden başlatma ve askıya alma gibi güç seçeneklerini yönetir.

12. lib - Kernel kütüphanelerini içeren klasördür.

13. mm - Memory Management(bellek yönetimi) kelimelerinin kısaltmasıdır. Veriler RAM içine rasgele yerleştirilmez. Veriler kernel tarafından RAM üzerine yazılır. Asla kullanılan veri üzerine veya önemli veriler üzerine yazma yapılmaz.

14. net - İnternet bağlantı bilgilerinin bulunduğu klasördür. IPv6 ve Appletalk kodlarını ve internet, wifi, bluetooth vb. protokollerini içerir. Ayrıca DNS ayarlarınıda barındırır.

15. samples - Programlama örnekleri ve başlangıç modüllerini içerir. İstenilen bir özelliği barındıran bir modül gerekiyorsa ve fakat böyle bir modül geliştirilmemişse yeni geliştirilen modül bu dizine atılır. Bu yeni geliştiricilere modül üzerinde çalışma ve modülü geliştirme imkanı verir.

16. scripts - Kernel derlemede kullanılan protokolleri içerir.

17. security - Kernel güvenlik sistemi kodlarını içerir. Kerneli virüs ve hackerlardan korumak için önemlidir.

18. sound - Ses kartı sürücülerini içerir.

19. tools - Kernelle birlikte çalışan araçları içerir.

20. usr - Kernel derlemeden sonra vmlinuz ve benzeri dosyaları oluşturur.

21. virt - Virtualization(Sanallaştırma). Çoklu işletim sistemi kullanmaya imkan tanır. Xen'den farklıdır. virt ikinci işletim sistemini ana işletim sisteminin üzerinde bir programmış gibi çalıştırırken, Xen iki işletim sistemini aynı donanım üzerinde ayrı ayrı fakat aynı anda çalıştırır.
 

Ekli dosyalar

Son düzenleme:
  • Beğen
Tepkiler: eren2934, vaterfa, enaa_881 ve 3 diğerleri


ErenMSC

Üye
:tşk:
 
HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
:rica:
 
HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
Güncellendiilk bölüm bitti
 
HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
konu güncellendi
 
  • Beğen
Tepkiler: B.A.R.O.N
YaşlıTaşCocuk54

YaşlıTaşCocuk54

Üye
:tşk:
 
YaşlıTaşCocuk54

YaşlıTaşCocuk54

Üye
Ben 10. Sınıftayım bilişim bölümü kaynak kod dan rom derleme yapabilirmiyim çok zor mudur
 
HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
Cihaza göre değişir
 
HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
konu tamamlandı
 
  • Beğen
Tepkiler: Invoke


Üst Alt