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þ