9 Ağustos 2015 Pazar

Kaynak Koddan Kernel Derleme



Hazırlıklar

Kaynak Koddan Rom Derleme

Bu konudaki "Hazırlıklar" bölümünün yapılmış olması lazım :)

Bir teminal açın.
Kod:
mkdir android
cd android
mkdir kernel
Kaynak Kodlar ve Araçlar

İlk önce derleme ve boot.img araçlarını indirelim.

Kod:
cd android/kernel
git clone git://github.com/DooMLoRD/android_prebuilt_toolchains.git toolchains
git clone git://github.com/sakindia123/boot-image-tools.git bootimagetools
Çeşitli markaların kendi sitelerinde paylaştığı kodları kullanabilirsiniz veya XDA gibi sitelerdeki geliştiricilerin verdiği kernel kodlarınıda kullanabilirsiniz. Aşağıdaki linklerden kendi cihazınızın kernel kodlarını indirin.

HTC HTCdev - HTC Kernel Source Code and Binaries
Samsung Samsung Opensource Release Center
Google Binaries for Nexus Devices - Android — Google Developers
LG OpenSource Code Distribution
Sony Xperia™ open source archives - Developer World
Motorola Motorola Home - Motorola USA
Lenovo Home - Lenovo Support (US)
Huawei JoeyJiao/android-huawei-kernel-common · GitHub
ZTE ZTE Corporation
Acer Developer Center
Asus Garmin-Asus - Connect. Communicate. Navigate.
Meizu SourceForge.net: meizu-firmware - Project Web Hosting - Open Source Software

İndirdiğiniz dosyayı zipten çıkarın ve dosyaları android/kernel dizinine açacağınız bir klasöre atın. Mesela ben "android/kernel/cihazadı_androidversiyon_kernel" şeklinde oluşturuyorum.
örnek: android/kernel/falcon_4.4.4_kernel

Düzenlemeler (Bu kısım isteğe bağlı)

Overclock/Undervolt

Bu terimler işlemci hızı arttırma ve voltaj ayarı yarı yapma anlamını taşır. Bu noktada küçük bir problemimiz var. Ben size bu işlemleri anlatamam çünkü her çipset(Tegra, QualComm, MTK vb.) için bu anlatım farklı olcaktır. Bu yüzden bunu kendiniz araştırıp yapmalısınız.

Yama Uygulama

İstediğiniz bir yamayı indirin. Bu örenekte ben bunu kullanacağım. [Diff] AndroidGovernorPatch - Pastebin.com
Dosyayı "kernelPatch" adıyla kaydedip android/kernel dizinine atın.

Sonra kernel kaynak kodunuzun bulunduğu dizine gidin. Bu örnekte android/kernel/falcon_4.4.4_kernel dizinine gireceğiz. İkinci komut ise bizim yamamızı kaynak koda uygulayacak.

Kod:
cd android/kernel/falcon_4.4.4_kernel
patch -p1 < ../kernelPatch
Governer Ekleme

Bu örnekte Smartass governerının eklenişini göstereceğim.
drivers/cpufreq/Kconfig dizinini açın.
Alttaki satırları diğer governerların arasına ekleyin.

Kod:
config CPU_FREQ_DEFAULT_GOV_SMARTASS
            bool "smartass"
            select CPU_FREQ_GOV_SMARTASS
            select CPU_FREQ_GOV_PERFORMANCE
            help
              Use the CPUFreq governor 'smartass' as default.
Kod:
config CPU_FREQ_GOV_SMARTASS
           tristate "'smartass' cpufreq governor"
           depends on CPU_FREQ
           help
             smartass' - a "smart" optimized governor!
             If in doubt, say N.
"drivers/cpufreq/Makefile" dizinini açın.
Alttaki satırı ekleyin.

Kod:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS)     += cpufreq_smartass.o
drivers/cpufreq/ dizinine cpufreq_smartass.c adında bir belge oluşturun.
Alttaki kodları içine ekleyin.
[C] Smartass Kernel Govenor - Pastebin.com
include/linux/cpufreq.h dosyasını açın.
Cpufreq Default başlığının altına şu kodu ekleyin.

Kod:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS)
extern struct cpufreq_governor cpufreq_gov_smartass;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass)
Bir Governor ekledik. Diğer ekleyeceğiniz governorlar içinde bu yolu kullanın.

Yapılandırma Dosyası Ekleme (Bu kısım isteğe bağlı)

Başka Kernelden Yapılandırma Dosyası Alma

Bu işlem cihazınızda çalıştığını bildiğiniz bir kernelin yapılandırma(config) dosyasını kerdi kernelinize aktararak işinizin kolaylaşmasını sağlar. Her kernel /proc/config.gz metodunu desteklemez. Birden fazla kernelle denemek zorunda kalabilirsiniz. Eğer bu adımlarla yapamazsanız ikinci başlıktaki anlatımı kullanın.

Sizin derleyeceğiniz kernele benzer bir kerneli cihazınıza kurup bilgisayara bağlayın.
Bir terminal açın ve şu kodları girin.

İlk kod sizi derlenecek kernelin ana dizinine götürecek.İlk adımlardan hatırlayacağınız gibi ben dizinimi android/kernel/falcon_4.4.4_kernel seklinde oluşturdum. İkinci kod bağlı cihazdan config.gz dosyasını çıkaracak. Üçüncü kod config.gz içindeki config dosyasını çıkaracak. Son kod ile config dosyasını arch/arm/configs/cihazyapılandırmaadı_defconfig dosyasının içine yazacağız. benim cihazın yapılandırma adı falcon olduğu için ben arch/arm/configs/falcon_defconfig dizinine taşıdım. Yapılandırma adı cihazkodadı_vb şeklindedir. Bilmiyorsanız arch/arm/configs/ içindeki orjinal defconfig dosyasının adına bakın.

Kod:
cd android/kernel/falcon_4.4.4_kernel
adb pull /proc/config.gz
gunzip config.gz
mv config arch/arm/configs/falcon_defconfig
Üretici Yapılandırma Dosyası Kullanma

İsterseniz kernelin kendi içindeki defconfig dosyasınıda kullanabilirsiniz veya cihazınızın defconfig adıyla internette arama yapabilirsiniz. Bunuda yine aynı dizine atın.

Derleme

Hazırlık (Bu adımı her derlemede yapmalısınız.)

ilk kodla kernel ana dizinine gidin. İkinci ve üçüncü kodla derleme mimarisini(arm) ve derleme aracını(Linaro) belirtin.

Kod:
cd android/kernel/falcon_4.4.4_kernel
export ARCH=arm
export CROSS_COMPILE=~/android/kernel/toolchains/arm-eabi-linaro-4.6.2/bin/arm-eabi-
İlk Derleme

İlk kod cihazımızın anakart koduna uygun yapılandırma dosyasını yükler. Her cihazın bir anakart serisi (Qualcomm Snapdragon 400, Qualcomm Snapdragon 810, Qualcomm Snapdragon 620 gibi) ve her serinin pek çok versiyonu olabilir. Mesela Qualcomm Snapdragon 400 çipsetinin alttaki linktede görebileceğiniz gibi pek çok versiyonu vardır.

Qualcomm Snapdragon 400

İlk kodda cihazınızın anakartının versiyon koduyla adlandırılan defconfig dosyasını arch/arm/configs dizininde bulup adını kopyalayıp make komutunun yanına yazmalısınız. Bu yazdığınız kodla cihazınızın anakartına uygun ayar dosyasını yüklemiş oldunuz. İkinci kod kerneli yapılandırmak için birinci adımda yüklediğiniz yapılandırma dosyasını kullanıp bir menü açar. Son komut ise derlemeyi başlatır. make -j4 komutundaki 4 rakamın işlemin yapılma hızıdır. bilgisayarınızın çekidek sayısını yazmanız en iyi sonucu verir.

Kod:
make msm8626_defconfig
make menuconfig
make -j4

Tekrar Derleme

Burda tekrar config dosyasını yüklemeye gerek yok.

Kod:
make clean
make oldconfig
make -j4

Kernel Modüllerini Derleme

Kod:
make modules
Sonuç

Derlemenin bitmesini bekleyin.

Derleme Başarılı Değilse

Google amcayla mutluluklar :)

Derleme Başarılıysa

Kerneli derlemiş oldunuz. Bu kerneli cihazınızda kullanmak için ".ko" uzantılı kernel modüllerine ve zImage dosyasına ihtiyacınız var. Bu dosyaların yerlerini derleme sırasında görebilir veya alttaki kodlarla buları başka bir dizine taşıyabilirsiniz. Terminal açın ve ilk komutla kernel ana dizinine gidin. ikinci komutla cihazadı_androidversiyon_kernel_output şeklinde bir dosya oluşturulacak. Ben kendi cihazıma göre yazdım kodu. Üçüncü kodla zImage dosyasını output içine koplayalanacak. Son kodla .ko uzantılı modüllerin tamamı output klasörüne kopyalanacak.

Kod:
cd android/kernel/falcon_4.4.4_kernel
mkdir ../falcon_4.4.4_kernel_output
cp arch/arm/boot/zImage ../falcon_4.4.4_kernel_output/zImage
find . -name "*.ko" -exec cp {} ../falcon_4.4.4_kernel_output \;

Final

1. Yol

Google'da aratarak kendi cihazınıza uygun bir kernel.zip bulun ve içindeki zImage dosyasını ve modülleri sizinkiyle değiştirip recovery ile flaşlayın.

2. Yol

Şimdi bu zımage dosyasıyla ne işe yarayacak diyebilirsiniz. Şöyle açıklayayım zImage + ramdisk = boot.img yani bir ramdisk çıkaracağız bunu zImage ile birleştirip boot.img yapacağız. zImage dosyasını ve modülleri çıkardığımıza göre şimdi bir boot.img dosyasından ramdisk çıkarmamız gerekiyor. Unutmayın hangi romun boot.img dosyasındaki ramdiski kullanırsanız kerneliniz o romla uyumlu olacaktır. Mesela cm10.1 ramdiskiyle yapılan bir kerneli cm11 için kullanamazsınız. Şİmdi bir romdan boot.img dosyasını alıp android/kernel/falcon_4.4.4_kernel/falcon_4.4.4_kernel_output dizinine attım.(Siz kendi dizininize kopyalayacaksınız.)

Kod:
cd android/kernel/falcon_4.4.4_kernel/falcon_4.4.4_kernel_output
export PATH=${PATH}:android/kernel/bootimagetools/folder/tools
unpackbootimg -i boot.img
Terminali kapatmayın. Son komutla boot.img dosyasından pek çok dosya çıktı.Bize lazım olanlar zImage, modüller ve boot.img-ramdisk.gz dosyaları. Dosya dizinine gidin ve bu dosyalar harici diğer boot.img dosyalarını silin. Şimdi terminale dönün ve şu kodu girin.

Kod:
mkbootimg --kernel zImage --ramdisk boot.img-ramdisk.gz --cmdline no_console_suspend=1-console=null --base 12c00000 --output boot-new.img
İşlemler bitti. Bizim kernelimiz boot-new.img adıyla oluşturuldu.

Yükleme

Cihazınızı fastboot moda alın (Her cihaz için farklı) ve bilgisayara bağlayın. Aşağıdaki komutla boot-new.img dosyasını cihazınıza yükleyin.

Kod:
fastboot flash boot boot-new.img
Şimdi cihazı açmadan recovery moda girip mount system yapın tekrar bilgisayara bağlayın.

Üçüncü kodla modüller cihaza taşınacak ve son kodlada cihaz yeniden başlatılacak.

Kod:
adb remount
cd android/kernel/falcon_4.4.4_kernel/falcon_4.4.4_kernel_output
adb push '*ko' system/lib/modules
adb reboot

1 yorum:

  1. ilk derlemede make -j4 dedikten sonra
    " CHK include/linux/version.h
    CHK include/generated/utsrelease.h
    CC scripts/mod/empty.o
    make[1]: 'include/generated/mach-types.h' is up to date.
    CC kernel/bounds.s
    arm-eabi-gcc: No such file or directory
    Is your PATH set correctly?
    scripts/Makefile.build:307: recipe for target 'scripts/mod/empty.o' failed
    make[2]: *** [scripts/mod/empty.o] Error 2
    scripts/Makefile.build:443: recipe for target 'scripts/mod' failed
    make[1]: *** [scripts/mod] Error 2
    Makefile:512: recipe for target 'scripts' failed
    make: *** [scripts] Error 2
    make: *** Bitmemiş işler için bekliyor....
    arm-eabi-gcc: No such file or directory
    Is your PATH set correctly?
    /home/enesutku07/android/kernel/falcon_4.4.4_kernel/./Kbuild:35: recipe for target 'kernel/bounds.s' failed
    make[1]: *** [kernel/bounds.s] Error 2
    Makefile:814: recipe for target 'prepare0' failed
    make: *** [prepare0] Error 2
    " diyor ne yapmam kazım. d802 android kk kernel yapıyorum.

    YanıtlaSil