Rehber [LineageOS / AOSP] Kernel Geliştirme Kılavuzu

mbtt

Deneyimli Üye
Deneyimli Üye
MIUI Sever
Adım
Lütfi
Cihazım
Le Pro3
Yaş
26
Konum
ankara
Katılım
22 Mayıs 2016
Konular
68
Mesajlar
102
Tepkime puanı
214
Puanları
43
DİPNOT
BU İŞLEMDEN DOĞACAK SORUNLARDAN ŞAHSIM VE FORUM MIUITR SORUMLU TUTULAMAZ.


AÇIKLAMA

Bu kılavuz ile körnılınıza Governor - Performans Düzenleyici (I/O Scheduler) - İşlemci ve Voltaj Hızı Artırma- Azaltma (Overclock - Underclock) gibi özellikler ekleyebilirsiniz.

Bu kılavuz göreceli hazırlanmıştır. Yani sizin kernel yapınız ve düzeninize göre değişebilir. Bunun için Bkz : (GOOGLE)

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
Governor Ekleme :
Öncelikle Gavırnır nedir ?

Governorlar basitçe işlemci profilinizin eklemelerinden başka birşey değildir.

Örneğin :

Smartass governoru işlemciyi batarya ve uzun kullanım için optimize ederken ;

Scary governoru işlemciyi performans için üst seviyede çalıştırır.

Ekleme Bölümü :

Governor basitçe .c uzantılı bir dosyadır.

kernel_kaynağı/drivers/cpufreq/ bölümünde atılır.

Tabi kendi governoruzunu kendiniz bulmak zorundasınız.Bunun içinde Bkz : (GOOGLE EMİCE)

Kconfig nedir?

Bu yapılandırma bölümü düzeninin arayüzüdür

Bunu açın ve aşağıdaki düzenlemeleri yapın :

Bu düzenleme için kernel tanıtma yapmanız gerekir.Yani governor ekleme için governor seçimini göstermelisiniz.

Kod:
config CPU_FREQ_GOV_GOVERNORİSMİ
tristate "'gov_ismi_küçük harflerle' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!

Smartass v2 için düzenleyecek olursak yukarıyı :

Kod:
config CPU_FREQ_GOV_SMARTASS2
tristate "'smartassV2' cpufreq governor"
depends on CPU_FREQ
help
'smartassV2' - a "smart" optimized governor!

Burası gibi olacaktır.

Seçimi ekledikten sonracığıma :

Bu governorun varsayılan olarak seçilmesini beyan etmek için aşağıdaki değişiklikleri yapınız.

Kod:
config CPU_FREQ_DEFAULT_GOV_GOVNAMEHERE
bool "gov_ismi_küçük harflerle"
select CPU_FREQ_GOV_GOVERNORİSMİ
help
Use the CPUFreq governor 'govismi' as default.

Örneğin Smartass v2 için :

Kod:
config CPU_FREQ_DEFAULT_GOV_SMARTASS2
bool "smartass2"
select CPU_FREQ_GOV_SMARTASS2
help
Use the CPUFreq governor 'smartassV2' as default.

Eğer ekleyecek doğru yeri bulamadıysanız aşağıdaki satırıları arayın.

Ve :

CPU_FREQ_GOV_CONSERVATIVE ve CPU_FREQ_DEFAULT_GOV_CONSERVATIVE

Altlarına yerleştirin.

Kconfig abimizden sonra,kaydedin ve çıkın.

Şimdi :

/drivers/cpufreq klasörünün içindeyken Makefile dosyasını açın ve :

Governorunuza karşılık gelen aşağıdaki satırı ekleyin.

Örneğin :

Kod:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS2)    += cpufreq_smartass2.o

Şimdi kernel_kaynağı/includes/linux klasörüne gidin.Ve cpufreq.h dosyasını açın.

Ardından:

Aşağıya inin ve şu satırları arayın aynı bölümde diğer governorların listeside olacaktır. Bu satırları ekleyin ve kendi governorunuza uygun olarak düzenleyin.

Kod:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND)
extern struct cpufreq_governor cpufreq_gov_ondemand;
#define CPUFREQ_DEFAULT_GOVERNOR    (&cpufreq_gov_ondemand)

Bu kısmı kendi governorunuza göre düzenleyin.

Örneğin Smartass v2 için :

Kod:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS2)
extern struct cpufreq_governor cpufreq_gov_smartass2;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass2)

Kaydedin ve kapatın.

İlk governor kurulumunu şimdi tamamlamış bulunmaktayız.

Bir governor ekleme örneği :

Performans Düzenleyici (I/O Schedulers) Ekleme :
Basitçe governorlar ile aynı çalışma prensibine sahiptir.

kernel_kaynağı/block bölümünde bulunurlar.

Düzenleyicinizi yukarıda belirttiğim bölüme atın.

Yani sio-iosched.c dosyasını kernel_kaynağı/block dizinine atın.

Şimdi Kconfig-iosched dosyanızı açın.

Aşağıdaki satır dizinini ekleyin.Tabi kendi geliştiricinize göre düzenleyeceksiniz.

Kod:
config IOSCHED_SIO
tristate "Simple I/O scheduler"
default y

Eğer varsayılan olarak ayarlamak istiyorsanız aşağıdaki gibi default satırını düzenleyin.Tabi kendi geliştiricinize göre düzenleyeceksiniz.

Kod:
default "sio" if DEFAULT_SIO

Kaydedin ve çıkın.

Şimdi kernel_kaynağı/block/ dizininde Makefile dosyasını açın.

Şimdi :

Kod:
obj-$(CONFIG_IOSCHED_SIO)    += sio-iosched.o

Ekleyin.

Bakınız eklenmiş bir Performans Geliştirici :

Bu kısımda eklediğiniz geliştirininin ismine ve özelliklerine göre düzenlemeleri kendiniz yapmalısınız.

Örneğin: bu sio değil zen geliştirici olsaydı aşağıdaki committeki değişiklikleri yapardınız.


İşlemci Hızı Artırma - Azaltma (Overclock - Underclock):
Kernel kaynağınızda arch/arm/boot/dts (diğer cihazlar) ya da arch/arm/boot/dts/qcom (qualcomm için) dizinine gidip cihaz işlemcinize uygun dtsi dosyasını bulun.

Örneğin:
Oneplus 3T
için -> msm8996pro.dtsi
Oneplus 5T
için -> msm8998-v2.dtsi

Ardından;

Kod:
&clock_cpu {


Bu satır ile başlayan kısmı bulun. Bu satırın aşağısında cihaz için işlemci frekansları bulunmaktadır.

Kod:
&clock_cpu {
    compatible = "qcom,cpu-clock-8996-pro";
    qcom,pwrcl-speedbin0-v0 =
        <          0  0 >,
        <  307200000  1 >,
        <  384000000  2 >,
        <  460800000  3 >,
        <  537600000  4 >,
        <  614400000  5 >,
        <  691200000  6 >,
        <  768000000  7 >,
        <  844800000  8 >,
        <  902400000  9 >,
        <  979200000 10 >,
        < 1056000000 11 >,
        < 1132800000 12 >,
        < 1209600000 13 >,
        < 1286400000 14 >,
        < 1363200000 15 >,
        < 1440000000 16 >,
        < 1516800000 17 >,
        < 1593600000 18 >,
        < 1728000000 19 >,
        < 1996800000 20 >;


Örnek olarak yukarıda ki satırlar Oneplus 3'den alınmıştır.

1.9 düşük performans çekirdeklerinden birinin çıkabileceği en yüksek ghz seviyesidir.

Biz bunu 2.1 değerine çıkarmak için aşağıdaki frekansı ekliyoruz.

Kod:
< 2188800000 21 >;


21 -> Frekans sırasıdır. Diğer frekansları incelerseniz görebilirsiniz.

Ayrıca sadece en sondaki frekansın sonunda " ; " olup diğerlerinde sadece " , " olmalıdır.

Yoksa githubda teker teker editlemek zorunda kalırsınız. :troll:

Ekledikten sonra böyle görünmelidir:

Kod:
&clock_cpu {
    compatible = "qcom,cpu-clock-8996-pro";
    qcom,pwrcl-speedbin0-v0 =
        <          0  0 >,
        <  307200000  1 >,
        <  384000000  2 >,
        <  460800000  3 >,
        <  537600000  4 >,
        <  614400000  5 >,
        <  691200000  6 >,
        <  768000000  7 >,
        <  844800000  8 >,
        <  902400000  9 >,
        <  979200000 10 >,
        < 1056000000 11 >,
        < 1132800000 12 >,
        < 1209600000 13 >,
        < 1286400000 14 >,
        < 1363200000 15 >,
        < 1440000000 16 >,
        < 1516800000 17 >,
        < 1593600000 18 >,
        < 1728000000 19 >,
        < 1996800000 20 >,
        < 2188800000 21 >;


Ardından aynı dosya içerisinde:

Kod:
&msm_cpufreq {


ile başlayan kısmı bulun. Üç aşağı beş yukarı aşağıdaki gibi görünür

Kod:
&msm_cpufreq {
    qcom,cpufreq-table-0 =
        <  307200 >,
        <  384000 >,
        <  460800 >,
        <  537600 >,
        <  614400 >,
        <  691200 >,
        <  768000 >,
        <  844800 >,
        <  902400 >,
        <  979200 >,
        < 1056000 >,
        < 1132800 >,
        < 1209600 >,
        < 1286400 >,
        < 1363200 >,
        < 1440000 >,
        < 1516800 >,
        < 1593600 >,
        < 1728000 >,
        < 1996800 >;
};


Bu kısmın sonuna

Kod:
< 2188800 >;


Eklenip manager uygulamalarında frekansın okunması sağlanmalıdır.

Eklendikten sonra aşağıdaki gibi görünür.

Kod:
&msm_cpufreq {
    qcom,cpufreq-table-0 =
        <  307200 >,
        <  384000 >,
        <  460800 >,
        <  537600 >,
        <  614400 >,
        <  691200 >,
        <  768000 >,
        <  844800 >,
        <  902400 >,
        <  979200 >,
        < 1056000 >,
        < 1132800 >,
        < 1209600 >,
        < 1286400 >,
        < 1363200 >,
        < 1440000 >,
        < 1516800 >,
        < 1593600 >,
        < 1728000 >,
        < 1996800 >,
        < 2188800 >;
};


Daha sonrasında derleme alıp kernel yöneticisi uygulamalarından frekansları kontrol edebilirsiniz.

Bu şekilde voltajı artırabilir azaltabilirsiniz.

Basite indirgenmiş anlatımdır. Daha geniş ve farklı işlemcilere & işlemci sürümlerine göre düzenlenebilir. Daha fazla çalışma protokolü eklenebilir. Yüksek seviyelerde sürekli çalışması için işlemci zorlanabilir.

Yüksek ve ya çok düşük voltajlar cihazın donanımına zarar verir. Bunu bilerek uygun ayarlarda tutmaya çalışın.

Kernel Güncelleme :
Kernel, Linux kaynağının verdiği güncellemelere göre Google tarafından Android tabanı için uyumlu hale getirilir.
Bu güncellemeleri kendi kernelimizle senkronize etmek ise kernelimizi güncel tutmamıza olanak sağlar.



1 - En yeni kernel kaynağını kernel.org sitesinden alın.

Kernel.org kaynağı en yeni kernel kaynağının evidir. Bu kaynağı aşağıdaki 3 linkten çekebilirsiniz.

git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git



Bu kaynaklardan en hızlı ve stabil olanı Google'nin üzerinden çekilendir. Yani 3. olan hep tercih edilir. Bunlara ek olarak Qualcommun kendi kurduğu geliştirme platformu olan CodeAuroraForum nam-ı diğer CAF'tan da snapdragon cihazlar güncelleme çekebilirler.

Aşağıdaki linklerden uygun kerneli seçin. Örneğin: 3.10.xx tabanlı bir kerneliniz varsa 3.10.xx / 3.18.xx ise 3.18.xx tercih edin.





İşlem ise terminale şu kodları verme ile gerçekleşir :

Kod:
git remote add upstream xxxxx -> xxxxx yukarıda seçtiğiniz kernel kaynağı linklerden birisidir.

git fetch upstream

Yukarıdaki 1. satır hangi kernel kaynağından güncelleme yapmak istiyorsanız orayı tanımlamanıza yarar.

upstream kısmını bir kaç farklı şekilde değiştirebilirsiniz. Bu kısmın ayrıntılı anlatımı için : 'nda Senkonizazyon & Güncelleme kısmını okumanızı tavsiye ederim.

Ardından 2. satırı verince o kernel kaynağının commit ve tree bilgilerini almış olursunuz.

Güncellemek içinse 2 farklı yöntem vardır. Merge ve Cherry-pick yine bu kısmın ayrıntılı anlatımı için yukarıda bahsettiğim git kullanım kılavuzunu okumanızı şiddetle tavsiye ederim.

2 -Merge - Cherry-Pick farkları ve özellikleri

Şimdi bu güncellemeleri hangi yöntemle çekeceğinizi seçmeniz gerekli.
Bunun için 2 yöntem vardır.

Cherry-Pick :

Artıları :
  1. Conflictleri ve neden oldukları sorunları çözmek daha kolaydır.
  2. Yeniden taban alınmak istenirse commitleri tek başına çalıştığı için daha kolay taban alınır.
Eksileri :
  1. Her commitin ayrı ayrı seçilmesi gerektiği için daha uzun sürer.
  2. İlk bakışta yapmak merge işlemine göre daha zor

Merge :

Artıları :
  1. Birleştirmek için tüm temiz yamaları beklemek zorunda kalmazsanız daha hızlıdır.
  2. Ayırt etmesi Cherry-Pick işlemine göre daha kolay ve topludur.

Eksileri :
  1. Hangi commitin conflicte neden olduğunu anlamak daha zordur, Cherry-Pick işlemindeki gibi size direk söylemez.
  2. Yeniden taban almak daha zordur, tüm commitleri teker teker almak için yine karşınıza Cherry-Pick işlemi çıkacaktır.



3 - Güncelleme

Bu kısım işlemin en önemli kısmıdır. Ki burada yapacağınız değişiklikler bazı özelliklerin cortlamasına (ses - görüntü - şarj olma vb.) neden olabilir.


Cherry-Pick yöntemi ile :

Kod:
git cherry-pick commitnumarası

Bu kodu vererek kernelinize son güncellemeyi senkronize edebilirsiniz.

Örneğin :

Kod:
git cherry-pick a6290df



Merge yöntemi ile :

Kod:
git merge <güncellemek-istediğiniz-sürüm>


Örneğin :

Kod:
git merge v3.18.31


NOT : Bu işlemi yapmadan önce bir log mekanizması oluşturmanızı öneririm. Ki bu sizin commitlerinizi daha ayrıntılı görüp conflictlerde aklınızın karışmamasını sağlar.

Bu log mekanizmasını oluşturmak için :

Kod:
$(git log --oneline <şuanki-sürüm>..<güncellemek-istediğiniz-sürüm>;)

Şunu da eklerseniz daha estetik bir görünüm kazanır logunuz :troll:

Kod:
Signed-off-by: Konyalı Lütfi <sonmez@gmail.com>"

Üst kısımda yapmanız gereken tek şey isminiz ve gmailinizi benimkilerle yer değiştirmek. :)


Daha sonra ise aşağıda ki kodları girerek kernelinizin merge işlemini tamamlamış olursunuz.
Kod:
git add .

git merge --continue
 
Son düzenleme:
Üst Alt