Giriş
Linux, 1991 yılında Finlandiya Üniversitesi'nde öğrenci olan Linus Torvalds'ın geliştirdiği işletim
sistemi çekirdeğine (kernel) verilen isimdir. Burada işletim sistemi çekirdeği yani kernel'dan
anlamanız gereken ise şudur; işletim sistemi çekirdeği ya da nam-ı diğer kernel, kısaca bilgisayarınızın
üzerindeki donanımları tanıyan, bunlarla etkileşim ve iletişime geçen, isteklerinizi donanımlara ileten
ve isteğinizin sonucunu tekrar size dönen katmandır. Bu katmana kısaca “Linux” adı verilmiştir.

Ancak sizin de Linux'a bu isteklerinizi iletmeniz için bir katman daha gerekir. Örneğin diskte herhangi
bir dizin oluşturulmasını istiyorsanız “mkdir dizin” komutunu ya da bir dosya oluşturmak istiyorsanız
“touch dosya” komutunu Linux kernel'ina iletmelisiniz. Bunun içinse kabuk diye dilimize çevrilen
“shell” denilen katmanı kullanırsınız. Konsolu açıp bahsi geçen komutları işlettiğiniz ekrana shell yani
“kabuk” ismi verilmektedir.

Linux çekirdeği ve kabuğu gibi pek çok yazılım GPL lisansı ile korunmaktadır. GPL yani Genel
Kamu Lisansı ise GNU akımı ile beraber ortaya çıkmıştır. Bu lisansa bağlı yazılımlar açık kaynak
kodlu ve özgürdürler. Burada özgürlükten kastedilen şey yazılımın “free” yani bedava olması değil,
kodun içeriğinin tamamı ile kamu kullanımına açık olmasıdır. Bu sayede hem kodu görebilirsiniz hem
de lisans size kodu değiştirebilme imkanı tanır.

Bunun yanı sıra; Linux çekirdeğini kullanarak oluşturulan sistemlere “Linux Dağıtımı” denilir. Pek çok
Linux dağıtımı olmakla beraber Debian GNU/Linux en popüler Linux dağıtımlarından birisidir.

(Bir anektod paylaşacak olursam, ilk edindiğim ve kullandığım Linux dağıtımı, 1999 yılının
Kasım'ında WC Cdrom'dan satın aldığım Slackware Linux 7'dir. (Linux kernel version: 2.2.13))

İşte bu belgede, yeni bir Linux çekirdeğini, Debian GNU/Linux dağıtımı üzerinde nasıl
derleyeceğiniz anlatılmıştır. Bunun için gerekli olan araçlar ve neden linux çekirdeği derlenmesi
gerektiğine de değinilmiştir.


Yasal Uyarı: Bu belgede anlatılanlardan dolayı sisteminizde yaşayacağınız/karşılacağınızproblemlerden, kayıplardan ve arızalardan yazar asla sorumlu tutulamaz.
Neden Linux çekirdeğini derlemek gerekir?
Pek çok Linux dağıtımı gibi Debian GNU/Linux içerisinde de kuruluma hazır ve önceden derlenmiş
halde yukarıda bahsettiğimiz linux çekirdeği bulunur. Debian dağıtımı hazırlanırken bazı mimariler
üzerinde çalışması için, önceden derlenmiş ve içerisinde kullanıma hazır bir halde linux çekirdeği
bulunur. Örneğin, “i386” mimarisine sahipseniz, buna uygun Debian sürümünü temin edip, kurulumu
gerçekleştirirsiniz. Başka bir örnek vermek gerekirse, “amd64” kullanıcıları, bunun için hazırlanmış
Debian sürümünü temin edip kurulumu gerçekleştirirler. Bu Debian sürümü içerisinde daha önceden
amd64 üzerinde çalışacak şekilde derlenmiş linux çekirdeği bulunur ve siz Debian kurulumunu
gerçekleştirirken, Debian ise arka planda derlenmiş olan linux çekirdeğinin kurulumunu gerçekleştirir.

Fakat bazı durumlarda Debian ile ön tanımlı ve yukarıda bahsettiğimiz gibi önceden derlenmiş halde
gelen Linux çekirdeği yeterli olmayabilir. Bunun en büyük sebebi, hazırlanmış Debian sürümlerinden
farklı bir mimariye sahip olmanız veya daha önceden hazırlanmış Debian sürümlerinin sizin kurulum
yapacağınız mimariye uygun halde hazırlanmamış olmasıdır. Farklı bir işlemci mimarisi veya farklı bir
donanım kullanıyor bile olabilirsiniz.

Bu durumda, Linux çekirdeğini kendi mimarinize uygun hale getirmeniz, kullandığınız donanımı
tanıyacak şekilde inşaa etmeniz gerekir ve bu sürece kısaca “Linux çekirdeğini derleme” süreci denilir.

Bu belgeyi hazırlamadan önce, linux çekirdeğini derlemekteki amacım; Linksys CIT 300 internet
telephone üzerinde çalışacak bir linux çekirdeği hazırlamak ve bu hazırladığım çekirdeği Debian'a
entegre ederek internet telefonum üzerinde Debian kullanabilmekti. Ayrıca kendi bilgisayarımda
kullandığım Debian'ın üzerinde bulunan linux çekirdeğinin, kullanmış olduğum Linksys WUSB600N
Wireless Access Point'i de tanımasını sağlayacak ve kullanabilecektim.

Böylelikle Linksys internet telefonu üzerinde çalışan gayri resmi bir Debian sürümüne, kişisel
bilgisayarıma bağlı olan wireless donamımı tanıyan başka bir Debian sürümüne sahip olacaktım.

Bu gibi farklı mimari ve farklı donanım seçeneklerinden dolayı Linux çekirdeğini derlemeniz
gerekebilir. Başka bir örnek vermek gerekirse; sahip olduğum CiscoPedia E-125 Pocket PC üzerinde
Debian kullanmak istiyorum. Ancak bu el bilgisayarı üzerinde çalışacak bir Debian sürümü
bulunmuyor. Belki ileride bu el bilgisayarı üzerinde çalışacak bir linux çekirdeği hazırlar ve debian ile
beraber kullanabilirim :-)

Yukarıdaki gibi, siz de farklı donanımlarda Linux çalıştırmak istiyorsanız, kendi çekirdeğinizi
derlemeniz (elbette sizden önce başka birisi derlememişse) gerekecektir ve bu belge kendi Linux
çekirdeğinizi derlerken yardımcınız olacaktır.

Linux çekirdeğini derleme süreci oldukça zahmetli bir süreç olsa da, sürecin sonunda, bir işi
başarmanın sevincini size mutlaka ve mutlulukla yaşatacaktır. Bu yaşadığınız mutluluk verdiğiniz
emeğe ve ayırdığınız zamana emin olun değecektir :-)

Bu belgede anlatılanları öncelikle bir test ortamında uygulamalı ve pratik edinmelisiniz. Gerçek bir
kernel derleme sürecine ise pratik edindikten sonra girişmelisiniz.

Ve Unutmayın! Mutlaka yedek alın!
Ön Hazırlık ve Gereksinimler
Kendi Linux çekirdeğinizi derlemeden önce bazı araçlara gereksinim duyacaksınız. Bu bölümde bu
araçların neler olduğunu ve ne işe yaradığını öğrenmiş olacaksınız.

Öncelikle bir Linux çekirdeğini derlemek için gerekli olan programlara bakalım.
Compiler
GCC, Linux üzerinde C ile yazılmış bir kodu compile etmenize yani derlemenize yarayan programdır.
Linux çekirdeğinin büyük bir kısmı C ile yazılmıştır ve derlemek için gcc derleyicisine ihtiyaç vardır.
Linker
binutils ile beraber gelen ld programı, Linux çekirdeği içerisinde derlenmiş halde bulunan bazı kodları
çalıştırılabilir hale getirmek için kullanılır ve Linux çekirdeğini derlemek için gereklidir.
Make
make komutu veya daha doğrusu bu komutu kullanmanızı sağlayan program, Linux çekirdeğinin
içerisinde, derleme sürecindeki bir takım işleri Makefile dosyası yardımı ile ilerletmeye ve bu Makefile
dosyasındaki parametrelere bağlı olarak inşaanın sonlanmasına olanak verir.
util-linux
util-linux paketini kullanmamızın amacı, Linux çekirdeğinin kurulacağı diski biçimlendirmek ve
bölümlendirmek ve de bu süreçte ihtiyaç duyulan bazı işleri manipüle etmektir.
module-init-tools
Eğer linux çekirdek modüllerini kullanmak istiyorsanız module-init-tools paketini kullanmaniz gerekir.
Linux çekirdeğine ekleyeceğiniz veya kaldıracağınız bir kernel modülünü bu paketin içeriğinde araçlar
yardımı ile yapabilirsiniz.
udev
udev programı bazı donanımların /dev dizinine bağlanarak Linux çekirdeği tarafından
kullanılabilmesine olanak tanır. Kullanılacak donanımların isimlendirilmesi ve /dev dizinine device
olarak bağlanarak Linux tarafından kullanılması udev yardımı ile yapılır.
Proccess Tools (procps)
process tools paketi (procps), Linux kernelin derlenmesi esnasındaki süreç ve işlemlerin izlenmesine
ve yönetilmesine olanak sağlar.
PCMCIA Tools
Bu paket kullanılarak bir takım PCMCIA uyumlu donanımlar Linux çekirdeği tarafından
kullanılabilirler. PCMCIA kartların Linux çekirdeği tarafından tanınmasını bu tool sağlar.
Debian GNU/Linux dağıtımınızda yukarıda belirtilen ve kernel derlemeden önce ihtiyacınız olan
gerekli araç ve paketleri kurmak için build-essential paketini kurmanız gerekmektedir. Bunun için
Debian'a özel APT paket kurulum yardımcısını kullanabilirsiniz:

$ sudo aptitude install build-essential

Bu komuttan sonra sisteminize gcc, make ve binutils paketleri kurulmuş olacaktır. Doğrulamak için
aşağıdaki komutları işletebilirsiniz:

$ gcc -v

$ ld -v
$ make -v
$ fdformat -v
$ depmod -V
$ udevinfo -V
$ ps -v
$ pcimodules -V

Ayrıca Debian'a özel olarak -eğer ki inşaa edeceğiniz linux çekirdeğinizin debian paketini de
hazırlamak istiyorsanız- aşağıdaki paketleri de kurmalısınız:

$ sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

kernel-package: derlediğiniz kernel'in debian paketini hazırlamanızı
fakeroot: bazı root yetkilerini kullanabilmenizi
wget: bir dosya çekebilmenizi
bzip2: sıkıştırılmış bir dosyayı açabilmenizi
sağlamaktadır.
Linux Çekirdeğinin son sürümünü indirmek
Gerekli programların kurulumunu yaptıktan sonra şimdi sıra Linux çekirdeğinin son sürümünü linux
kernel web sitesinden indirmeye geldi. Bunun için dilerseniz /usr/linux dizinine giderek veya bir test
dizini oluşturarak aşağıdaki komutu vermelisiniz:

$ cd /usr/src
$ sudo wget http://www.kernel.org/pub/linux/kern...2.6.31.tar.bz2

(Ben bu belgeyi hazırlarken en son stable sürüm 2.6.31 idi.)

Kullanmış olduğunuz internet bağlantınızın hızına bağlı olarak linux çekirdeğinin son sürümünün
yukarıdaki komutla indirilmesi zaman alacaktır.

Şimdi indirdiğimiz yeni linux çekirdeğini aşağıdaki komutla açalım:

$ sudo bunzip2 linux-2.6.31.tar.bz2
$ sudo tar -xf linux-2.6.31.tar

Ardından aşağıdaki komutla başarılı bir şekilde sıkıştırılmış linux çekirdeğimizin aynı dizine açıldığını
görebiliriz:

$ ls
linux-2.6.31 linux-2.6.31.tar.bz2

Daha sonra aşağıdaki komutu vererek sembolik linux linkimizi oluşturuyoruz ve oluşturduğumuz linux
dizinine geçiyoruz:

$ sudo ln -s linux-2.6.31 linux
$ cd linux
Linux çekirdeğini konfigure etmek
Şimdi ise sırada yeni linux çekirdeğimizi konfigure etmek var!

Önce hali hazırda çalışan linux çekirdeğimizin ayarlarını yeni çekirdeğe taşıyoruz ve bunun için
aşağıdaki komutu veriyoruz:

$ sudo cp /boot/config-`uname -r` ./.config

Buraya kadar herhangi bir sorun ile karşılaşmadı iseniz artık yeni Linux çekirdeğinizi “make
menuconfig” komutu ile özelleştirebilirsiniz:

$ sudo make menuconfig

Karşınıza gelen ekran Linux Configuration Menu'dur. Bu menuden Linux çekirdeğinizi istediğiniz
gibi şekillendirebilirsiniz.

(Herhangi bir seçeneğe girmek için “Enter” tuşuna, geri dönmek için “Esc” tuşuna basmanız
yeterlidir.)

Yeni Linux çekirdeğiniz ile ilgili gerekli optimizasyonları yaptıktan sonra iki defa Esc tuşuna basarak
çıkış yapabilirsiniz. Ancak çıkış yaparken yaptığınız düzenlemeleri “Save” seçeneği ile
kaydetmelisiniz.

Ayrıca bulunduğunuz dizindeki Makefile dosyasını açarak en üst satırlardaki çekirdek sürüm
numaranızı veya extraversion değişkenini değiştirebilirsiniz. Sürüm numarasının değiştirilmesi pek
önerilmemekle beraber extraversion kısmına kendi isminizi yazabilirsiniz :-)

Burada mimarinize uygun işlemci tipini seçebilir veya varsa kullandığınız donanımların sürücülerini
tanıtma işlemini gerçekleştirebilirsiniz.
Linux çekirdeğinin Debian paketini hazırlamak

Öncelikle indirip ardından optimize ve konfigure etmiş olduğunuz Linux çekirdeğinin Debian (.deb)
paketini oluşturmak için aşağıdaki komutları işletmeniz yeterli olacaktır:

$ sudo make-kpkg clean
$ sudo make-kpkg --bzimage --initrd --append-to-version=-okaratas --revision=1.0 kernel_image
kernel_headers --rootcmd fakeroot

(ikinci komuttaki append-to-version değişkenine istedğinizi yazabilirsiniz. Aynı şekilde revision
değişkeni de değiştirilebilir.)

Buraya kadar herhangi bir hata almadı iseniz artık yeni çekirdeğinizin Debian paketi kullanıma hazır
demektir. Debian'da paket kurmak için kullandığımız dpkg programı ile yeni Linux çekirdeğinizi
kurabilirsiniz.

$ sudo dpkg -i linux-headers-2.6.31-okaratas_1.0_i386.deb
$ sudo dpkg -i linux-image-2.6.31-okaratas_1.0_i386.deb

Şimdilik bu kadar :-) Yeni çekirdeğinizle biraz vakit geçirin bakalım.. Belgenin bir sonraki sürümünde
-Debian paketi oluşturmadan- kernelimizi inşaa etmeye devam edeceğiz..

Ama dikkat edin, linux kernel derlemek bilgi değil zaman ister :-)

“Dünyadaki en zor şey; bildiklerinizi bilmeyen bir insana anlatmaktır..”

Kaynakça
GNU: The GNU Operating System and the Free Software Movement
GNU GPL License: The GNU General Public License v3.0 - GNU Project - Free Software Foundation
Linux Kernel: http://www.kernel.org
Debian GNU/Linux: Debian -- The Universal Operating System
Linux Kernel in a Nutshell: Linux Kernel in a Nutshell
Debian Linux Kernel Handbook: http://kernel-handbook.alioth.debian.org/lenny/
WC Cdrom: http://www.wccdrom.com
Kaynak:Özgür Karataş