Linux Kernel Derleme Prensipleri
Kernel derlemesi yapılmasının temel amacı sizin ihtiyacınız olmayan donanım desteğini ve yazılım desteğinin kaldırmanızı sağlamak ya da ihtiyacınız olan yazılım ve donanım araçlarını eklemenizi sağlamak içindir. Bu makale kapsamında Linux’un tarihinden bahsedilecek ardından kernel yapısı kısaca açıklanacak ve derleme işleminin nasıl yapılacağı anlatılacaktır. Tarihsel gelişmelerden bahsedecek olursak 1945’li yıllarda ilk bilgisayar olan ENIAC üretilmiştir. ENIAC’ın üretilmesi ile birlikte birçok yeni bilgisayar ve yazılımlar üretilmeye başlanmıştır.1970’li yıllarda üretilen bu yazılımlardan biri de Unix’tir. Unix başlangıçta ücretsizdir fakat zamanla lisanslanmış ve ücretli olmuştur. Bu sebepten dolayı kullanıcılar buna tepki olarak kendi işletim sistemleri yazmaya başladılar. 1983 yılında Richard Stallman tarafından GNU is Not Unix projesi geliştirilmiştir. Bu proje oluşturulduğunda içinde çekirdek(kernel) yapısı yetersiz kalmıştır bu yüzden 1990’li yıllarda Linus Torvalds tarafından kerneli yazılmış ve GNU projesi GNU/Linux adını almıştır. Bu gelişmeler sonucunda ilk Linux sürümü 1991 yılında piyasaya sürülmüştür. Günümüze kadar gelmiş olan bu işletim sistemi hala kullanılmakta ve en çok tercih edilenler arasında yer almaktadır.
Linux işletim sisteminin internete bağlanması için TCP/IP desteği bulunmaktadır, bunun yanında NetBEUI (Netbios Extended user interface), Samba (Windows makinelerinin birbiriyle konuşmak için kullandıkları protokol) ve Appletalk (Macintosh makinelerinin birbiriyle konuşmak için kullandıkları protokol) gibi protokoller de desteklenmektedir.
Bu protokoller sayesinde Dünya üzerinde aynı anda binlerce kullanıcının bağlandığı, Internet erişiminde bulunduğu, web sayfalarını taradığı, grafik ekranında çalıştığı ve program derlediği makineler vardır.
Sürüm numarası 2.0 ile başlayan Linux çekirdekleri birden çok işlemciyi destekleyebilmektedir.
Linux açık kaynak kodlu olduğu için, birçok farklı grup tarafından alınıp geliştirilmiştir. Bu yüzden Linux işletim sisteminin birçok dağıtımı bulunmaktadır. Bunlardan en bilinenleri; Ubuntu, Fedora, Pardus, OpenSUSE, Redhat, Slackware. Linux tarihçesi protokolleri ve işletim sistemi hakkında genel bilgiler bu kısımda verilmiştir.
Bu makale kapsamında ikinci bölümde Linux’un Kernel Modül yapısından bahsedilecek, üçüncü bölümde ise derleme işleminin nasıl yapılacağı anlatılacaktır.
II. KERNEL MODÜL YAPISI
Bu bölümde Öncelikle Linux çekirdeğinden bahsedilecek ardından Kernel Modülüne geçilecektir.
Linux çekirdeğinin ilk olarak L. Torvalds tarafından geliştirildiğinden bir önceki bölümde bahsetmiştik. Daha sonra açık kaynak kodlu olan bu işletim sistemine geliştiriciler ve kullanıcılar özgün yazılım projelerinden uyarladıkları kodlar ile katkıda bulunarak gelişimini sağlamışlardır.
Bir Linux işletim sisteminde diğer tüm parçalar kernel çevresinde yapılanır, bir arayüz ile bilgisayarının donanımı ve programların çalışılması bunun üzerinde sağlanır. Linux kernelleri sürekli gelişim aşamasındadır, düzeltme ve sürümler düzenli olarak yayınlanır.
GNU/Linux işletim sistemi ile çalışan bir bilgisayarda Linux çekirdeği sürümünü öğrenmek isterseniz komut satırına uname –r yazarak bu işlemi gerçekleştirebilirsiniz.
Modül yapısından bahsedecek olursak, modüller C programlama dili ile geliştirilen yazılımlardır. Sıradan bir programa benzerler bu programı Linux’un çekirdeğine ekleyerek kullanabiliriz. Kernel modüllerine ait dosya ve dizinleri /lib/modules konumunda bulunurlar ve sistem açıkken yüklenirler.
Kernel’e farklı fonksiyonlar eklemek için modüller yazılabilir. Bu modüllerde sistemi kapatmadan çekirdeğe eklenebilir.
III. KERNEL DERLEME İŞLEMİ
Öncelikle sanal makina programı olan Virtualbox veya Vmware yardımı ile Debian işletim sisteminin sanal makine üzerinde kurulumu gerçekleştirilir. Web tarayıcısı ile kernel.org sitesine girilerek kernel’in son sürümü olan 4.14.4-ls sürümü Debian işletim sistemine indirilir. Bu işlem adımı Şekil 2’de gösterilmiştir.
“wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.4.tar.xz”
İndirilen Linux-4.14.4.tar. xz işlem yapabilmek için öncelikle uç birim yani terminal açılır. Öncelikle yönetici girişi yapılır. Bu işlem için “sudo su” komutu işlenir ve kurulum sırasında belirlenen şifre girilir.
Kopyalama tamamlandıktan sonra, indirilen kernel sürümünün dosyasını çıkarabilmek için öncelikle cd/usr/src ve ardından “tar –xf linux-4.14.4.tar.xz” komutunu kullanarak işleme başlarız. Bu işlem ile dosya çıkartıldıktan sonra cd linux-4.14.4 komutunu çalıştırarak o dizine giriş yapılır.
Öncelikle önceden yapılandırılmış eski ayarları silmek için “make mrproper” komutu çalıştırılır. Temizleme işlemi tamamlandığı zaman yapılandırma ayarının yapılabileceği menü açılır. Bu menüden sisteminiz için gerekli olan modülleri seçebilir, ekleyebilir ya da çıkarabilirsiniz. Ayar penceresine ulaşmak için “make menuconfig” komutunu çalıştırarak gerekli ayarlamalar yapılabilir.
Değişiklikler kaydedilir. Çekirdek imajını derleme işlemi için öncelikle “make bzlmage” komutu çalıştırılır. Bu bzimage yi oluşturmak bilgisayarınızın hızına göre 25-30 dakikayı bulabilir.
Bu komut işlemi bittikten sonra modül derleme işlemi gerçekleştirilir. “make modules” komutu çalıştırılarak derleme işlemi tamamlanır. Bu işlem derlemenin en uzun süren kısmıdır ki, ortalama 2-3 saat arasında sürebilir. Modüller derlendikten sonra sisteme yüklenmesi gerekir. Bu işlem için “make modules_install” komutu kullanılır.
Kök dosya sisteminin bağlanabilmesi için çekirdek modüllerinin yüklenmesi gerekir. Bunun için gerekli olan kod olan “mkinitramfs 4.14.4 -o /boot/initrd.img-4.14.4-generic” çalıştırılır.
Daha sonra “cp /usr/src/linux4.14.4/arch/x86_64 /boot/bzImage/boot/vmlinuz-4.14.4-generic” komut dizini ile çekirdek imajı /boot dizinine kopyalanır.
System.map’i /boot dizinine kopyalamamız gerekir. Bu işlem için kullanacağımız komut “cp System.map /boot/System.map – KERNEL_VERSION” olacaktır. Oluşturulan map dosyasının system.map ile bağlantılı olmasını sağlamak için “ln -s /boot/System.map-KERNEL_VERSION /boot/ System. map” komutu kullanılır.
Bu işlemler sonucunda çekirdeği derleme işlemimiz gerçekleşmiş oldu. Fakat derlediğimiz çekirdeği kullanabilmemiz için yapılması gereken birkaç işlem adımı bulunmaktadır.
Öncelikle “sudo chmod +w /boot/grub/grub.cfg” komutu ile yazma izni alınır. Daha sonra grup.cfg dosya ayarlarında değişiklik yapmak için “sudo nano /boot/grub/grub.cfg” komutu çalıştırılır.
Açılan pencerede değişiklik yapılacak satır olan “### BEGIN /etc/grub.d/10_linux ###” satırı bulunur. Yapılan eklemeler Şekil 3 ‘de açıkça görülmektedir.
Düzenleme yapılacak alanlardan diğeri UUID kısmıdır. Bu sebepten yeni bir terminal açılır ve “sudo blkid” komutu çalıştırılır. “grub.cfg” dosyasının güncellenmesi gerekmektedir. Debian işletim sisteminin kurulu olduğu alan olan “ext4” tipindeki “dev/sda” kısmında eğer “sda” yazıyor ise hd0 “sdb” hd1 yapılması gerekir. Ardından UUID değerini alarak grub kısmındaki ID değerlerine yazılır. Son işlem olarak Grub ayarları derlenmelidir. Bu işlem için “sudo update-grub” komutu çalıştırılır. İşlem tamamlandığında “reboot” komutu ile sistem resetlenir. Açılış ekranına gelindiğinde kernel sürümünde 4.14.4 olan debian çekirdeği seçilerek sistem açılır. Kernel çekirdeğinin derlenme işlemi tamamlanmıştır. Dilerseniz “uname –a“ kodunu çalıştırarak bunu görebilirsiniz. Bu makale kapsamında Linux’un tarihçesinden, gelişiminden çekirdek yapısından bahsedilmiştir. Son olarak kernel derleme işlemi genel adımlarıyla anlatılmıştır. Bu makale sayesinde ihtiyacınız olan Linux kernel derleme işleminizi gerçekleştirebilirsiniz.
Kaynaklar
- http://www.thegeekstuff.com/2013/06/compile-linux-kernel/
- https://kernelnewbies.org/KernelBuild
- https://unix.stackexchange.com/questions/198003/set-default-kernel-in-grub
- http://kod5.org/linux-cekirdegi-kerneli-nasil-derlenir/
Mert Kuzer, Ar-Ge Mühendisi Aktif Mühendislik