9 Ağustos 2015 Pazar

Kaynak Koddan Rom Derleme



Hazırlıklar

Not: İndirme boyutu 10GB civarı veya daha fazla, işlemler için gerekli alan 25GB(tek bir derleme için) ve toplamda ihtiyacınız olacak net kapasite 80GB olacaktır.

Her şeyden önce Ubuntu'nun 64 bit versiyonlarından birini kurmanız gerekir. 32 bit versiyonu bu işlemler için kullanılabilir değil. İki seçenek var ya gerçek kurulum yada sanal kurulum. Gerçek kurulumda sadece Ubuntu kullanabilir yada Ubuntu ile Windows'u aynı anda kullanabilirsiniz. Sanal kurulumda ise VirtualBox veya başka bir sanal makine programı kullanabilirsiniz.

Gerçek Kurulum: Ubuntu Kurulumu
Sanal Kurulum (VirtualBox): VirtualBox Kurulumu ve Kullanımı

Kurulum bitince sol üst köşedeki simgeyi tıklayın ve Software Updater yazın. Software Updater programını açıp tüm güncellemeleri yapın ve bilgisayarı yeniden başlatın. Netten türkçe dil yüklemeyi de araştırabilirsiniz.

Aşağıdaki tüm komutlar Terminal denen kod penceresine yazılacaktır. İsterseniz yine sol üst köşeye tıklayın ve terminal yazın veya Ctrl+Alt+T yaparak terminali açın. Alttaki işlemler sırasında kullanılacak kodları buradan kopyalayıp, Terminal ekranınafarenin sağ tuşunu kullanarak yapıştır yapın!

Dikkat! "sudo" ile başlayan komutlardan sonra kullanıcı şifrenizi isteyebilir. Oturum şifrenizi yazın ve Enter'layın. (Şifrenizi yazarken ekranda şifrenizi göremezsiniz. Buna takılmadan şifrenizi yazıp devam edin.)

Herhangi bir adımda "Do you want to continue [Y/n]?" tarzı bir yazı gelirse "y" tuşuna basıp Enter'layın.

Derleme yapabilmeniz için cihaz kod adınız bilmelisiniz. Mesela Optimus G'nin kod adı e970. Ayrıca cihaz(device), üretici(vendor) ve kernel depolarını(repo) XDA'dan bulmalısınız. Bu depolara nasıl ulaşabileceğinizi konu içinde aktaracağım.

Örnek olarak Optimus G(e970)'nin cihaz kaynak kodlarının adresi: CyanogenMod/android_device_lge_e970 · GitHub

Derleme Araçlarının Kurulumu

JDK, Python,Git ve Android SDK derleme sırasında kullanacağımız araçlardır. Bunlardan jdk(java) ve python uygulamaların yazıldığı dillerdir. Git ise kaynak kodları indirmede kullanılacak araçtır. Android SDK'nın da bir kenarda bulunması fena olmaz. O yüzden önce bunları kurmalıyız.

- Java JDK Kurulumu

Java kütüphanelerinin içerir. Kurmak için:

Kod:
sudo add-apt-repository ppa:webupd8team/java
Kod:
sudo apt-get update
Lollipop ROMlar için
Kod:
sudo apt-get install oracle-java7-installer
Kikat ve daha alt sürümler için
Kod:
sudo apt-get install oracle-java6-installer
- Python Kurulumu

Kod:
sudo apt-get install python
- Gerekli Paketlerin Kurulumu

Daha öncede dediğim gibi Git kaynak kodları indirebileceğimiz araçtır. Birde yardımcı paketlerimiz var. Bunlarda araçları kullanabilmek için gerekli.

Kod:
sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5-dev \
  ia32-libs x11proto-core-dev libx11-dev libx11-dev:i386 libreadline6-dev:i386 \
  lib32z1-dev lib32z-dev libgl1-mesa-dev g++-multilib gcc-multilib mingw32 libssl-dev \
  tofrodos python-markdown libxml2-utils xsltproc readline-common \
  libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev \
  lib32readline5 lib32readline6 libreadline-dev libreadline6-dev libreadline6-dev:i386 \
  libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev \
  libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwxgtk2.6-dev
Kod hata verirse kodun altında uyumsuz paketlerin adları yazacaktır o paketlerin adlarını koddan silip tekrar deneyin.

Kod:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
- ADB ve Fastboot Kurulumu

Android cihazınızı bilgisayar üzerinden yönetmeye yarayan araçlardır. Kurulması zorunlu değil fakat bulunsa ilerde kullanmanız gerekirse iyi olur.

Kod:
sudo add-apt-repository ppa:nilarimogard/webupd8
Kod:
sudo apt-get update
Kod:
sudo apt-get install android-tools-adb android-tools-fastboot
- USB yapılandırması

Şimdi bir dosya düzenleyip bunun içine usb ayarlarını kaydedeceğiz. İlk önce bize gerekli olan programı indirelim.

Kod:
sudo apt-get install gksu
Şimdide dosyamızı düzenleyelim.

Kod:
gksudo gedit /etc/udev/rules.d/51-android.rules
Sahip olduğunuz telefon modelinin altındaki satırı açılan belgeye ekleyin.

Kod:
#Foxconn
SUBSYSTEM==usb, SYSFS{idVendor}==0489, MODE=0666
#Garmin-Asus
SUBSYSTEM==usb, SYSFS{idVendor}==091E, MODE=0666
#Google
SUBSYSTEM==usb, SYSFS{idVendor}==18d1, MODE=0666
#HTC
SUBSYSTEM==usb, SYSFS{idVendor}==0bb4, MODE=0666
#Huawei
SUBSYSTEM==usb, SYSFS{idVendor}==12d1, MODE=0666
#K-Touch
SUBSYSTEM==usb, SYSFS{idVendor}==24e3, MODE=0666
#KT Tech
SUBSYSTEM==usb, SYSFS{idVendor}==2116, MODE=0666
#Kyocera
SUBSYSTEM==usb, SYSFS{idVendor}==0482, MODE=0666
#Lenevo
SUBSYSTEM==usb, SYSFS{idVendor}==17EF, MODE=0666
#LG
SUBSYSTEM==usb, SYSFS{idVendor}==1004, MODE=0666
#Motorola
SUBSYSTEM==usb, SYSFS{idVendor}==22b8, MODE=0666
#NEC
SUBSYSTEM==usb, SYSFS{idVendor}==0409, MODE=0666
#Nook
SUBSYSTEM==usb, SYSFS{idVendor}==2080, MODE=0666
#Nvidia
SUBSYSTEM==usb, SYSFS{idVendor}==0955, MODE=0666
#OTGV
SUBSYSTEM==usb, SYSFS{idVendor}==2257, MODE=0666
#Pantech
SUBSYSTEM==usb, SYSFS{idVendor}==10A9, MODE=0666
#Philips
SUBSYSTEM==usb, SYSFS{idVendor}==0471, MODE=0666
#PMC-Sierra
SUBSYSTEM==usb, SYSFS{idVendor}==04da, MODE=0666
#Qualcomm
SUBSYSTEM==usb, SYSFS{idVendor}==05c6, MODE=0666
#SK Telesys
SUBSYSTEM==usb, SYSFS{idVendor}==1f53, MODE=0666
#Samsung
SUBSYSTEM==usb, SYSFS{idVendor}==04e8, MODE=0666
#Sharp
SUBSYSTEM==usb, SYSFS{idVendor}==04dd, MODE=0666
#Sony Ericsson
SUBSYSTEM==usb, SYSFS{idVendor}==0fce, MODE=0666
#Toshiba
SUBSYSTEM==usb, SYSFS{idVendor}==0930, MODE=0666
#ZTE
SUBSYSTEM==usb, SYSFS{idVendor}==19D2, MODE=0666
Dosyayı kaydedip kapatın ve bu komutla dosyayı sonlandırın.

Kod:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
- Repo Kurulumu

Repo denilen araç git içinde çalışan bir tür depo indirme ve güncelleme aracıdır. İlk önce bir klasör oluşturup buraya repo dosyasını indireceğiz.

mkdir komutu yeni klasörler oluşturacaktır. "mkdir klasör_adi" şeklinde yazılır. Altta klasör adının başındaki "~/" klasörün açılacağı yerdir. Bu şekilde bırakırsanız home dizinine açılır.

Birinci kodla "bin" klasörü oluşacak. Üçüncü kod ile bin klasörüne repo dosyasını indireceğiz. repo dosyası kaynak kod indirirken kullanılacak araçtır.

Kod:
mkdir ~/bin
Kod:
PATH=~/bin:$PATH
Kod:
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
Kod:
chmod a+x ~/bin/repo
- Çalışma Dizini Oluşturma

"android" klasörü derlenecek romun kaynak kodları için oluşturuluyor. Siz isterseniz farklı bir ad verip işlemleri ona göre yapabilirsiniz.
"cd" komutu sizi bir klasöre veya dizine sokar.

Kod:
mkdir android
Kod:
cd android
- CCACHE Ayarlama
(Bu bölüm isteğe bağlı)

İlk derlemede yapılan işlemlerin sanuçlarını yedekleyerek sonraki derlemelerinizde derlemenin daha hızlı gerçekleşmesini sağlar.

1) Ucbirim(terminal) açın. (CTRL+ALT+T)
2) gedit.bashrc yazıp enterlayın.
3) Alttaki kodu ekleyin.

Kod:
export USE_CCACHE=1
export CCACHE_DIR=/android/prebuilts/misc/linux-x86/ccache
Kaynak Kodları Toplama
- Rom Kaynak Kodları

Rom kaynak kodlarını indirmek için git kullanacağız. Git uygulamasını kullanmak için ilk önce adınızı ve email adresinizi bildirmelisiniz. Bu yüzden kendimize bir Git hesabı açalım. Aşağıdaki kodlarda kendi bilgilerinizi girin.

Kod:
git config --global user.email email_adresizin
Kod:
git config --global user.name isminiz
Alttaki kod bin klasöründeki repo dosyasını kullanarak kaynak kodlarının bulunduğu bulut ağını bulunduğunuz klasöre yönlendirir.

repo init: repo başlatma kodu.
-u: url
-b: bölüm

Düzen şu şekilde:
repo init -u bulut_bağlantı_adresi -b bölüm
Kod:
repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0
Yukarıdaki kodu ve aşağıda diğer romlar için vereceğim kodları incelerseniz belirli bir yazılış düzeni var. Biraz github sitesine aşina olmanız lazım.



Bulut bağlantı adresi romun github adresidir. Mesela:
Kod:
Cyanogenmod: https://github.com/CyanogenMod/android.git -b Bölüm
CarbonDev: https://github.com/CarbonDev/android.git -b Bölüm
Liquid Smooth: https://github.com/LiquidSmooth/android.git -b Bölüm
AOSP: https://android.googlesource.com/platform/manifest.git -b Bölüm
AOKP: http://github.com/AOKP/platform_manifest.git -b Bölüm
AOSPA: http://github.com/ParanoidAndroid/manifest.git -b Bölüm
PAC-Man: http://github.com/PAC-man/android.git -b Bölüm
Bölüm ise bu adresteki farklı bölümleri simgeler. Mesela: cm-10.1 veya ics veya cm-11.0 gibi



- Cihaz Kaynak Kodları

Hazırlıklar kısmında cihaz(device), üretici(vendor) ve kernel depolarına(repo) ihtiyacınız olduğunu belirtmiştim. Bu depoların linklerine XDA sitesinde kendi cihazınızın bölümündeki konulardan bulabilirsiniz veya google amcaya başvurarak da halledebilirsiniz. Ayrıca cihazınızın kod adını da öğrenmelisiniz. Mesela Motorola Moto G: Falcon

Cihaz kaynak kodlarını(device, vendor, kernel vb.), romun kaynak kodlarına(CM,AOSP,AOKP,AOSPA vb.) eklemek için iki yol var, local manifest dosyası oluşturmak veya git clone komutu kullanmak. Daha basit olduğu için local manifest yöntemini anlatacağım.

Local manifest dosyası içinde rom kaynak kodlarını toplarken kullandığımız şekle benzer kodlar içerir. Bu kodlar cihazın kendine özel yazılımını depolardan indirir.

Bir local manifest dosyası şu şekildedir;
Kod:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project name="team-moto-g/android_kernel_motorola_msm8226" path="kernel/motorola/msm8226" remote="github" revision="cm-11.0" />
  <project name="team-moto-g/android_device_motorola_falcon_umts" path="device/motorola/falcon_umts" remote="github" revision="cm-11.0" />
  <project name="team-moto-g/proprietary_vendor_motorola_falcon_umts" path="vendor/motorola/falcon_umts" remote="github" revision="cm-11.0" />
  <project name="team-moto-g/android_hardware_qcom_media-msm8226" path="hardware/qcom/media-msm8226"  remote="github"  revision="cm-11.0" />

  <remove-project name="CyanogenMod/android_build" />
  <project name="team-moto-g/android_build" path="build"  remote="github"  revision="cm-11.0" />
</manifest>
Bir cihaza özel local manifest dosyasını netten kolayca bulabilirsiniz. Mesela moto g için bir örnek vereyim.







Şimdi kopyaladığımız kodları .repo/local_manifests/local_manifest.xml içine yapıştıracağız. Önce dosya yolunu oluşturalım.

Kod:
mkdir .repo/local_manifests
Kod:
touch .repo/local_manifests/local_manifest.xml
Şimdi Dosyaları açıp Ctrl+H tuşlarına basın ve .repo klasörüne girin. Şimdide local_manifests klasörü içindekilocal_manifest.xml dosyasını açın ve kodları yapıştırıp kaydedip kapatın.

İkinci kod asıl indirme işlemimizdir. Baya uzun sürecektir. 10gb veya daha fazla indirme yapabilir. Bu kod aslında android klasörünün içindeki dosyalara bakar. Sonrada birinci kodda yazdığınız linkteki dosyalara bakar ve eksik olanları indirir. Fakat siz ilk defa kullandığınız için hepsini indirecektir.

Kod:
cd adroid
repo sync
Dikkat! Eğer indirme işlemi bir yerde takılırsa terminali kapatıp açın sonra da tekrar yukarıdaki iki komutu yazın.

Kaynak Kodların Hazırlanması

Rom derleme başlığında yer alan "lunch" komutuyla önümüze gelen listede kullandığınız cihazın adının yer alması için gerekli olan bir işlem var. Eğer Rom Derleme bölümündeki "lunch" komutundan sonra cihaz adınızı listede görüyorsanız bu bölümü geçin.

- CyanogenMod

Aşağıdaki satırı vendor/cm/vendorsetup.sh dosyasına ekleyin.

cm_cihazkodadı-userdebug

Örnek:
Kod:
cm_falcon-userdebug
cm.mk dosyası oluşturalım.
touch device/üretici/cihazkodadı/cm.mk
gedit device/
üretici/cihazkodadı/cm.mk

Nexus 4(mako) için örnek


Kod:
touch device/lge/mako/cm.mk
nano device/lge/mako/cm.mk
Alttaki satırları kendi cihazınız için düzenleyip yapıştırın.
Kod:
## Specify phone tech before including full_phone
$(call inherit-product, vendor/cm/config/gsm.mk)

# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/common_full_phone.mk)

# Enhanced NFC
$(call inherit-product, vendor/cm/config/nfc_enhanced.mk)

# Inherit device configuration
$(call inherit-product, device/lge/mako/full_mako.mk)

## Device identifier. This must come after all inclusions
PRODUCT_DEVICE := mako
PRODUCT_NAME := cm_mako
PRODUCT_BRAND := google
PRODUCT_MODEL := Nexus 4
PRODUCT_MANUFACTURER := LGE

# Enable Torch
PRODUCT_PACKAGES += Torch

-AOKP
Aşağıdaki satırı vendor/aokp/vendorsetup.sh dosyasına ekleyin.

add_lunch_combo aokp_cihazkodadı-userdebug
Kod:
add_lunch_combo aokp_falcon-userdebug

cihazkodadı.mk dosyası oluşturalım.
touch vendor/aokp/products/cihazkodadı.mk
gedit vendor/aokp/products/
cihazkodadı.mk

LG Optimus G için örnek
Kod:
touch vendor/aokp/products/geeb.mk
gedit vendor/aokp/products/geeb.mk
Alttaki satırları kendi cihazınıza göre düzenleyip yapıştırın.

Kod:
# Inherit AOSP device configuration for geeb
$(call inherit-product, device/lge/geeb/full_geeb.mk)

# Inherit AOKP common bits
$(call inherit-product, vendor/aokp/configs/common.mk)

# Inherit GSM common stuff
$(call inherit-product, vendor/aokp/configs/gsm.mk)

# Setup device specific product configuration
PRODUCT_NAME := aokp_geeb
PRODUCT_BRAND := google
PRODUCT_DEVICE := geeb
PRODUCT_MODEL := Optimus G
PRODUCT_MANUFACTURER := LGE

Alttaki kodu yazın.

Kod:
gedit vendor/aokp/products/AndroidProducts.mk
Alttaki satırları dosyaya ekleyin.

$(LOCAL_DIR)/cihazkodadı.mk \

Optimus G için

Kod:
$(LOCAL_DIR)/geeb.mk \
Başka romlar için kernel düzenlemesi de gerekebilir bunları araştırarak öğrenebilirsiniz.
Kaynak Kodların Düzenlenmesi
Bu bölüm isteğe bağlı
Altta linkini verdiğim konuda derleme araçları ve kavramları hakkında bilgi verilmiş ve çeşitli düzenlemeler anlatılmıştır. 

Repo Aracı, manifest, local_manifest ve Diğer Kavramlar

ROM Derleme

Kod:
. build/envsetup.sh
Kod:
lunch
lunch komutunu verince önünüze bir liste gelecek.

 

Listede telefonunuzun yanındaki numarayı yazıp Enter'layın.
İşlem bitince alttaki kodla zip paketini oluşturun.

Kod:
make -j# otapackage
# işareti yerine bilgisayarınızın çekirdek sayısını yazın.

Bu koddan sonra yarım saat beklersiniz tahminen. Tabi bilgisayara göre artıp azalabilir.
Her şey doğru giderse şunu göreceksiniz.



cm10.1 rom zip dosyanızı android/out/target/product/cihaz_kod_adı dizininde bulabilirsiniz.

Güncelleme Yapma

ROMlar sürekli güncelleme alırlar sizinde kaynak kodunuzu güncelleyip tekrar derleme yapmanız gerekir. Bu işlem ilki kadar uzun sürmez sadece yeni güncellemeleri çektiğimiz için çok küçük boyutludurlar. Bunun için alttaki kodları kullanın.

Kod:
cd android
repo sync
. build/envsetup.sh
lunch
Gerisini biliyorsunuz.

1 yorum:

  1. selamlar hocam şimdi derleme yaparken derleme yapacağımız kernelin source codu gcc versionu java versionu değişiyor kimi kernel üst version kullanırken kimi kernel alt version kullanıyor ve her kaynakta yazmıyor genelde xda forumlarındaki kernelleri derlemeye çalıştım çünki orjinal kernel baya yavan kalıyor onca düzenlemenin üstüne değiştireceğimi değiştirip make etmeye çalıştığımda birsürü hata alıyorum s8 G950F TR model telefonuma kvm eklentisi yapmaya çalıştım fakat başarılı olamadım bi türlü derleyemedim ilgimi çeken konu bu https://forum.xda-developers.com/galaxy-s8/help/arm-kvm-kernel-virtual-machine-enabled-t3772434

    kerneli şu şekilde düzenledikten sonra kvm desteği geleceğini söylüyor

    dd the following lines to file: arch/arm64/configs/​exynos8895-dreamlte_defconfig
    CONFIG_VIRTUALIZATION=y
    CONFIG_KVM=y
    CONFIG_KVM_MMIO=y
    CONFIG_KVM_ARM_HOST=y

    #from the command line type:
    make clean
    make mrproper
    make ​exynos8895-dreamlte_defconfig

    benim şuan kullandığım rom bu
    https://forum.xda-developers.com/galaxy-s8/samsung-galaxy-s8--s8-cross-device-development/rom-lineageos-15-1-t3899829

    LineageOS 16.0 un betası çalışacak şekilde hazırlanmış bi kernel var içinde

    Source codu olarak verdiği bağlantı bu https://gitlab.com/exynos8895/android_kernel_samsung_universal8895

    uğraştım ama yapamadım yardımcı olabilirseniz sevinirim türkçe güncel bi kaynak yok eskininde uygulamalar yöntemler değiştiği için bi önemi kalmıyor

    bakın buda başka bi kernel bir çok roma uyum sağlayabilen global bi kernel
    https://forum.xda-developers.com/galaxy-s8/samsung-galaxy-s8--s8-cross-device-development/kernel-tgpkernel-t3654423 soruce kodu aşşağıda

    Source Code: https://github.com/TheGalaxyProject/

    fakat adam source coduna şöyle bi not düşmüş

    How to use
    Adjust the toolchain path in build.sh and Makefile to match the path on your system.

    Run build.sh with the following options, doesn't matter what order keep and silent are in.

    For example: build.sh 950 -s

    ./build.sh will build TGPKernel
    ./build.sh -k will build TGPKernel and also copy the .img files to the .output folder
    ./build.sh -s will build TGPKernel but only display warning and errors in the log
    ./build.sh -ks will do both -k and -s at the same time
    ./build.sh 950 will only build the S8 Kernel
    ./build.sh 955 will only build the S8+ Kernel
    When finished, the new files and logs will be created in the .output directory.

    If Java is installed, the .zip file will be signed.

    These commands can only be executed by themselves

    ./build.sh 0 will clear the workspace
    ./build.sh 00 will clear CCACHE
    ./build.sh configs will regenerate the stock dream(2)lte configs and overwrite the old ones

    kusura bakmayın ama ben konuya biraz fransız kaldım yani

    YanıtlaSil