Bilgi LineageOS Device Tree Hazırlama Kılavuzu

mbtt

Üye
Katılım
4 Ara 2018
Mesajlar
45
Tepkime puanı
419
Puanları
53
Çevrimdışı
DİPNOT
BU İŞLEMDEN DOĞACAK SORUNLARDAN ŞAHSIM VE FORUM GSMTURKEY SORUMLU TUTULAMAZ.


AÇIKLAMA
Bu kılavuz ile Device Tree çıkarma işlemini gerçekleştirebilirsiniz.

KONUDA EKSİĞİM HATAM VARSA LÜTFEN GERİ DÖNÜŞ YAPIN.,

Ricam eğer bu kılavuzdan bir yardım aldıysanız sadece konunuzun teşekkürler kısmında benim de ismim geçsin.


ANLATIM
Gizli İçerik
Tree Yapısını Anlamak
Klasörler
  • audio : Cihazınızın ses girdilerini içerir. Bu klasördeki dosyalar cihazınızın ses yapısını mikrofon hoparlör ve kulaklık gibi donanımların ses kanallarını ses seviyelerini ve sürücülerini belirler.
  • bluetooth : Cihazın bluetooth kimliğini içerir. Burada bluetooth donanımı için gerekli bilgilerin bulunduğu dosyalar mevcuttur.
  • camera : Cihazın kamera parametrelerini içerir. Kamera donanımının ayrıntıları mevcuttur.
  • configs : Birden çok cihaz girdisi içerebilir. Medya çözücüleri, donanım çözücüleri, NFC girdileri ve diğer donanım bilgilerini kapsayan bir klasördür.
  • gps : Cihazın GPS donanımının bilgilerini içerir. Konum bulma, kilitlenme ve doğrulama için gerekli c ve diğer alt yapı dosyaları mevcuttur.
  • include : Burada cihazın donanımı için c dosyaları bulunur. Bu dosyalara göre donanımlar için kütüphaneler ve sürücüler derlenir. Örneğin ril & ses & ve diğer işlemci yapısına göre değişkenlik gösterebilen dosyaların derleme anahtarları bulunur.
  • init : Bu klasörde cihazın tanımlayıcı c ve c++ dosyaları bulunur. Bu dosya sistem tarafından okunarak cihaz kimliğini rom içerisinie aktarır. Ve bazı diğer ayarlamaları yapar.
  • overlay : Bu klasör framework ile birlikte bazı uygulamalar için önemli .xml dosyaları içerir. Framework ve uygulamalar bu .xml girdilerini okuyarak derlenir. Bu sayede cihaza tam uyum sağlamış olur.
  • rootdir : Burada boot.img dosyasına çıkacak olan ramdisk dosyaları bulunur. fstab ve diğer cihaza has rc dosyaları buraya atılır. Kernel boyutunda ki izinler işlemler buradan belirlenir.
  • sepolicy : Bu klasörde donanım için uygun izinler vermeyi sağlayan .te dosyaların bulunur. Bu dosyalar ile gerekli uygulamalar ve gerekli donanımlar uygun izinlerle donatılır tam kapasite çalışması sağlanır.

Dosyalar
  • Android.mk : Bu dosya derleme sisteminin treeyi tanıması için vardır. Burada bazı symlinklerin oluşmasını sağlayan yerer bulunabilir cihaza göre değişkenlik gösterir.
  • BoardConfig.mk : Bu dosya cihazın özelliklerini belirtir. Bir nevi cihazın biyografisidir. Bölümlendirme boyutları, işlemci türü, donanım bilgileri, klasörlerin yerleri, vendor dizini yerleri belirtir ve sisteme tanıtır.
  • lineage.mk : Bu dosya LineageOS romuna has olmakla birlikte farklı romlarda farklı adlar alabilir. Cihaz ismi, üretici ismi, kod adı, cihazın türü(tablet ve ya telefon gibi), device treenin bulunduğu yer gibi bilgileri içerir.
  • device.mk : Bu dosya kullanılacak & kopyalanacak tree dosyalarını, uygulamaları, derleme sisteminin dosyalarını, kütüphanelerin bilgilerini & yerlerini içerir. Ayrıca telefonun dpi boyutunuda buradan ayarlarsınız. Bu sayede uygulamalar bu dpi değeri ile derlenir.
  • extract-files.sh & setup-makefiles.sh: Vendor treeyi oluşturmak için gerekli iki dosyadır. Bu dosyalar proprietary-files.txt dosyasını okuyarak vendor dosyalarının isimlerini ve hangilerinin atılacağını belirler.
  • proprietary-files.txt : Bu dosya cihaz vendorunun dosyalarının isimlerinin bulunduğu dosyadır. Satır başına bir dosya tanımlanır. Bu dosya sayesinde yukarıdaki shell dosyaları vendor kaynağındaki cihaz bloblarını system klasöründe uygun yerlere atar ve zip için hazırlar.
  • system.prop : Bu dosya cihazımızın build.propunun bilgilerini içerir. Cihazın ril & wlan & dpi ve diğer bazı özelliklerinin sisteme aktaran dosyadır.

Taban Dosyalar
Android.mk
Kod:
# Bu satırda cihaz treesinin nerede olduğunu belirleyen satır bulunur Örneğin : device/zeusis/ares gibi.
LOCAL_PATH := $(call my-dir)

# Burada derleme sistemi bir nevi filtreleme yapar. Derlenmek istenen cihazın o olup olmadığını kontrol eder bir nevi.
ifneq ($(filter kodadı,$(TARGET_DEVICE)),)

# Device tree içerisindeki makefile dosyalarının yerlerini belirleyen satırdır.
include $(call all-subdir-makefiles,$(LOCAL_PATH))

# Değişkenleri temizleyen satırdır. Genel olarak bulunur dokunmanıza gerek yoktur.
include $(CLEAR_VARS)

# Burası ise filtreleme satırındaki if değişkeninin kapalı tanımlayıcısıdır. Yani eğer cihaz ares ise ve siz aresi seçip derleme yapıyorsanız yukarıdaki ifneq ile aşağıdaki endif arasını okur ve aradaki işlemleri bilgileri derleme sistemine tanıtır.
endif


lineage.mk
Kod:
# üretici : leeco & coolpad gibi
# kodadı : zl1 & ares gibi
# cihaztamadı : Le Pro3 & Changer S1 gibi

# İlk satırda cihazın arm tabanını ikinci satırda ise cihazın türünü belirleyen komutlar vardır. İnceleyebilirsiniz.
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)

# device.mk dosyasının yerini belirtir.
$(call inherit-product, device/üretici/kodadı/device.mk)

# Cihazın türünü belirler.
$(call inherit-product, vendor/cm/config/common_full_phone.mk)

PRODUCT_NAME := cm_kodadı
PRODUCT_DEVICE := kodadı
PRODUCT_MANUFACTURER := üretici
PRODUCT_BRAND := üretici

PRODUCT_GMS_CLIENTID_BASE := android-üretici

TARGET_VENDOR_PRODUCT_NAME := cihaztamadı
TARGET_VENDOR_DEVICE_NAME := cihaztamadı
PRODUCT_BUILD_PROP_OVERRIDES += TARGET_DEVICE=cihaztamadı PRODUCT_NAME=cihaztamadı

PRODUCT_BUILD_PROP_OVERRIDES += \
    BUILD_FINGERPRINT= Cihazın build.prop dosyasında bulunan cihazın derleme zamanını & kimliğini belirleyen bir satırdır. Aşağıdaki satırda aynı şekildedir cihazın build.propundan alıp buraya da karşılarına yapışırın. Tırnak işaretleri arasında olmasına özel gösterin.
    PRIVATE_BUILD_DESC=

TARGET_VENDOR := üretici


proprietary-files.txt
Dosyanın işlevini önceden açıklamıştım içeriği ise aşağıdaki gibidir. Özenli olması açısından uygun bloblar uygun özelliklerin altına alınır.
Bu sayede bulunması ve görsel düzeni göze hoş görünür.
Kod:
# Bluetooth
vendor/bin/wcnss_filter
vendor/lib64/libbtnv.so
vendor/lib/libbtnv.so

# Charger
bin/hvdcp_opti:vendor/bin/hvdcp_opti

# Graphics firmware
etc/firmware/a530_gpmu.fw2:vendor/firmware/a530_gpmu.fw2
etc/firmware/a530_pfp.fw:vendor/firmware/a530_pfp.fw
etc/firmware/a530_pm4.fw:vendor/firmware/a530_pm4.fw
etc/firmware/a530v1_pfp.fw:vendor/firmware/a530v1_pfp.fw
etc/firmware/a530v1_pm4.fw:vendor/firmware/a530v1_pm4.fw
etc/firmware/a530v2_seq.fw2:vendor/firmware/a530v2_seq.fw2
etc/firmware/a530v3_gpmu.fw2:vendor/firmware/a530v3_gpmu.fw2
etc/firmware/a530v3_seq.fw2:vendor/firmware/a530v3_seq.fw2

system.prop
Daha önce işlevini açıklamıştım aşağıdaki örneği inceleyerek nasıl olduğuna dair fikre sahip olabilirsiniz.
Yine belirtelim düzenli olması kolay anlaşılıp kolay düzenlenmesi açısından yarar sağlar.
Kod:
# Camera
persist.camera.gyro.disable=0
persist.camera.imglib.fddsp=1

# CNE
persist.cne.feature=1

# Data modules
persist.data.iwlan.enable=true
persist.data.mode=concurrent
persist.data.netmgrd.qos.enable=true
ro.use_data_netmgrd=true

# Display (Qualcomm AD)
ro.qualcomm.cabl=0
ro.qcom.ad=1
ro.qcom.ad.calib.data=/system/etc/calib.cfg
ro.qcom.ad.sensortype=2

# DRM
drm.service.enabled=true

# FRP
ro.frp.pst=/dev/block/bootdevice/by-name/frp

# Graphics
debug.egl.hw=1
debug.gralloc.enable_fb_ubwc=1
debug.sf.hw=1
debug.sf.latch_unsignaled=1
dev.pm.dyn_samplingrate=1
persist.demo.hdmirotationlock=false
persist.hwc.enable_vds=1
persist.sys.wfd.virtual=0
ro.opengles.version=196610
ro.sf.lcd_density=480
sdm.debug.disable_rotator_split=1
sdm.debug.disable_skip_validate=1
sdm.perf_hint_window=50
persist.metadata_dynfps.disable=true
persist.debug.sf.statistics=0

# Media
media.stagefright.enable-player=true
media.stagefright.enable-http=true
media.stagefright.enable-aac=true
media.stagefright.enable-qcp=true
media.stagefright.enable-fma2dp=true
media.stagefright.enable-scan=true
media.stagefright.audio.sink=280
media.msm8996hw=1
mm.enable.smoothstreaming=true
mm.enable.sec.smoothstreaming=true
mmp.enable.3g2=true
media.aac_51_output_enabled=true
av.debug.disable.pers.cache=true
mm.enable.qcom_parser=1048575
persist.mm.enable.prefetch=true

# IMS
persist.dbg.volte_avail_ovr=1
persist.dbg.vt_avail_ovr=1

BoardConfig.mk
-> Platform Bilgileri : Karşılarında açıklandığı gibi örnek vermek suretiyle sırasıyla msm8996 ve qcom-adreno530 olabilir
-> Arch Bilgileri : Karşılarında açıklandığı gibi. Cihazın mimari tabanını belirleyen kısımdır.
-> Device Tree konumu : Device treenin bulunduğu yeri tanımlar. Örneğin : device/zeusis/ares gibi
-> Include konumu : $(DEVICE_PATH) kısmından sonra /include koyulur ve bu şekilde include klasörünün yeri gösterilmiş olur. $(DEVICE_PATH) hemen aşağıda gelen device treenin yerini tanımlayan kısımdır.
-> Bluetooth konumu : $(DEVICE_PATH) kısmından sonra /bluetooth koyulur ve bu şekilde bluetooth klasörünün yeri gösterilmiş olur.
-> Init bilgileri : Cihaz treesindeki init klasöründe yer alan c++ dosyasının ismini ve durumunu belirleyen satırdır.
-> Kernel bilgileri :İlk satır cihaz için kullanılacak olan defconfigi belirtir. Örneğin : ares_defconfig gibi. İkinci satır ise kernelin konumunu belirtir.
-> Bölümlendirme boyutları : Burada cihazın bölümlendirmelerinin boyutları belirtilir. Ve bayt cinsinden yazılır
-> system.prop konumu : $(DEVICE_PATH) kısmından sonra /system.prop koyulur ve bu şekilde prop dosyasının yeri gösterilmiş olur.
-> Vendor konumu : Cihazın vendor konumunu gösterir. Örneğin vendor/coolpad/ares gibi

Bu örnek bir BoardConfig.mk dosyasıdır. Farklı işlemciler ve farklı cihazlara göre değişkenlik gösterir. İleride eklemeler yapıp geliştirebilirim.

Kod:
# Device Tree konumu
DEVICE_PATH := device/üretici/kodadı

# Platform Bilgileri
TARGET_BOARD_PLATFORM := işlemci_kod_adı
TARGET_BOARD_PLATFORM_GPU := grafik_işlemci_kod_adı

# Arch Bilgileri
TARGET_ARCH := arm & arm64 yada x86 gibi
TARGET_ARCH_VARIANT := armv8-a ya da armv7-a gibi
TARGET_CPU_ABI := arm64-v8a ya da arm-v7a gibi
TARGET_CPU_VARIANT := kryo

# Include konumu
TARGET_SPECIFIC_HEADER_PATH += $(DEVICE_PATH)/include

# Bluetooth konumu
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := $(DEVICE_PATH)/bluetooth

# Init bilgileri
TARGET_INIT_VENDOR_LIB := libinit_kodadı
TARGET_UNIFIED_DEVICE := true

# Kernel bilgileri
TARGET_KERNEL_CONFIG := kodadı_defconfig
TARGET_KERNEL_SOURCE := kernel/üretici/kodadı
TARGET_KERNEL_ARCH := arm64 ya da arm
TARGET_KERNEL_HEADER_ARCH := arm64 ya da arm

# Bölümlendirme boyutları
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_BOOTIMAGE_PARTITION_SIZE :=
BOARD_RECOVERYIMAGE_PARTITION_SIZE :=
BOARD_CACHEIMAGE_PARTITION_SIZE :=
BOARD_SYSTEMIMAGE_PARTITION_SIZE :=
BOARD_USERDATAIMAGE_PARTITION_SIZE :=
BOARD_FLASH_BLOCK_SIZE :=

# system.prop konumu
TARGET_SYSTEM_PROP += $(DEVICE_PATH)/system.prop

# Vendor konumu
-include vendor/üretici/kodadı/BoardConfigVendor.mk

device.mk
Overlay: Overlay basitçe cihazın framework dosyalarından alınıp derlenecek romun kaynağına geçirilen cihaz tabanlı bilgilerdir.
Örneğin 4G teknolojisini destekliyorsa bunu frameworklere yamalamak için overlay klasörü içerisinde config.xml dosyasına satır olarak atılıp yamalanması sağlanır.

Prebuilt: Bu kısım uygulamaların DPI değerlerini belirlemek için kullanılır xhdpi xxhdpi gibi değerleri cihaza göre tayin edeceksiniz.

Animasyon: Bu kısım cihaza uygun açılış animasyonu boyutunu ayarlar örneğin 1080x1920 gibi

Örnek Ses Dosyaları: Bu kısım cihazdan cihaza değişkenlik gösterir. Bu satır cihazın ses sistemini çalıştıran ses girdilerini derleme sistemine tanıtıp derlenen roma aktarır ve ses sisteminin çalışmasını sağlar.

Örnek GPS Dosyaları: Bu kısım cihazdan cihaza değişkenlik gösterir. Bu satır cihazın GPS sistemini çalıştıran GPS girdilerini derleme sistemine tanıtıp derlenen roma aktarır ve GPS sisteminin çalışmasını sağlar.

NOT: Yukarıdaki 2 kısım sadece örnek olarak verilmiştir kimi cihazlar ses dosyalarına ihtiyaç duymazken kimi cihazlarda bu dosyalar treeye atılmalıdır. Cihazdan cihaza değişen bir protokol olduğu için benzer cihazların treelerine bakıp hangilerini almanız gerektiği hakkında bilgiye sahip olabilirsiniz.

İzinler & Girdiler: Bu kısımda android sisteminden alınacak izin ve bazı girdi dosyaları bulunur. Örneğin NFC desteği için android sisteminden alınacak izin dosyası bulunur ve eğer cihazınızda NFC desteği varsa bu izin dosyasının yerini aşağıda olduğu gibi belirtirseniz derlenen roma ekleyip aktive edecektir.

Rootdir & Ramdisk: Bu kısım cihazınızın kernelinin sisteme bağlanıp güç & performans ve bazı temel donanımlarını kontrol etmek için bazı dosyalar içerir.
Burayı system/etc içerisindeki .rc & .sh ve cihazın boot.img dosyasının içindeki .rc & .sh dosyaları oluşturur. Hangilerini alıp kullanacağınızı benzer cihazların treelerine bakarak anlayabilirsiniz. Ayrıca bu dosyaların isimlerini ise aşağıda olduğu gibi yazıp sisteme derleme için tanıtmanız gerekir.
Kod:
# Overlay konumu
DEVICE_PACKAGE_OVERLAYS += device/üretici/kodadı/overlay

# Prebuilt uygulamalar için ayarlanacak dpi değerleri siz kendi cihazınıza uygun şekilde aşağıyı düzenleyebilirsiniz.
PRODUCT_AAPT_CONFIG := xlarge
PRODUCT_AAPT_PREF_CONFIG := xhdpi
PRODUCT_AAPT_PREBUILT_DPI := hdpi mdpi

# Animasyon
TARGET_SCREEN_HEIGHT := 1920
TARGET_SCREEN_WIDTH := 1080

# Örnek Ses Dosyaları
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/audio/audio_policy.conf:system/etc/audio_policy.conf \
$(LOCAL_PATH)/configs/audio/mixer_paths.xml:system/etc/mixer_paths.xml

# Örnek GPS Dosyaları
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/configs/gps/gps.conf:system/etc/gps.conf \
$(LOCAL_PATH)/configs/gps/gps.xml:system/etc/gps.xml

# İzinler & Girdiler
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.ethernet.xml:system/etc/permissions/android.hardware.ethernet.xml \
frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \
frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \
frameworks/native/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \
frameworks/native/data/etc/android.hardware.nfc.xml:system/etc/permissions/android.hardware.nfc.xml \
frameworks/native/data/etc/android.hardware.nfc.hce.xml:system/etc/permissions/android.hardware.nfc.hce.xml \
frameworks/native/data/etc/com.android.nfc_extras.xml:system/etc/permissions/com.android.nfc_extras.xml

# Rootdir & Ramdisk
PRODUCT_PACKAGES += \
init.class_main.sh \
init.target.rc \

İpuçları
Herşeyden önce kılavuz bir örnektir.
Elimden geldiğince genel hazırladım. Bir işlemciye bağlı kalmamaya çalıştım.

Bu kılavuzun üstüne işlemcinizin & cihazınızın gerektirdiği paketleri & girdileri ve dosyaları ekleyebilirsiniz. Kendi cihazınıza uygun hale getirebilirsiniz.
Çoğunlukla diğer cihaz treelerine bakmanız işinizi görecektir. Commitler & dosyalar & sistemleri inceleyerek kendi treenizi oluşturabilirsiniz.

Kılavuzu geliştirip daha iyi bir hale getireceğim.

İyi geliştirmeler dilerim.
 
DİPNOT
BU İŞLEMDEN DOĞACAK SORUNLARDAN ŞAHSIM VE FORUM GSMTURKEY SORUMLU TUTULAMAZ.


AÇIKLAMA
Bu kılavuz ile Device Tree çıkarma işlemini gerçekleştirebilirsiniz.

KONUDA EKSİĞİM HATAM VARSA LÜTFEN GERİ DÖNÜŞ YAPIN.,

Ricam eğer bu kılavuzdan bir yardım aldıysanız sadece konunuzun teşekkürler kısmında benim de ismim geçsin.


ANLATIM
[Gizli içerik]
Teşekkür ederim
 
Geri
Üst Alt