Gnu/Slackware Linux'da Çekirdek Derlenmesi

From Lapis Wiki

Jump to: navigation, search

Konu başlıkları

Giriş

Bu dökümanda Gnu/Slackware Linux üzerinde çekirdeğin yapılandırılması ve derlenmesini anlatmaya çalışacağım.Bu döküman, Gnu/Linux ile yeni tanışmış biri için zor gelebilir.Burada yapılanları anlamanız için temel linux komutlarını bilmeniz gerekir. Yinede elimden geldiğince bazı komutları ve yaptıklarımı açıklamaya çalışacağım

Öncelikle çekirdeğin (ingilizcesi "kernel") ne olduğunu öğrenelim. Bunu öğrenmeniz ve tamamıyla anlamanız için size Gnu/Linux'un nasıl doğduğunu kısaca anlatmam gerekecek.

İlk önce Özgür yazılım hareketi başladı. Proje, Richard Stallman önderliğinde, Ocak 1984 yılında başladı. Gnu diye bir işletim sistemi yapılması öngörüldü. Bunların yapılması için işletim sisteminin araçları yazılmaya başladı. İşletim sistemi Unix'e benzeyecekti. Derleyiciler, hata ayıklayıcılar, metin düzenleyiciler, e-posta yazılımları işletim sisteminin tüm araçları yazılmaya başladı. Gnu araçları diğer unix sürümlerinde (BSD,Sun gibi.) kullanılmaya başlandı. İnternette bu programlar paylaşıma açıldı. Sıra Gnu işletim siteminin en önemli kısmı çekirdeğin yazılmasına sıra geldi. Çekirdek yazılmaya başlandığı sırada Finlandiya'da Helsinki Üniversitesi'nde öğrenci olan Linux Torvalds Gnu araçlarını kullanarak yazdığı Çekirdeği internette görücüye çıkardı. Gnu ile uğraşan insanların dikkatini çekti. İşin ayrıntısına girmeden Linus Torvalds yazdığı Çekirdek ve Gnu araçlarıyla birleşerek Gnu/Linux işletim Sistemi oluşturuldu. Günümüzde kullanılan Ticari işletim sistemlerine kafa tutar hale geldi. Gnu araçlarından kastım kısaca örnek vermem gerekirse mesala "ls" yada "su" komutu .

Çekirdek, donanımları tanır, donanımları en verimli şekilde sistemdeki uygulamaların hizmetine sunar. Sadece donanımdan ibaretten değil. Dosya sistemleri(ext2, ext3, reiserfs gibi), ağ protokolleri, vs... Bir örnek daha vermem gerekirse; xmms(mp3 çalar.) düşünün . Xmms ile MP3 çalmaya kaltığımızda hemen çekirdek (aslında xmms ilk açılışta çekirdek olmadan çalışamaz tabii:)) devreye girer. Sabit diskimizi doğrudan çekirdek kontrol eder. Bu yüzden mp3 bulmak için xmms çekirdeğe, örneğin /home/murat/mp3/bir_gün.mp3 dosyayı bana yolla der. Çekirdek xmms'e mp3 yollar. İş burda bitmez tabii. Xmms mp3 çalması için bir müzik aygıtı ihtiyaç var. Bunu da çekirdek xmms'e sunar.

Çekirdek olamazsa olmaz birşeydir. Ben çekirdeği dünyaya benzetirim. İnsanları da uygalamalara benzetirim.Dünya olmadan insanlar hayatlarını sürdüremez.

Biraz başınızı ağrıttım ama çekirdeğin ne olduğunu tam anlamıyla bilmeniz gerekiyor eğer Linux'u devamlı kullanacaksanız.

Yeni çekirdeğe neden ihtiyaç duyarız? Bunu kısaca anlatayım. Mesala herhangi bir donanımı kullandığımız linux dağıtımını tanımıyor, yeni çıkmış bir oyun güncel sürümlü bir çekirdek istiyor, elimizden geldiğince çekirdeği küçültüp çekirdeğimizi hızlandırmak istiyoruz. Bu örnekleri çoğaltmamız elbette mümkün.

Çekirdek derlemeye başlamadan önce şunları yapmanızı öneririm. En güncel GCC derleyicisini sisteminize yükleyin. C kütüphaneleri(glibc, glib2 gibi) güncel olsun. Ama bazen GCC güncel olması ufak sorunlar çıkarabilir(çekirdeğin bazı bölümleri hatalar yüzünden derlenmeyebilir). Ama bu olasılık azdır. Eski çekirdeği yeni çekirdekten emin olana kadar silmeyin. Ve yanlışlıkla sistemi çökertebilirsiniz. Önemli yedeğiniz varsa , yedekleyin !

Çekidek derlemeden önce mevcut(eski çekirdek) çekirdeğin kaynak kodlarına ihtiyacınız var. Sisteminiz de kurulu olup olmadığından emin olun. Slackware de ve birçok dağıtımda "/usr/src/" dizininde bulunur("/usr/src/linux-2.6.14.3" gibi).

Çekirdeğimizi www.kernel.org dan indirecez. Benim tavsiyem en güncel çekirdekleri kullanmak. Linux-2.6.14.3 boyutu 37.4 mb . www.kernel.org dikkatinizi çekmişse tar.bz2 ve tar.gz sıkıştırma biçimleri var. En iyi sıkıştırma tar.bz2 olduğundan bunu indirmek daha kısa zaman alacak. Ama arşivin açılma hızı tar.bz2 de daha yavaşdır doğal olarak.

Çekirdeğimizi "/home/murat/linux-2.6.14.3.tar.bz2" buraya indirdik. Çekirdeğimiz sıkışmış olduğundan açmamız gerekiyor. "/usr/src" dizini altına açacağız. "/usr/src/" dizine normal kullanıcının yazma yetkisi olmadığından süper kullancı yani root olmamız gerekir. Root olduktan sonra arşimizi bu komutla açacağız.

konsoldan,

$ su Password:

  1. cd /usr/src
  2. tar xjvf /home/murat/linux-2.6.14.3.tar.bz2

gibi açarız.

eğer indirdiğimiz çekirdek tar.gz şeklinde sıkışmış ise bu sefer "tar" komutunun anahtarında ufak bir değişiklik yapacağız.

konsoldan,

$ su
Password:
# cd /usr/src
# tar xzvf /home/murat/linux-2.6.14.3.tar.gz


arşivi açtık. Şimdi çekidek önümüzde .

konsol,

# cd /usr/src
# ls -l
toplam 12
drwxr-xr-x  18 root root 4096 2005-12-10 17:38 linux-2.6.13
drwxr-xr-x  18 root root 4096 2005-12-29 18:21 linux-2.6.14.3
drwxr-xr-x   7 root root 4096 2003-10-29 08:08 rpm
#     

Çekirdeğin bulunduğu dizine girmek için "cd" komutunu kullanacağız. "ls" komutu ise bulunduğumuz dizindeki dosyaları ve dizinleri listeler.

Konsoldan,

# cd linux-2.6.14.3/
# ls -l
toplam 376
drwxrwxrwx  26 root root  4096 2005-11-25 00:10 arch
-rw-r--r--   1 root root 30943 2005-12-28 23:51 config
-rw-rw-rw-   1 root root 18693 2005-11-25 00:10 COPYING
-rw-rw-rw-   1 root root 89223 2005-11-25 00:10 CREDITS
drwxrwxrwx   2 root root  4096 2005-12-29 18:21 crypto
drwxrwxrwx  53 root root  4096 2005-11-25 00:10 Documentation
drwxrwxrwx  53 root root  4096 2005-12-29 18:21 drivers
drwxrwxrwx  58 root root  8192 2005-12-29 18:21 fs
drwxrwxrwx  40 root root  4096 2005-12-29 18:21 include
drwxrwxrwx   2 root root  4096 2005-12-29 18:21 init
drwxrwxrwx   2 root root  4096 2005-12-29 18:21 ipc
-rw-rw-rw-   1 root root  1258 2005-11-25 00:10 Kbuild
drwxrwxrwx   4 root root  4096 2005-12-29 18:21 kernel
drwxrwxrwx   5 root root  4096 2005-12-29 18:21 lib
-rw-rw-rw-   1 root root 60997 2005-11-25 00:10 MAINTAINERS
-rw-rw-rw-   1 root root 43497 2005-12-10 16:57 Makefile
drwxrwxrwx   2 root root  4096 2005-12-29 18:21 mm
drwxrwxrwx  35 root root  4096 2005-12-29 18:21 net
-rw-rw-rw-   1 root root 14755 2005-11-25 00:10 README
-rw-rw-rw-   1 root root  3065 2005-11-25 00:10 REPORTING-BUGS
drwxrwxrwx   9 root root  4096 2005-12-29 18:21 scripts
drwxrwxrwx   4 root root  4096 2005-12-29 18:21 security
drwxrwxrwx  16 root root  4096 2005-12-29 18:21 sound
drwxrwxrwx   2 root root  4096 2005-12-29 18:21 usr
root@muratsplat:/usr/src/linux-2.6.14.3#                 


Çekirdek yazımında emeği geçenlerin listesi "CREDITS" dosyasında yer almakta.

Şimdi çekirdeği yapılandırmamız için kullandığımız donanımın ne olduğunu bilmemiz gerekiyor. Bunu öğrenmenin yolu kasayı söküp anakart ve diğer donanımlarının(ekran kartı yada ide debetleyici gibi.) üzerindeki marka ve model isimlerine bakmak. Yada "lspci" komutunu kullanmak.

resim:Slack1.jpg

Yukarıya bakarsak "lspci" komutunun baya iyi iş çıkardığını görüyoruz. Sadece "01:04.0 Network Controller: Intel Corp.:Unknow device 4220 (rev 05)" kısmı kafamızı biraz karıştırdı. Bunun nedeni ise kullandığım mevcut çekirdeğin Intelin Kablosuz Ağ kartını tanımadığı içindir. Tembellikten ve kablosuz ağ kullanmadığım için çekirdeğe yama yapmadım.

Çekirdeğin içinde README dosyasını mutlaka okuyun. İngilizce bilmeseniz bile kullanılan komutlara bakmakta yarar var.

Çekirdeğin içinde dizini içinde girelim. root kullanıcı ile ;konsoldan,

# cd /usr/src/linux-2.6.14.3/ 
# make menuconfig

Ben "make menuconfig " çekirdeği yapılandırken kullanmayı tercih ediyorum. "make xconfig", "make gconfig" de kullanabilirsiniz.

resim:Slack2.jpg

Bu araçla çekirdeğimizi yapılandıracağız. Sırayla çekirdeğin bölümlerine bakacağız.

Code maturity level options

resim:Slack3.jpg

Bu bölümde çekirdeğin henüz deneme aşamasında olan özelliklerin kullanılmasına olanak sağlamaktadır. Özellikle yeni donanımların desteklenmesi sözkonusu olduğunda bu gereklidir. Ancak, birçok durumda bu seçimi işaretlemezsiniz, yoksa sonunda sağlamlığı daha az olan bir çekirdek oluşturulmuş olunur. 1. Resim'de gri renkli olup, seçilmemiş olan 'IEEE 1394 (FireWire) support' ve 'Bluetooth support' seçenekleri gözükmektedir. Şu anki yapılandırma ile bunları seçemiyorsunuz, çünkü bunlar henüz deney aşamasındadır.

General setup

resim:Slack4.jpg

Burada çekirdek için bazı genel seçimler yapılmaktadır. Internet kullanmak isteyen herkes ağ desteğini (Networking support) seçmektedir. Linux İnternet ağırlıklı bir sistemdir ve ağ desteği olmadan düzgün çalışmamaktadır. Dahası, ağ işlemleri gibi gözükmeyen birçok işlev de ağ desteğine gereksinim duymaktadır. Ağ desteği olmazsa çekirdeğinizin derlenmeme olasılığı bile vardır. Kısacası, ağ desteğini seçerseniz iyi olur. Günümüz sistemlerin hepsinde PCI veri yolu vardır, o yüzden PCI seçeneğini de işaretlemelisiniz. PCMCIA veri yolu (PCMCIA/CardBus support) desteği gri renkli olarak boyanmıştır, çünkü siz daha öncesinden deney aşamasında bulunan özellikleri kullanmak istemediğinizi belirtmiştiniz (2. Resm'e bakınız.). Eğer, dizüstü bilgisayar kullanıyorsanız, ağ veya modem kartınızı kullanabilmek için PCMCIA/CardBus desteğini seçmeniz gerekecektir.

System V IPC desteği programların haberleşmelerinde ve aynılaştırılımasında (syncronization) kullanılmaktadır.

BSD process accounting (BSD süreç muhasebesi) sözgelimi, bir süreç sona erdiğindeki hata değerini saklamaktadır.

Sysctl support ise, çekirdek seçeneklerini, çekirdeği derlemeye ve sistemi yeniden başlatmaya gerek kalmadan, değiştirmesine olanak sunmaktadır.

Bu seçenekler genellikle seçili durumdadır. Günümüz Linux dağıtımlarında, kernel core (/proc/kcore/) format (çekirdek biçimi) 'ELF' (Bu çeşitli sistem kütüphanelerinin ve programarın starndart biçimidir.) dir. ELF artık kullanılmayan a.out biçiminin yerine kullanılmaktadır ve Windows'taki .dll dosyalarıyla benzerlik göstermektedir. Tüm modern Linux uygulamaları ELF biçimini kullanmaktadır, ancak ne yazık ki, bazı eski uygulamalar hala a.out biçimine gereksinim duymaktadır. Sözgelimi, X Pencere sisteminde çalışmakta olan 'Word Perfect 8' ve 'xwp' sadece 'a.out' biçiminde çalışmaktadır. Eğer, bu uygulamalarının sisteminizde çalışmalarını istiyorsanız, çekirdekte 'a.out' desteğini modül olarak seçmelisiniz.

Aslında kullanmamakla birlikte, ben şahsen 'MISC' desteğini de seçmekteyim. Bu genelde java, python veya DOS taklitçisi olan DOSEMU kullanıldığında işe yaramaktadır. 5. resimde gözükmeyen, ama seçmiş olduğum Güç Yönetimi desteği (Power Management support) ve Gelişmiş Güç Yönetimi BIOS desteği (Advanced Power Management BIOS support) de var. Bu iki destek, günümüz ATX anakartlarıyla gelen ve Linux'un bilgisayarı otomatik olarak kapatabilmesi için gereklidir. Diğer, güç yönetim destekleri X pencere sisteminiyle çalışmadıkları ve benim de Linux kullanırken X pencere sistemini kullandığımdan, seçili değiller. KDE ve Gnome için seçebileceğiniz kendilerine özgü güç yönetim sistemleri vardır.

Loadable module support

resim:Slack5.jpg

Modüller, çekirdekle kullanılabilen program parçacıklarıdır. Örnek olarak sürücü programları gösterilebilir. Bunlar çekirdekten ayrı olarak derlenip, çekirdeğe bağlanabilirler. Ancak, derleme işlemini çekirdeğin derlenişi sırasında yapmak en iyisidir. Her ne kadar bu program modülleri çekirdeğin parçası olmasalar da, gerek duyulduğunda çekirdek tarafından yüklenebilir ve böylece kullanımınıza sunulabilirler. Yaygın olarak önerilen, bir seçenek modül olarak da kullanılabiliniyorsa, onu modül olarak derlemektir. Böylece, hem küçük hem de daha sağlam bir çekirdek elde edilmektedir. Bizim uyarımız: Dosya sistemi desteğini hiçbir zaman modül olarak derlemeyin. Eğer, bu hataya düşüp dosya sistemi desteğini modül olarak derlerseniz, elde edeceğiniz çekirdek kendi dosya sistemini kullanamaz duruma gelecektir. Hatta çekirdek kendi yapılandırım dosyalarını bile yükleyemeyecektir ki bu bir Linux sistemini başlatmanın ön şartıdır. Benim modülleri pek kullanmadığımı ileride fark edeceksiniz. Kendi çekirdeğimin, modüller yüklemeden donanımlar ile doğrudan haberleşmesi daha hoşuma gitmektedir. Bu sonuçta benim kişisel seçimimdir.


Bu bölümde ise çekideğin modül desteği ve modül özelliklerini ve kullanımı ile ilgili seçenekler var. Modull de ne derseniz kısaca; modüller çekirdek ten ayrı ama çekirdeğe bağlı dosyalardır . Biraz kafanız karıştı sanırım. Linux ilk geliştirdiğinde modül desteği yoktu. İlerleyen zamanlarda bilgisayar teknolojisi hızlı gelişti. Yeni çekirdekler hantal olmaya başladı. Sistemin hızlı açılması için kullanılmayan yada belirli süre kullanılmayan bölümleri(sürücüler, dosya sistemleri, gibi yada çekirdeğin kullanılmaya özellikleri). Modül olarak çekirdeğe dahil edildi. Konuyu biraz daha açmakta fayda var.

Bilgisarımız ilk açıldığında başlangıç yöneticimiz(grup, lilo gibi) sabit diskimizde bulunan çekirdeği(örneğin:/boot/vmlinuz ) önbelleğe yükler ve çekirdek çalışmaya başlar. Çekirdek ne kadar küçük olursa sistemimiz o kadar hızlı açılır ve çalışır. Modüller çekirdek dosyasında yer almaz. Mesala "/boot/vmlinuz" gibi çekirdeğin içinde yer almaz . Moduller Gnu/Slackware Linux da "/lib/modules" dizini altında yer alır.

Örnek: "/lib/modules/2.6.14.3/kernel/net/packet/af_packet.ko"

Modüller ihtiyaç duyduğunda çekirdek tarafından yada kullancı tarafından sisteme yüklenir. "Automatic kernel module loadin" seçeneği modüllerin gerektiğinde çekirdek tarafından yüklenmesi için çekirdek desteği. Bunu seçmenizi şiddetle tavsiye ederim !

"Module unloading" seçeneği ise belirli zaman için kullanılmayan modüller sistemden önbellekten siler. Yani kullanılmaz hala gelir. Modülün boş yere sistem kaynaklarını kullanmasını engellenir. Diğerler seçenekler ise kısaca "Forced module unloading" ne işe yaradığını tam olarak bilmiyorum :D "Source checksum for all modules " modulleri kontrol(bütünlük kontrolü) eder. güvenlik için mutlaka gerekli. Ama konu hız ise bence eklemeye değmez. "Module versioning support" ne olduğu bilmiyorum. Uçuk bişe olduğu kesin.

Processor type and features

resim:Slack6.jpg

(Önemli not:Yukarda dikkat etmişseniz her hangi bir seçeneği seçtiğinizde ya "*" şekli çıkıyor yada "M" . Bir seçenek "*" ise bu çekirdeğe gömülü olacak. Eğer seçilen seçenek "M" ise modul olarak eklenecek. Eğer hız istiyorsanız modul olarak ekleyin . Eğer güvenlik istiyorsanız çekirdeğe ekleyin.)

İşlemci yapılandırması olduğu çok açık. Kullandığınız işlemci seçmelisiniz. Kullandığınız işlemci özeliklerine bakalım. Kullancağımız komut "cat", dosyaların içine bakılır bu komutla.

konsoldan,

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 9
model name      : Intel(R) Celeron(R) M processor         1500MHz
stepping        : 5
cpu MHz         : 1500.316
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe
bogomips        : 3003.80
# 

Birden fazla işlemci desteğini kullanmayacaksanız kapatabilirsiniz. Bir çok seçenek var. Bunların hepsini açıklaman mümkün değil. Bu arada X de hız istiyorsanız "Math emulation" seçeneğini iptal edin. Bilmediğiniz seçenekleri kurcalamayın.

Power management options (ACPI, APM)

resim:Slack7.jpg

Güç seçenekleri yapılandırın. Eğer kullandığınız makine server ise sık sık kapanmıyorsa ve bazı donanımların uyumasını istemiyorsanız "APM" desteği eklemenize gerek yok. Dizüstü kullanıyorsanız mutlaka Apm. Acpi seçeneyinide isterseniz eklemiyebilirsiniz server ler için Acpi eklemesseniz bilgisayarınızı elle kapatırsınız. Sonra söylemedi demeyin. Acpi modül şeklinde ekleğin. Dizüstü bilgisayar kullanıyorsanız mutlaka pil vs. gibi sürücüleri ekleyin. Modül olarak ekleyin. Unutmadan acpi seçeneyi altında "Thermal Zone" özelliğini eklemeyi unutmayın. Bu seçenek işlemci ısısını gösteren bir sürücü. Bazı anakartlarda çalışmayabilir. Hemen bir örnek veriyim. Konsoldan,

# cat /proc/acpi/thermal_zone/THRM/temperature
temperature:             49 C
#          

"CPU Frequency scaling" de ise işlemci güç tüketimi , işlemci hız limitleme gibi bazı özellikler var . Bunlar Dizüstü bilgisayar ve bazı Elektrik tasarufu yapan işlemciler için. Bir bakın , size göre birşeyler olabilir. Eklerken modul olarak eklemeya çalışın. Sadece hız hız diyorsanız bunların hiçbirini eklemeyin.

Bus options (PCI, PCMCIA, EISA, MCA, ISA)

resim:Slack8.jpg

Kullanmadığınız dananım arabirimleri kaldırın. Mesala ISA desteği. ISA eski bilgisayarlarda kullanır. ISA arabirimli ses kartı gibi. Dizüstü bilgisayar için PCMCIA/Carbus. Mümkünse modül şeklinde ekleyin ; hız istiyorsanız.

Executable file formats

resim:Slack9.jpg

Bu bölümün ne olduğunu tam olarak bilmiyorum. Bu yüzden burayı kurcalamıyorum.

Networking

resim:Slack10.jpg

Eğer, ağ elemanlarıyla çekirdekte ağ protokolü oluşturmadan haberleşmek isterseniz, 'Packet Socket' seçeneğini seçmeniz gerekir. Kısacası, bunu herzaman seçmenizde yarar vardır. Diğer seçeneklerin çoğu seçilmemiş durumda. Onlar daha çok özel durumlarda kullanılmaktadır. SuSE ile birlikte gelen ateş duvarını (firewall) kullandığımdan dolayı 'Ağ paket süzmelemesi (ipchains'i değiştirmektedir)' (Network packet filtering (replaces ipchains)) seçeneğini seçtim. Ateş duvarı düzgün bir şekilde yapılandırıldığında, dışarıdan, sözgelimi İnternet'ten gelen saldırılara karşı sizi korumaktadır. Çekirdek seviyesinde çalışmakta olan ateş duvarının birçok yararı vardır. Ağ yapılandırılmasında geriye kalan seçenekler 12. resim ile birlikte anlatılmaktadır. Ağ bağlantıları kurabilmek için 'Unix domain sockets' seçeneğini işaretlemeniz gerekir. Bu ayrıca, X pencere sistemini kullanmak istediğinizde gerekli olan bir seçenektir. X pencere sistemi UNIX socket'lerini otomatik olarak kullandığından, X pencere sistemini kullanabilmek için bunu seçmeniz şart. TCP/IP ağları ('TCP/IP networking') hem İnternet hem de iç ağlar için gerekli protokolleri içerdiğinden, TCP/IP'yi seçmelisiniz. Belli bir seçeneği seçip seçmemekte ikilem içerisine düşerseniz, yardım metinlerine başvurmanızda yarar vardır. Buna karşın hala kararsız kalırsanız, o desteği vermekte bir sakınca görülmemektedir. İsterseniz, deneme için daha sonraları bu seçeneği iptal edebilirsiniz. Bazı seçenekleri modül olarak derlemeniz de iyi bir düşünce olabilir.

Bu bölüm çekirdekte ki ağ desteği ve bazı ağ protokolleri bulunuyor. Bunlar sürücü değil ! Kullanmadığınız destekleri kaldırın. Burda ki seçenekleri hız için modül olarak ekleğin. Eğer "ağla işim olmaz" diyorsanız, "bunların hepsini kaldırıyım "diyorsanız orda biraz durun ve düşünün. Çünkü Linux daki çoğu uygulama (en ünlüsü Xorg.) Ağ kullanır. Ağ kartınızı değil sadece ağı kullanır. Bazı protokolleri. Packet socket, Unix domain sockets , TCP/IP networking mutlaka ekleyin. Modül olarak. Bakın, çekirdek derlerken insan neler öreniyor :)

Device Drivers

resim:Slack11.jpg

İşte bütün donanım sürücüleri burda . Kılavye , mouse , seskartı ,ağ kartları ,chipset ,ekran kartı,USB........ Bunların ayrıntısına girmeyecem. Ayrıntısına girersem basit bir döküman yerine bir kitap yazmış olurum :D Çok ayrıntılı !

Bilmeniz gereken. Burda ki sürücüleri modul olarak eklemeğe çalışın. Bazı sücüler hariç. IDE denetleyicileri yani sabit disk denetleyiciler. Sata yada SCSI. Çekirdek hangi tip diskte bulunuyorsa sürücüyü çekirdeğe ekleğin.Atıyorum iki tip diskiniz var biri IDE biri ise SATA . Eğer kernel SATA disk de ise SATA sürücülerini çekirdeğe eklemlisimiz. Modul olarak değil. Bir düşünün çekirdek sabit diskimize ulaşamıyor. Bunda şaşılacak birşey yok. Modul olarak eklenen sürücü sabit diskimiz de çekirdek diske ulaşamassa nasıl diskteki modüleri okur? Okuyamaz ve ünlü "Kernel Panic" hatasını verir. Sistem çakılır.

File systems

resim:Slack12.jpg

Burada Linux'un hangi dosya sistemlerini okuyabilmesi gerektiğini seçmeniz gerekir. Belki de çekirdeğinizin Windows işletim sistemi disklerini veya disket sürücülerinin okuyabilmesini isteyebilirsiniz. Ancak, Linux'un kendi dosya sistemleri olan ext2 veya daha yeni olan ReiserFS'i okuyabilmesini sağlamanız şarttır. Eğer, bu desteği vermezseniz, Linux açılış diskini okuyamayacağı için sistemi başlatamayacaktır bile. Sisteminizin DOS/Windows disk ve disket sürücülerini okuyabilmesini sağlayabilmeniz için, DOS FAT desteğini (DOS FAT support), ancak Windows NT/Windows 2000 disklerini sadece okuma kipi için menüde yer alan başka bir seçeneği daha seçmeniz gerekir. DOS/Windows disk ve disket sürücülerini hem okumak hem de yazmak amaçlı olarak, MSDOS desteğini (MSDOS fs support) seçmeniz gerekir. Aslında hemen hemen herkesin bunlara gereksinimi vardır. O yüzden herkes bunları seçecektir. VFAT, Windows 95 veya 98 altında uzun dosya isimleri desteğidir Benim sistemim hem Linux hem de Windows 98 sistemlerine sahiptir. İkili açılış sistemi (dual boot system) olarak adlandırılan bu sistemde Linux'un lilo adlı sistem yükleme yöneticisini (lilo'nun yapılandırılması bölümüne bakınız.) kullanıyorum. Dolayısyla ben VFAT desteğini seçmiş durumdayım. CD'leri standart biçimi olan ISO 9660 biçimde okuyabilmek için desteğini seçmeniz gerekir. ISO 9660 standardındaki MS-DOS'un 8.3'ten daha uzun dosya isimlerini tanıyabilmek için, aşağıdaki Joilet eklemelerini (Joliet extensions) de seçmeniz gerekir. Herkes günümüz CD'lerini okumak isteyeceğinden, bu destekler genelde seçili durumdadır.



Dosya sistemleri bu bölümde. Kullandığımız dosya sistemleri ve bazı özellikleri ekleyecez. Bu bölüm çok önemli. Burda da yapacağınız bir hata yüzünden yeni çekirdeğiniz açılmayabilir. Çekirdeğinizin bulunduğu bölümün dosya sistemi ext3 ise çekirdeğe hem "Reiserfs support" hem de "Ext3 journalling file system support" çekirdeğe eklemelisiniz. Modul şeklinde eklerseniz "kernel panic" hatası alırsınız. Bilgisayarınız açılmaz. Eğer çekirdek reiserfs dosya sistemi bölümünde ise daha doğrusu linux kurulduğu bölüm , bu sefer sadece "Reiserfs support" eklemeniz yeterli. Tuhaf dimi :) Bunu öğrenmek için ard arda 3-4 kez çekirdek yapılandırmak ve derlemek zorunda kalmıştım.

Bilmeniz gereken bir şey daha var. "VFAT" yada "NTFS" dosya sisteminiz varsa ve bunun için modul eklediniz hemen. Buraya kadar her şey normal. Ama sadece VFAT yada NTFS eklemiz yeterli olmayacak bu bölümleri okumak için . "Partition Types" seçeneği altında "Advanced partition selection" , "PC BIOS (MSDOS partition tables) support" ve "Windows Logical Disk Manager (Dynamic Disk) support " çekirdeğe eklemek zorundasınız. Vfat ve Ntfs için varsayılan dil ayarını türkçe yapmayı unutmayın. Aşağıda ki gibi yapabilirsiniz. Modul olarak ekleğin hız için.

resim:Slack13.jpg

Bunlarda dosya sistemleri için varsayılan dil ve dil destekleri.

resim:Slack14.jpg

Türkçe için iso8859-9. Türkçe nls desteğini mutlaka ekleğin. Modül olarak.

Son olarak burda dosya sistemleri için eksta güvenlik için seçenekler var. Bunları kullanmakta fayda var. Unutmadan bilmediğiniz seçenekleri kurcalamayın.

Profiling support

resim:Slack15.jpg

Bu bölümün ne işe yaradığı bilmiyorum .Ama hayati bişe olmadığını biliyorum . İsyerseniz tamamiyle kaldırın. Ben kullanmıyorum. Bir sorunda çıkmadı.

Kernel Hacking

resim:Slack16.jpg

Bu seçenek, programcıların çekirdeğin çökmesinde hangi kullanıcının parmağı olduğunu bulmak veya disk ön belleğini okumak gibi, sıradan kullanıcı için tamamen gereksizdir. Fakat sistem kilitlendiginde bazi tus kombinasyonlari sayesinde hicbir hata olusturmadan sistemi reboot ettirebilirsiniz. Secip secmemek bence tamamen sizede bagli olarak degisebilir.

Security options

resim:Slack17.jpg

Güvenlik seçenekleri . İsteye bağlı. Hız istiyorsanız bunlarıda iptal edin.

Cryptographic options

resim:Slack18.jpg

Bu bölümün ne olduğunu bilmiyorum. Kurcalamadan burdan çıkıyorum.

Library routines

resim:Slack19.jpg

Bu bölümünde ne olduğunu bilmiyorum. Kurcalamadan çıkıyorum.

Save Configuration to an Alternate File

resim:Slack20.jpg

Tahmin ettiğiniz gibi yaptığımız ayarları kaydediyoruz ve çıkıyoruz. Benden söylemesi "/boot" dizinini yedeğini alın. Burdaki dosyalar zarar görerse bilgisayarınız açılmaz ! Şimdi çekirdeği derleyecez. Yani kodlar Makine diline çevirilecek.

Çekirdeğin derlenmesi

Şimdi Makefile dosyasında ufak bir değişiklik yapacam.

Konsoldan,

# cd /usr/src/linux-2.6.14.3/
# ls
arch     CREDITS        drivers  init    kernel       Makefile  README          security  yedek
config   crypto         fs       ipc     lib          mm        REPORTING-BUGS  sound
COPYING  Documentation  include  Kbuild  MAINTAINERS  net       scripts         usr
# pwd
/usr/src/linux-2.6.14.3
# mcedit Makefile


Makefile dosyasında çekirdeğin varsayılan yüklenecek dizin olan "/boot" değiştirecem. Ben mcedit programı ise dosyayı düzenleyecem(Siz tabiki isteğiniz metin(text) düzenleyici kullanabilirsiniz). Bunun nedeni ise eski çekirdeğin üzerine yazılmasını engellemek. Yazılsa bile eski çekirdeğe bişe olmaz çünkü yedekleniyor. 4 defa dosya ismi değiştirmek zorunda kalacam. Bu yüzden varsayılan değeri "/" şeklinde yapacam. Eğer yeni çekirdek sorunsuz çalışırsa "mv /vmlinuz /boot/vmlinuz-2.6.14.3 gibi" ismini değiştiriip taşıyacam. Neden ismini değişreceğimi ileride anlatacam merak etmeyin.

resim:Slack21.jpg

satırı buluyorum ve ,

resim:Slack22.jpg

"export ISTALL_PATH ?= /boot" değişkenini değişriyorum. Artık çekirdeğimizi derleyebiliriz.

# make

ile çekirdek derlenmeye başlar. Bu biraz zaman alır. işlemcinize göre 5 ile 45 dakika arasında bir zaman alabilir. Derleme bittiğinda artık sıra çekirdeğin ve modullerin sisteme yüklenmesi gelir.

# make install       

"make install" komutu çekirdeği sistemize yükler.

# make modules_install

Bu komutla da moduller sisteme yüklenir.

Ben sistemdeki modullerin listesine bazen ihtiyaç duruyorum. Listeyi elde etmek için;

# make modules_install > /root/modul_listesi.txt

Artık elimde bir liste, ilerde benim baya işime yarıyor.

En son aşamaya geldik. Lilo'ya çekirdeğin yerini göstermek için şunları yapalım.

Çekirdeğimiz eğer Makefile dosyasında gösterdiğim gibi düzenlenmişse dosyaları burda "/vmlinuz" ve "/System.map" da .

Makefile düzenlememişsek ise şurdalar "/boot/vmlinuz" ve "/boot/System.map". Eski çekirdek dosyaları ise "/boot/vmlinuz.old" diğeri de "/boot/System.old" şeklinde yedeklenmişse bunşarı eski heline geri getirmelisiniz. Önce yeni çekirdek dosyalarının isimlerini değiştirin. "mv /boot/vmlinuz /boot/vmlinuz-2.6.14.3" gibi değiştirin. Sonuna eklediğimde tahmin ettiniz gibi çekirdek sürüm numarası. System.map da değiştirmeyi unutmayın. "mv /boot/System.map /boot/Sytem.map-2.6.14.3" komutu ile değiştiriz. Şimdide eski çekirdeği eski haline getirelim. "mv /boot/vmlinuz.old /boot/vmlinuz" , "mv /boot/System.old /boot/System.map" gibi. Bakın Makefile düzenlemedik başımıza neler geldi.

Lilo'nun yapılandırılması

Yeni çekirdeği liloya şu şekilde tanıtacaz:

image = /vmlinuz         #çekirdeğin bulunduğu yer.
root = /dev/hda3           #çekirdeğin bulunduğu aygıt.
label = Linux-2.6.14.3          #Lilo menüsündeki ekledğimiz yeni çekirdeği gösteren isim.
read-only                # Bunun tam olarak ne işe bilmiyorum. (sadece oku anlamına geliyor terkçesi).

Bunları /etc/lilo.conf dosyasına ekleyecez. En sonuna ekleyecez. Sonra konsoldan lilo komutunu veriyoruz:

# lilo
Added Windows
Added Linux
Added Linux-2.6.13
Added Linux-2.6.12.2
Added Linux-2.6.14.3 *
# 

Bu şekilde yapılan lilo ayarlarını diskimizin boot bölümünün ilk 512k lık olan MBR(Master Boot Record) yazılıyor.

Artık yeni çekirdeği denemek için bilgisayarımızı yeniden başlatabilirsiniz. Açılış sırasında eklediğimiz çekirdeği seçip çalışıp çalışmadığına bakın.

Çekirdeğiniz bir hata yüzünden çalışmıyorsa eski çekirdek le siteminizi tekrar açın. Ve tekrar yapılandırın ve anlattığım gibi yapıp olana tekrar tekrar deneyin. Çekirdek derlemek ve sorunsuzca çalıştırmak için bolca bilgi ve sabıra ihtiyaç vardır.

Çekirdeği tekrar yapılandırmak için /usr/src/linux-2.6.14.3 dizini silmek ve yeniden buraya kopyalamak yerine şunu yapın.

# cd /usr/src/linux-2.6.14.3/
# make mrproper

Bu şekilde derlenmiş çekirdek ve ayarlar silinir. Tekrar yapılandırmaya başlayabilirsiniz. Makefile dosyanız eski haline gelmez. Bu yüzden bir daha düzenlemeğe gerek yok.


Yeni çekirdeğimiz sorunsuz çalıştığını varsalım. İlk önce yapacağınız şey çekirdek yapılandırma ayarlarınızı bir yere yedekleyin. İlerden birdaha yapılandırmayla zaman keybetmeyin. Bu şekilde tüm ayarları kaydedin:

# cp .config /win_d/yedek/linux/confdosyalari/.config

En son olarak "/vmlinuz" ve "/System.map" dosylarını "/boot dizinine taşıyın. Bunlar önemli dosyalar yanlışlıkla silinmesini istemeyiz. Dosyaları taşırken isimlerini değiştirin. Değiştirmemizim nedeni eski dosyaların üzerine yazılmaması için;

# mv /vmlinuz /boot/vmlinuz-2.6.14.3
# mv  /System.map /boot/System.map-3.6.14.3 

şeklinde taşıyın. Dosyaların yeri değiştirdiğimiz için tekrar lilo yu ayarlayın.


Hazırlayan: MURATSPLAT