- Adım
- Lütfi
- Cihazım
- Le Pro3
- Yaş
- 27
- Konum
- ankara
- Katılım
- 22 Mayıs 2016
- Konular
- 68
- Mesajlar
- 102
- Tepkime puanı
- 217
- Puanları
- 43
DİPNOT
BU İŞLEMDEN DOĞABİLECEK SORUNLARDAN ŞAHSIM VE FORUM MIUITR SORUMLU TUTULAMAZ.
AÇIKLAMA
Bu kılavuz ile cihaz kaynaklarınıza treble desteği ekleyebilirsiniz.
Genel bir anlatımdır. Her cihaza göre ekstra işlemler, eklemeler ve çıkarmalar yapmak gerekebilir.
Ricam bu kılavuzdan yardım aldıysanız konunuzun teşekkürler kısmında benimde ismim geçsin.
ANLATIM
Bilgi
Device Tree
1-) Android.mk
2-) device.mk
3-) BoardConfig.mk
4-) Rootdir
6-) Alt Klasörler
7-) system.prop
8-) Blob Listeleri Ve Extractorlar
- Kernel ve Vendor Düzenlemeleri -
Kernel
Vendor
Tüm bu işlemleri tamamladıktan ve dizin satırları ile dosya dizinlerini kontrol ettikten sonra;
Bir derleme alıp vendor.img dosyanızı vendor partına - boot.img dosyasını ise boot.img partına flaşlayıp üstüne bir GSI kurun.
GSI Derleme Kılavuzu'na ise buradan ulaşabilirsiniz: [GSI] Android Generic System Image Derleme Kılavuzu
BU İŞLEMDEN DOĞABİLECEK SORUNLARDAN ŞAHSIM VE FORUM MIUITR SORUMLU TUTULAMAZ.
AÇIKLAMA
Bu kılavuz ile cihaz kaynaklarınıza treble desteği ekleyebilirsiniz.
Genel bir anlatımdır. Her cihaza göre ekstra işlemler, eklemeler ve çıkarmalar yapmak gerekebilir.
Ricam bu kılavuzdan yardım aldıysanız konunuzun teşekkürler kısmında benimde ismim geçsin.
ANLATIM
Bilgi
Bu kılavuzu okuyorsanız treble sisteminin nasıl çalıştığını biliyorsunuz demektir.
Bazı şartlar karşılanmalıdır.
Bunun için öncelikli hedef: vendor dosyaları -> vendor bölümlendirmesinde toplanmalıdır.
Ayrıca cihaz kaynaklarında (device tree - kernel - vendor) kısımlarında makefile'larda düzenlemeler yapılacaktır.
Bazı treble aktif edici flaglar eklenip. system kısmı ile alakalı olan satırlar düzenlenecek/silinecektir.
Bazı şartlar karşılanmalıdır.
- Cihazın vendor partitionu'na sahip olması.
- Açık kaynak bir kernelin olması. Aksi takdirde işlemde uygulayacağımız bir bölüm yapılamaz ve destek zora girer ve hatta imkansız hale gelir.
Bunun için öncelikli hedef: vendor dosyaları -> vendor bölümlendirmesinde toplanmalıdır.
Ayrıca cihaz kaynaklarında (device tree - kernel - vendor) kısımlarında makefile'larda düzenlemeler yapılacaktır.
Bazı treble aktif edici flaglar eklenip. system kısmı ile alakalı olan satırlar düzenlenecek/silinecektir.
Device Tree
1-) Android.mk
Bu dosya eğer tree sistemini biliyorsanız bazı kök dosya symlinkleri ve düzenlemeleri yapar.
Bu dosyada eğer system partitionu içine symlinkleriniz varsa vendor içerisine alın. Ayrıca symlink için gösterilen dosyayıda vendorda uygun yere aldığınızdan emin olun.
Örneğin:
şeklindeyse; Aşağıdaki gibi olacaktır.
Yani: "$(hide) ln -sf" ilen başlayan satırda system kısmını kesip direk vendor içerisinden symlink yapmasını sağlamanız gerekmektedir.
Bu dosyada eğer system partitionu içine symlinkleriniz varsa vendor içerisine alın. Ayrıca symlink için gösterilen dosyayıda vendorda uygun yere aldığınızdan emin olun.
Örneğin:
Kod:
IMS_LIBS := libimscamera_jni.so libimsmedia_jni.so
IMS_SYMLINKS := $(addprefix $(TARGET_OUT_VENDOR_APPS)/ims/lib/arm64/,$(notdir $(IMS_LIBS)))
$(IMS_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
@echo "IMS lib link: $@"
@mkdir -p $(dir $@)
@rm -rf $@
$(hide) ln -sf /system/vendor/lib64/$(notdir $@) $@
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
IMS_LIBS := libimscamera_jni.so libimsmedia_jni.so
IMS_SYMLINKS := $(addprefix $(TARGET_OUT_VENDOR_APPS)/ims/lib/arm64/,$(notdir $(IMS_LIBS)))
$(IMS_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
@echo "IMS lib link: $@"
@mkdir -p $(dir $@)
@rm -rf $@
$(hide) ln -sf /vendor/lib64/$(notdir $@) $@
Yani: "$(hide) ln -sf" ilen başlayan satırda system kısmını kesip direk vendor içerisinden symlink yapmasını sağlamanız gerekmektedir.
2-) device.mk
Bu dosya derleme paketlerinden derlenilmek istenenleri ve treede bulunan audio - wifi - keylayout - ramdisk dosyalarının kopyalama işlerini ve dizinlerini ayarlar.
Örneğin:
şeklindeyse; Aşağıdaki gibi olacaktır.
Yani: "system" kısımları yerine "$(TARGET_COPY_OUT_VENDOR)" yazılacak ve bu sayede bu keylayout dosyaları vendor partına atılacaktır.
Örneğin:
Kod:
# Keylayouts
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/keylayout/atmel_ts_key.kl:system/usr/keylayout/atmel_ts_key.kl \
$(LOCAL_PATH)/keylayout/gpio-keys.kl:system/usr/keylayout/gpio-keys.kl \
$(LOCAL_PATH)/keylayout/qpnp_pon.kl:system/usr/keylayout/qpnp_pon.kl
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
# Keylayouts
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/keylayout/atmel_ts_key.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/atmel_ts_key.kl \
$(LOCAL_PATH)/keylayout/gpio-keys.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/gpio-keys.kl \
$(LOCAL_PATH)/keylayout/qpnp_pon.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/qpnp_pon.kl
Yani: "system" kısımları yerine "$(TARGET_COPY_OUT_VENDOR)" yazılacak ve bu sayede bu keylayout dosyaları vendor partına atılacaktır.
3-) BoardConfig.mk
Bu dosyaya ise aşağıdaki flagları ekleyerek trebleyi aktif edebilirsiniz.
"PRODUCT_SHIPPING_API_LEVEL :=" -> Karşısına cihazın ilk çıktığında içerdiği romun SDK sürümünü yazın. Yani 23 (marshmallow) - 25 (nougat) gibi.
Örneğin:
PRODUCT_SHIPPING_API_LEVEL := 23
"PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE :=" -> Karşısına cihazın desteklediği treble romun SDK sürümünü yazın. Yani 27 (oreo) - 28 (pie) gibi.
Örneğin:
PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE :=27
Kod:
# Treble
PRODUCT_FULL_TREBLE_OVERRIDE := true
PRODUCT_VENDOR_MOVE_ENABLED := true
TARGET_COPY_OUT_VENDOR := vendor
PRODUCT_SHIPPING_API_LEVEL :=
PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE :=
BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true
TARGET_VENDOR_PROP += $(LOCAL_PATH)/vendor.prop
"PRODUCT_SHIPPING_API_LEVEL :=" -> Karşısına cihazın ilk çıktığında içerdiği romun SDK sürümünü yazın. Yani 23 (marshmallow) - 25 (nougat) gibi.
Örneğin:
PRODUCT_SHIPPING_API_LEVEL := 23
"PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE :=" -> Karşısına cihazın desteklediği treble romun SDK sürümünü yazın. Yani 27 (oreo) - 28 (pie) gibi.
Örneğin:
PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE :=27
4-) Rootdir
Bu dosyalar cihazın boot.img ile arasındaki köprüdür. Bu dosyalar oreo güncellemesi ile boot.img içinden vendor/etc'ye ve vendor partında muhtelif yerlere taşınmıştır.
Örneğin:
-fstab.qcom artık vendor/etc içerisinde
-init.qcom.rc vendor/etc/init/hw içerisindedir.
-ueventd.qcom.rc'nin adı artık ueventd.rc olup vendor'un ana dizinine alınmıştır.
Öncelikle bu dosyaların uygun dizinlere taşınması için rootdir klasörüne içerisindeki Android.mk'da bazı taşımaların düzenlemesini yapmamız gerekmektedir.
Örnek1:
şeklindeyse; Aşağıdaki gibi olacaktır.
Yani "$(TARGET_ROOT_OUT)" kısmını "$(TARGET_OUT_VENDOR_ETC)" yaparak fstab.qcom dosyasının root dizinine değil vendor/etc'ye atılmasını sağladık.
Örnek2:
şeklindeyse; Aşağıdaki gibi olacaktır.
Yani "$(TARGET_ROOT_OUT)" kısmını "$(TARGET_OUT_VENDOR_ETC)/init/hw" yaparak init.qcom.rc dosyasının root dizinine değil vendor/etc/init/hw'ye atılmasını sağladık.
Örnek3:
şeklindeyse; Aşağıdaki gibi olacaktır.
Yani "$(TARGET_ROOT_OUT)" kısmını "$(TARGET_OUT_VENDOR_EXECUTABLES)" yaparak init.qcom.sh dosyasının root dizinine değil vendor/bin'e atılmasını sağladık.
Tüm dosyaların dizinlerini bu şekilde düzenleyerek derlemede atılacakları yerleri doğru belirtmemiz gerekiyor.
init.qcom.rc :
Bu dosya diğer .rc uzantılı dosyaların da dahil edilmesini sağlar bunun için import komutları kullanır.
Örneğin yukarıdaki importları artık aşağıdaki gibi vendor içerisinden yapacağız.
Ayrıca bir alt kısımda anlattığım üzere bu dosyada da servislerin çalışma dizinlerini ayarlayacaksınız.
Diğer ".rc" dosyaları :
Bu dosyalar sistem içerisindeki bin ve diğer türevdeki servis dosyalarının çalışması için komutlar içerir.
Bunun için servis çalışma dizinlerini düzenlememiz gerekiyor
Örneğin:
şeklindeyse; Aşağıdaki gibi olacaktır.
Ayrıca bu çalıştırdığımız bin dosyasının artık system/bin'den vendor/bin dizinine alındığından emin oluyoruz.
".sh" dosyaları :
Bu dosyalar bash scripti olup sistemde bazı işlevleri üstlenirler. Ve treble sistemi ile birlikte boot.img yahut system/etc'den vendor/bin dizinine alınmışlardır.
Bunun için yine yukarıda anlatıldığı üzere önce Android.mk ya da device.mk'da bu dosyaların dizinlerini doğru ayarlayıp
Ardından ise bu .sh dosyalarının içeriğinde eğer dizin belirtiliyorsa ve dizinler system içinde bir yeri gösteriyorsa bu satırları vendoru gösterecek şekilde ayarlayıp işaret ettiği dosyanında vendora alındığından emin oluyoruz.
Örneğin:
şeklindeyse; Aşağıdaki gibi olacaktır.
Yani, system/bin klasöründe bulunan msm_irqbalance dosyasının vendor/bin'e alınıp ordan çalıştırılmasını sağladık.
Örneğin:
-fstab.qcom artık vendor/etc içerisinde
-init.qcom.rc vendor/etc/init/hw içerisindedir.
-ueventd.qcom.rc'nin adı artık ueventd.rc olup vendor'un ana dizinine alınmıştır.
Öncelikle bu dosyaların uygun dizinlere taşınması için rootdir klasörüne içerisindeki Android.mk'da bazı taşımaların düzenlemesini yapmamız gerekmektedir.
Örnek1:
Kod:
include $(CLEAR_VARS)
LOCAL_MODULE := fstab.qcom
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := etc/fstab.qcom
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
include $(BUILD_PREBUILT)
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
include $(CLEAR_VARS)
LOCAL_MODULE := fstab.qcom
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := etc/fstab.qcom
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)
include $(BUILD_PREBUILT)
Yani "$(TARGET_ROOT_OUT)" kısmını "$(TARGET_OUT_VENDOR_ETC)" yaparak fstab.qcom dosyasının root dizinine değil vendor/etc'ye atılmasını sağladık.
Örnek2:
Kod:
include $(CLEAR_VARS)
LOCAL_MODULE := init.qcom.rc
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := etc/init.qcom.rc
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
include $(BUILD_PREBUILT)
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
include $(CLEAR_VARS)
LOCAL_MODULE := init.qcom.rc
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := etc/init.qcom.rc
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)/init/hw
include $(BUILD_PREBUILT)
Yani "$(TARGET_ROOT_OUT)" kısmını "$(TARGET_OUT_VENDOR_ETC)/init/hw" yaparak init.qcom.rc dosyasının root dizinine değil vendor/etc/init/hw'ye atılmasını sağladık.
Örnek3:
Kod:
include $(CLEAR_VARS)
LOCAL_MODULE := init.qcom.sh
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := etc/init.qcom.sh
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
include $(BUILD_PREBUILT)
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
include $(CLEAR_VARS)
LOCAL_MODULE := init.qcom.sh
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := etc/init.qcom.sh
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES)
include $(BUILD_PREBUILT)
Yani "$(TARGET_ROOT_OUT)" kısmını "$(TARGET_OUT_VENDOR_EXECUTABLES)" yaparak init.qcom.sh dosyasının root dizinine değil vendor/bin'e atılmasını sağladık.
Tüm dosyaların dizinlerini bu şekilde düzenleyerek derlemede atılacakları yerleri doğru belirtmemiz gerekiyor.
init.qcom.rc :
Bu dosya diğer .rc uzantılı dosyaların da dahil edilmesini sağlar bunun için import komutları kullanır.
Kod:
import init.qcom.power.rc
import init.qcom.usb.rc
import init.device.rc
Örneğin yukarıdaki importları artık aşağıdaki gibi vendor içerisinden yapacağız.
Kod:
import /vendor/etc/init/hw/init.qcom.power.rc
import /vendor/etc/init/hw/init.qcom.usb.rc
import /vendor/etc/init/hw/init.target.rc
Ayrıca bir alt kısımda anlattığım üzere bu dosyada da servislerin çalışma dizinlerini ayarlayacaksınız.
Diğer ".rc" dosyaları :
Bu dosyalar sistem içerisindeki bin ve diğer türevdeki servis dosyalarının çalışması için komutlar içerir.
Bunun için servis çalışma dizinlerini düzenlememiz gerekiyor
Örneğin:
Kod:
service cnss_diag /system/vendor/bin/cnss_diag -q -f
class main
user root
group root
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
service cnss_diag /vendor/bin/cnss_diag -q -f
class main
user root
group root
Ayrıca bu çalıştırdığımız bin dosyasının artık system/bin'den vendor/bin dizinine alındığından emin oluyoruz.
".sh" dosyaları :
Bu dosyalar bash scripti olup sistemde bazı işlevleri üstlenirler. Ve treble sistemi ile birlikte boot.img yahut system/etc'den vendor/bin dizinine alınmışlardır.
Bunun için yine yukarıda anlatıldığı üzere önce Android.mk ya da device.mk'da bu dosyaların dizinlerini doğru ayarlayıp
Ardından ise bu .sh dosyalarının içeriğinde eğer dizin belirtiliyorsa ve dizinler system içinde bir yeri gösteriyorsa bu satırları vendoru gösterecek şekilde ayarlayıp işaret ettiği dosyanında vendora alındığından emin oluyoruz.
Örneğin:
Kod:
if [ -f /system/bin/msm_irqbalance ]; then
start msm_irqbalance
fi
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
if [ -f /vendor/bin/msm_irqbalance ]; then
start vendor.msm_irqbalance
fi
Yani, system/bin klasöründe bulunan msm_irqbalance dosyasının vendor/bin'e alınıp ordan çalıştırılmasını sağladık.
6-) Alt Klasörler
Alt klasörlerde özellikle açık kaynakla derlenen dosyaların Android.mk dosyalarına, artık;
"LOCAL_VENDOR_MODULE := true" satırı eklenmelidir.
Bu satır derlenen dosyanın artık system içerisine değil vendor içerisinde uygun yere atılmasını sağlar.
"LOCAL_VENDOR_MODULE := true" satırı eklenmelidir.
Bu satır derlenen dosyanın artık system içerisine değil vendor içerisinde uygun yere atılmasını sağlar.
7-) system.prop
Bu dosyanın adı artık "system.prop" değil "vendor.prop"dur.
Dosyanızın ismini değiştirdikten sonra içerisinden eğer dizinler belirten satırlar varsa uygun şekilde düzenleyin.
Örneğin:
şeklindeyse; Aşağıdaki gibi olacaktır.
yani system/etc'den vendor/etc'ye alınmıştır. Ayrıca bu dosyanın system/etc klasöründen vendor/etc'ye alındığına emin olun.
Ayrıca aşağıdaki satırı BoardConfig.mk dosyasına ekleyin.
Dosyanızın ismini değiştirdikten sonra içerisinden eğer dizinler belirten satırlar varsa uygun şekilde düzenleyin.
Örneğin:
Kod:
ro.qcom.ad.calib.data=/system/etc/ad_calib_le_zl1.cfg
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
ro.qcom.ad.calib.data=/vendor/etc/ad_calib_le_zl1.cfg
yani system/etc'den vendor/etc'ye alınmıştır. Ayrıca bu dosyanın system/etc klasöründen vendor/etc'ye alındığına emin olun.
Ayrıca aşağıdaki satırı BoardConfig.mk dosyasına ekleyin.
Kod:
TARGET_VENDOR_PROP += $(LOCAL_PATH)/vendor.prop
8-) Blob Listeleri Ve Extractorlar
A-) setup-makefiles.sh
"INITIAL_COPYRIGHT_YEAR=" -> Bu kısmın karşısına cihazın çıkış tarihini yazacaksınız
"export DEVICE_BRINGUP_YEAR=" -> Yukarıdaki gibi bu kısmın karşısına da cihazın çıkış tarihini yazacaksınız
proprietary-files.txt
Bu dosya tree hazırlama kılavuzumda belirttiğim üzere cihazdan çekilecek blobların listesini belirtir.
Bütün dosyaların vendora taşınması ile birlikte bizde dosyaları çektikten sonra vendora atacağız.
Bunun için dosyaların karşısına muadil kısmı ile birlikte vendor ibaresini ekleyeceğiz
Örnek 1:
şeklindeyse; Aşağıdaki gibi olacaktır.
Buranın açıklaması:
drc_cfg_AZ.txt dosyası etc/drc/ klasöründen çekilip bloblar ayarlanırken vendor/etc/drc/ dizinine atacaktır.
Örnek 2:
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
INITIAL_COPYRIGHT_YEAR=
export DEVICE_BRINGUP_YEAR=
"INITIAL_COPYRIGHT_YEAR=" -> Bu kısmın karşısına cihazın çıkış tarihini yazacaksınız
"export DEVICE_BRINGUP_YEAR=" -> Yukarıdaki gibi bu kısmın karşısına da cihazın çıkış tarihini yazacaksınız
proprietary-files.txt
Bu dosya tree hazırlama kılavuzumda belirttiğim üzere cihazdan çekilecek blobların listesini belirtir.
Bütün dosyaların vendora taşınması ile birlikte bizde dosyaları çektikten sonra vendora atacağız.
Bunun için dosyaların karşısına muadil kısmı ile birlikte vendor ibaresini ekleyeceğiz
Örnek 1:
Kod:
etc/drc/drc_cfg_AZ.txt
etc/dts/dts-m6m8-lic.key
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
etc/drc/drc_cfg_AZ.txt:vendor/etc/drc/drc_cfg_AZ.txt
etc/dts/dts-m6m8-lic.key:vendor/etc/dts/dts-m6m8-lic.key
Buranın açıklaması:
drc_cfg_AZ.txt dosyası etc/drc/ klasöründen çekilip bloblar ayarlanırken vendor/etc/drc/ dizinine atacaktır.
Örnek 2:
Kod:
etc/firmware/nvm_tlv.bin
etc/firmware/nvm_tlv_1.3.bin
etc/firmware/nvm_tlv_2.1.bin
etc/firmware/rampatch_tlv.img
etc/firmware/rampatch_tlv_1.3.tlv
etc/firmware/rampatch_tlv_2.1.tlv
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
etc/firmware/nvm_tlv.bin:vendor/firmware/nvm_tlv.bin
etc/firmware/nvm_tlv_1.3.bin:vendor/firmware/nvm_tlv_1.3.bin
etc/firmware/nvm_tlv_2.1.bin:vendor/firmware/nvm_tlv_2.1.bin
etc/firmware/rampatch_tlv.img:vendor/firmware/rampatch_tlv.img
etc/firmware/rampatch_tlv_1.3.tlv:vendor/firmware/rampatch_tlv_1.3.tlv
etc/firmware/rampatch_tlv_2.1.tlv:vendor/firmware/rampatch_tlv_2.1.tlv
- Kernel ve Vendor Düzenlemeleri -
Kernel
Kernel kısmında ise yapmamız gereken ana değişiklik vendor partını mount etmektir.
Bunun için firmware bilgisini içeren dtsi dosyamızdan firmware kısmını bulup ardından android bölümü altına aşağıdaki satırları ekleyin.
Bu satırlar vendor partitionunu kernele tanıtır ve onu mount edip onun içeriğini okuma imkanı verir.
Burada "blockismi" kısmından kastım part numarasıdır.
Örneğin:
Bu partın numarası leecoda "624000.ufshc" şeklindedir sizde kendi cihazınızın vendor part numarasını öğrenip oraya yazmalısınız.
Bunun için firmware bilgisini içeren dtsi dosyamızdan firmware kısmını bulup ardından android bölümü altına aşağıdaki satırları ekleyin.
Kod:
vendor {
compatible = "android,vendor";
dev = "/dev/block/platform/soc/blockismi/by-name/vendor";
type = "ext4";
mnt_flags = "ro,barrier=1,discard";
fsmgr_flags = "wait";
status = "ok";
}
Bu satırlar vendor partitionunu kernele tanıtır ve onu mount edip onun içeriğini okuma imkanı verir.
Burada "blockismi" kısmından kastım part numarasıdır.
Örneğin:
Bu partın numarası leecoda "624000.ufshc" şeklindedir sizde kendi cihazınızın vendor part numarasını öğrenip oraya yazmalısınız.
Vendor
1-) Dosyaları uygun klasörlere system/ kısmından system/vendor/ kısmına taşıyın.
Örneğin:
ftmdaemon dosyasının yerini bin klasöründen vendor/bin klasörüne alın.
2-) Android.mk ve cihazadı-vendor.mk dosyalarında taşınan dosyaların yerini vendor olarak belirtin.
cihazadı kısmından kastım lineage extractorleri cihaz adına göre makefile çıkarır bu zl1'de zl1-vendor.mk - oneplus3'te oneplus3-vendor.mk'dır.
Örneğin:
şeklindeyse; Aşağıdaki gibi olacaktır.
Örneğin:
ftmdaemon dosyasının yerini bin klasöründen vendor/bin klasörüne alın.
2-) Android.mk ve cihazadı-vendor.mk dosyalarında taşınan dosyaların yerini vendor olarak belirtin.
cihazadı kısmından kastım lineage extractorleri cihaz adına göre makefile çıkarır bu zl1'de zl1-vendor.mk - oneplus3'te oneplus3-vendor.mk'dır.
Örneğin:
Kod:
vendor/oneplus/oneplus3/proprietary/vendor/lib/libfeedbackhandler.so:system/vendor/lib/libfeedbackhandler.so
şeklindeyse; Aşağıdaki gibi olacaktır.
Kod:
vendor/oneplus/oneplus3/proprietary/vendor/lib/libfeedbackhandler.so:$(TARGET_COPY_OUT_VENDOR)/lib/libfeedbackhandler.so
Tüm bu işlemleri tamamladıktan ve dizin satırları ile dosya dizinlerini kontrol ettikten sonra;
Bir derleme alıp vendor.img dosyanızı vendor partına - boot.img dosyasını ise boot.img partına flaşlayıp üstüne bir GSI kurun.
GSI Derleme Kılavuzu'na ise buradan ulaşabilirsiniz: [GSI] Android Generic System Image Derleme Kılavuzu