Kendi kernelinizi yuvarlayın

  • Konuyu başlatan gen2
  • Başlangıç Tarihi
  • Mesaj 7
  • Görüntüleme 1B

gen2

Megapat
Katılım
7 Aralık 2019
Mesajlar
9.544
Makaleler
1
Çözümler
66
Merhaba bugün Linux üzerinde kendi kernelinizi nasıl konfigüre eder ve derlersiniz bunu anlatacağım, verdiğim bilgiler yıllar içinde çeşitli kaynaklardan edindiğim bilgiler ve deneyimlerimden oluşmaktadır ve isteyen herkes her türlü amaçla kullanabilir. Şimdi fazla uzatmadan Gentoo üzerinde nasıl yapılacağını anlatmaya başlıyorum. Anlattıklarımı deneyimli kullanıcılar kolayca kendi dağıtımlarına uyarlayabileceklerdir. Kendi kernelimizi ve kernel konfigürasyonumuzu oluşturma sebebimiz genelde sağladığı performans kazancı, kernel derleme süresini düşürmek, kernelin ve modüllerin kapladığı alanı küçültmek olur.
Örneğimizi Xanmod kernel üzerinde göstermek istiyorum. İlk olarak Releases - XanMod Kernel sitesine girip resimde gösterdiğim kaynak download kısmından istediğimiz kaynağın GitHub adresine giderek indiriyoruz. Ben örnek olarak 5.10.4-xanmod1-cacule versiyonunu kullanacağım. Bu versiyonun özelliği FreeBSD'nin ULE Scheduler'ından esinlenilmiş Cacule scheduler yamalarıyla yamalanmış olması. Sunduğu şey interaktivite puanı tabanlı işlem planlamasıdır ve masaüstü sistemlerin daha hızlı tepki vermesini sağlamayı amaçlamaktadır. Kaynağın GitHub sayfasına girip Linux-5.10.4-xanmod1-cacule. ZIP isimli dosyayı indiriyoruz.

Screenshot_2021-01-03_21-54-11.png


İndirme tamamlandıktan sonra terminalimizi açıp sudo unzip ~/Downloads/linux-5.10.4-xanmod1-cacule.zip -d /usr/src komutunu girerek kaynağı gerekli klasöre kopyalıyoruz. Kaynağımız gerekli klasöre açıldıktan sonra root oluyoruz sudo su klasöre giriş yapıyoruz.cd /usr/src/linux-5.10.4-xanmod1-cacule Ardından make menuconfig kernel konfigürasyon menüsünü açıyoruz.

Screenshot_2021-01-03_22-16-28.png

Kernel konfigürasyonunda önemli olan zorunlu kalmadıkça modülleri M olarak yani dış modül olarak eklemektir. Bu kernelin boyutunu ve kullandığı RAM miktarını azaltır. Kısaca özetleyecek olursak, General setup sayfasında kernel ile alakalı genel konfigürasyon ayarları bulunuyor, bunlar kernel sıkıştırma yöntemi, on kabul, kontrol grupları, planlayıcı seçenekleri, ramdisk desteği ve sıkıştırma yöntemi gibi seçenekler barındırıyor. Bu sayfayı açıp seçeneklerin yardım sayfalarını okuyarak ihtiyacımız olduğu çekilde konfigüre ediyoruz. Özellikle Cacule Scheduler'ın aktive edildiğine emin olalım ve diğer konfigürasyonları ayarlayalım.

Screenshot_2021-01-03_22-22-24.png

Exit seçeneğine tıklayıp çıkalım. Ardından Processor type and features sayfasını açıyoruz. Bu sayfada işlemci tipinizi ve işlemci ile alakalı opsiyonlar bulunuyor. Bu sayfada özellikle dikkat etmemiz gereken opsiyonlar Processor family ve timer Frequency olacak. İşlemcinizden tam performans almak için Processor family seçeneğini native optimizations autodetected by gcc olarak belirliyoruz. Timer Frequency ise isteğe bağlı düşük frekanslar 100Hz düşük güç tüketimi, server ortamları ve çıkış potansiyeline yönelik iken 300Hz+ seçenekleri masaüstü çabukluğu için uygun seçenekler olacaktır, ancak daha fazla güç tüketimine sebep olacaktır. Ben kendime en uygun olarak 300Hz seçeneğini görüyorum çünkü laptop kullanıcısıyım.

Screenshot_2021-01-03_22-29-42.png

Konfigurasyonumuzu yapıp exit ile sayfadan çıkıyoruz. Power management and ACPI options sayfasına girip sistemimizin gerekli güç ayarlarını yapıyoruz. Benim için gerekli kısımlar hibernate ve suspend özelliklerinin bulunması ve CPU Frequency scaling sayfasından ayarlanan öntanımlı işlemci valisinin powerasave olması.

Screenshot_2021-01-03_22-33-18.png

Sıra geldi Bus options (PCI etc.) sayfasına burada yapabileceğimiz fazla bir şey yok eğer ISA Bus bulunan bir bilgisayar kullanıyorsanız ise ki bu çok geçmişte kaldı, desteğini açabilirsiniz ayrıca eğer deferred Console takeover özelliği istiyorsak yani Boot esnasında OEM logosunun görünmesini istiyorsak Mark VGA/VBE/EFI FB as generic System framebuffer desteğini işaretlemiyoruz.

Screenshot_2021-01-03_22-36-27.png

Sırada Binary Emulations sayfası var burada 64 Bit için X32 abisi kullanacaksak ve 32-Bit programlar kullanmayı düşünüyorsak IA32 Emulation ve X32 ABI for 64-Bit mode seçeneklerini aktive ediyoruz.

Screenshot_2021-01-03_22-39-43.png

Firmware Drivers sayfası. Burada önemli kısımlar eğer UEFI kurulum kullanıyorsak EFI (Extensible Firmware Interface) Support sayfasında bulunan EFI Variable Support VIA sysfs seçeneğinin aktif olması ve EFI Runtime Configuration Interface Table Version 2 Support seçeneğinin aktif olması.

Screenshot_2021-01-03_22-43-29.png

Virtualization sayfası. Burada eğer VirtualBox gibi emülatörler kullanmak istiyorsak gerekli modülleri kernelimize eklememiz gerekiyor.

Screenshot_2021-01-03_22-48-14.png

General architecture-dependent options sayfası. Burada mimariye bağlı seçeneklerin konfigüre edildiği sayfa buradaki önemli kısımlar, performans için Optimize Very unlikely/likely branches seçeneği ve buffer overflow ataklarına karşı bir koruma mekanizması olan Stack Protector buffer overflow detection seçeneklerinin aktif olması. Ayrıca diğer seçenekleri de yardım sayfalarını okuduktan sonra konfigüre etmelisiniz.

Screenshot_2021-01-03_22-48-14.png

Enable loadable module Support sayfası. Burada yüklenebilir modüller için yapabileceğiniz konfigürasyon ayarları bulunuyor. Burada tavsiyem Module unloading, Forced module unloading ve NVIDIA proprietary sürücüleri için gereken Enable unused/obsolete exported symbols seçeneklerinin aktif olması. Tabii ki diğer seçeneklere de göz atıp ihtiyacınız olanları aktive ediniz.

Screenshot_2021-01-03_22-51-27.png

Enable the block layer sayfası. Burada blok katmanı ile ilgili seçenekler yani depolama alanları seçenekleri bulunuyor. Burada önemli olan Multiqueue writeback throttling ve Partition Types sayfasında ihtiyacımız olan bölümleme desteklerinin aktif edilmesi.

Screenshot_2021-01-03_22-56-55.png

IO Schedulers sayfası. Bu sayfada giriş çıkış planlayıcı seçenekleri bulunuyor. Burada tavsiye edilen SSD diskler için Multiqueue Deadline, ekstra çabukluk ve çoklubaşlık için BFQ seçeneğinin kernele eklenmesi.

Screenshot_2021-01-03_22-59-17.png

Executable file formats sayfası. Bu sayfada seçenek yardım sayfalarını okuyarak ihtiyacımız olan konfigürasyonu yapabiliriz.

Screenshot_2021-01-03_23-00-05.png

Memory Management options sayfası. Hafıza yönetim seçenekleri bulunur, buradan Transparent Hugepages, Cleancache, ZRAM, ZSWAP gibi özellikleri kernele ekleyebiliriz. Yine yardım sayfalarına göz atıp ihtiyacınız olan seçenekleri seçin. Dikkat edin bu sayfada yapacağınız ayarlar Boot sürenizi ve RAM kullanımınızı pozitif veya negatif şekilde etkileyebilir.

Screenshot_2021-01-03_23-04-37.png

Networking Support sayfası. Burada TCP/IP Bluetooth protokolleri ve buna benzer ayarlar vardır. İHtiyacınız olan protkolleri ve IPTables seçeneklerini yardım sayfalarından esinlenerek düzenleyin.

Screenshot_2021-01-03_23-08-43.png

Device Drivers sayfası. Burası en karmaşık kısım olacaktır. Burada bilgisayarınızda bilgisayarınızda bulunan donanımların ve gelecekte bilgisayarınıza ekleme ihtiyacınız olabilecek donanımların sürücülerini kernele ekliyoruz. Tavsiyem IDE, SATA gibi cihazların sürücülerini ve Hardware monitöring seçeneklerini kernele * olan internal module şeklinde eklemeniz bu sayede bir initramfs yani ramdisk kullanmadan sisteminizi rahatça Boot edebilirsiniz. Diğer bütün cihazları modül yani M olarak eklemenizi tavsiye ederim. Modüler kerneller daha az hafıza kullanırlar.

Screenshot_2021-01-03_23-14-31.png

File systems sayfası. Bu kullandığınız veya ileride kullanmak isteyenceğiniz dosya sistemlerini ve disk protokollerinin konfigüre edildiği sayfa burada genellikle * işareti koyarak ekleme yapın ki ramdisk ihtiyacınız olmasın bu sayede Boot sürenizi birkaç saniye azaltabilirsiniz.

Screenshot_2021-01-03_23-16-40.png

Security options sayfası. Bu sayfada kernel güvenliği ile ilgili onlarca seçenek bulunmaktadır SELinux, AppArmor, Yama, Tomoyo gibi. Burada kernelinizi istediğiniz kadar sertleştirebilirsiniz. Ancak uyarayım performans ve RAM kullanımı üzerine en büyük etkisi olan seçenekler bu sayfadadır. Güvenlik arttıkça RAM kullanımı artar ve performans düşer, yine ihtiyacınıza göre konfigüre edin.

Screenshot_2021-01-03_23-20-47.png

Cryptographic API sayfası. Bu sayfada Crypto makine ve algoritma seçenekleri bulunacak. Sık kullanılanlar zaten kendiliğinden ekli olacaktır, ekstra ihtiyaçlarınızı belirleyip M yani module olarak ekleyin. Yardım sayfalarını okuyarak hangilerine ihtiyacınız olduğuna karar verin.

Screenshot_2021-01-03_23-37-32.png

Library routines sayfası. Bu sayfada her şeyden bir parça bulacaksınız. Örnek olarak sıkıştırma algoritmaları, Data bütünlüğü doğrulama algoritmaları ve konsol fontları seçimi gibi. İhtiyaçlarınıza göre konfigüre edin.

Screenshot_2021-01-03_23-40-24.png

Kernel Hacking sayfası. Burası kernel ile ilgili genel ince ayarları içerir. Debugging, Unwinder, Tracing burada bizi ilgilendiren çok fazla bir şey yok. Performans amaçlı konfigüre ettiğinizi düşünürsek ORC Unwinder seçmeli ve Kernel Debugging işaretini kaldırmalısınız.

Screenshot_2021-01-03_23-43-25.png

Sonunda bitirebildik. Konfigürasyonumuzu. Config adıyla kaydediyoruz ve exit ile çıkıyoruz. Sıra kerneli derlemekte, şimdi nproc+1 olacak şekilde başlık sayısını seçiyoruz. Unutmayın başlık başına tavsiye edilen Memory miktarı 2 GB'dır. Kullandığım işlemci i5-8300H olduğu ve 16 GB RAM'im olduğu için ben make -j8 komutunu girip derlemeyi başlatıyorum. Kernel konfigürasyonunuzun karmaşıklığına, işlemci çekirdek sayısı ve hızına göre bu işlem 5 dakika ile 12 saat arası değişebilir. Bilgisayarımın sabit donanımlı bir laptop olmasının ve deneyimim sayesinde hazırladığım konfigürayonun derlenmesi 4 dakika 12 saniye sürdü.

Screenshot_2021-01-03_23-53-47.png

Şimdi make modules_install ve sonrasında make install komutları ile modülleri kuruyoruz ve kerneli /Boot klasörüne kopyalıyoruz.

Screenshot_2021-01-03_23-56-15.png

Kernel kurulumumuz bitti. Şimdi eğer grub kullanıyorsak grub-mkconfig -o /boot/grub/grub.cfg komutuyla kernelimizi grub menümüze ekliyoruz. Systemdboot kullanıyorsak /boot/loader/entries/ klasörünün içine konfigürasyon dosyamızı ekliyoruz ve reboot atıyoruz. Bu kadar arkadaşlar yeni kerneliniz kullanıma hazır. DKMS kullanan dağıtımlar için gerekli DKMS komutlarını çalıştırmanız gerekebilir.
 

Dosya Ekleri

  • Screenshot_2021-01-03_23-47-03.png
    Screenshot_2021-01-03_23-47-03.png
    623,7 KB · Görüntüleme: 57
Son düzenleme:
Burada verdiğim bilgilerin kaynağı Gentoo Wiki sayılabilir. Yıllar içinde edindiğim kernel deneyimleri ve kendi araştırmalarımın bir sentezidir. İnternette bu şekilde tam olarak sunulmuş bir kaynağa rastlayamayabilirsiniz.
Çok özeniyorum yazılım bilenlere. Kurs felan aldım ben girip 10 dk sonra bi film izleyeyim diyip kaçıyorum. :D
Ben pek yazılım bilmiyorum aslında. Linux'un temellerine biraz hakimiyetim var sadece.
 
@gen2 elinize sağlık. Benim de içimde bir istek uyandı desem yalan olmaz. Yazdıklarınızdan kendi Raspberry Pi cihazım için hafif bir şey çıkarmayı düşünüyorum. ARM mimarisi için hangi kernel uygun olur acaba?

Annem yoğun bakımda bypass olmayı bekliyor. Ne yaptıysam aklımdan çıkaramadım, bende çareyi dikkatimi toplayabileceğim bir konuya odaklanmakta buldum. Sorunun cevabı şöyle, genelde Raspberry Pi için hazırlanan kerneller optimizedir çünkü Raspberry'nin donanımı sabit. Ancak illa elden geçirmek en ince ayrıntısına kadar optimize etmek istiyorsan yapman gereken en önemli şey optimizasyon düzeyini alan odaklı yapmaktır. Gereksiz sürücü eklememen ve kernel debugging seçeneğini kapatman büyük oranda yer kazandıracaktır. Ayrıca Raspberry işlemcisi gibi düşü işlemci önbelleği olan işlemcilerde boyuta göre optimizasyon önbellek ıskalarını azaltır ve performansı arttırır.
Genkernel kullanıyordum, sabah deneyeceğim. Teşekkürler rehber için.
No problem kardeşim.

Sıkıcı derecede uzun olmaması için biraz sade tutmak zorunda kaldım. Detay isteyen arkadaşlar konu altına sorularını yazabilirler, bildiğim kadarıyla cevaplamaya çalışırım.
 
Son düzenleme:
Annem yoğun bakımda bypass olmayı bekliyor. Ne yaptıysam aklımdan çıkaramadım, bende çareyi dikkatimi toplayabileceğim bir konuya odaklanmakta buldum. Sorunun cevabı şöyle, genelde Raspberry Pi için hazırlanan kerneller optimizedir çünkü Raspberry'nin donanımı sabit. Ancak illa elden geçirmek en ince ayrıntısına kadar optimize etmek istiyorsan yapman gereken en önemli şey optimizasyon düzeyini alan odaklı yapmaktır. Gereksiz sürücü eklememen ve kernel debugging seçeneğini kapatman büyük oranda yer kazandıracaktır. Ayrıca Raspberry işlemcisi gibi düşü işlemci önbelleği olan işlemcilerde boyuta göre optimizasyon önbellek ıskalarını azaltır ve performansı arttırır.
Cevabınız için çok teşekkür ederim. Yüksek performans için sade bir şeyler yapacağım. Dediklerinizi yapmaya çalışacağım. Anneniz için de üzüldün, çok geçmiş olsun.
 

Yeni konular

Geri
Yukarı