Pazartesi, Kasım 28, 2005

Cuma günü tüm gün çekirdekle uğraştım

Cuma günü tüm gün IBM makinamın sorunu ile uğraştım. Google'da ararken bulduğum bir link beni baya heyecanlandırdı. Sorunla ilgili olarak, bu sorunu çözdüğünü söyleyenler vardı. Bu linkte: http://bugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=284477
Neyse, sitede de yazdığı gibi çekirdeği yeniden derlemek gerekiyormuş. Bu da bana ilk kez debian'da çekirdek derleme sorunu çıkardı. Gerçekten problemli iştir çekirdek derlemek. Bir sürü sorun çıkar çoğu zaman. Ama Debian'da onun da kolay olduğunu öğrendim. Gerçekten şaşırdım. Şimdi nasıl yaptığıma geçeyim;
Önce çekirdek kaynağını indirmek gerekiyor. Ben de sitede yazdığı gibi 2.6.8 çekirdeği kullanmaya karar verdiğim için 2.6.8 çekirdeğin paketlerini aradım;
#apt-cache search kernel-source

Bu sayede indirebileceğim kernel-source paketlerinin listesi çıktı karşıma tabi ki tam isimleri de. Listeden gözüme kestirdiğim; kernel-source-2.6.8 dosyasını da indirdim tabi ki hemen;
#apt-get install kernel-source-2.6.8

kernel-source paketi otomatik olarak, /usr/src altına kernel-source-2.6.8.tar.bz2 adında bir dosya indiriyor. Bu paketi de açtım;
#tar -jxvf kernel-source-2.6.8.tar.bz2

Bu sayede kernel-source-2.6.8 adında bir klasörüm oluştu. İşte çekirdek kodlarım. :)
Ayrıca, çekirdek kodlarımın sistemde olmasını istediği bazı paketler daha varmış; onları da apt-get ile kurdum hızlıca;
#apt-get install libncurses5-dev libdb3-dev libqt3-mt-dev tk8.4-dev xspecs
#apt-get install initrd-tools module-init-tools

Sonra bir sembolik link oluşturdum linux adında, az önceki kernel-source-2.6.8 klasörü yerine.
bunun için /usr/src altında;
#ln -s kernel-source-2.6.8 linux

Bu sayede artık #cd linux dediğimizde aslında kernel-source-2.6.8 klasörüne girebileceğim.
Şimdi asıl önemli kısma geldim; Sayfada gördüğüm ayarları çekirdeğe nasıl uygulayacağım. Ben her zamanki gibi make menuconfig altında görebileceğim sanmıştım ama orada göremedim bu şekilde ayarlar. Eyvah nerede yanlış yapıyorum derken olayı çözdüm; config dosyasını düzenlemem gerekiyormuş listedeki gibi.

#cp /boot/config-2.6.8-1-386 .config

ile /usr/src/linux altına benim kullandığım config dosyasını .config adıyla kopyaladım. Daha sonra debian tarzı çekirdek derlemenin esprisi de buymuş ki; bu .config dosyası içinde düzenleme yaptım verilen linkteki gibi. :) (Tabi ki vim ile o satırları düzelttim) Sonra da bu config dosyasını çekirdeğe tanıttım;
#make oldconfig

Bu biiir dedim. Daha sonra menuconfig ile menuden konfigurasyon yapılabiliyor.
#make menuconfig (bunun yerine xconfig de kullanılabilir tabi ama o zaman x kullanıcısı ile açmak gerekiyor yoksa debian'da yemiyor kosnolda root'ken make xconfig yazmayı.)

menüden de extra düzenleme yaptım. (aslında yapmadım da yapılabilir diyelim) Sıra geldi, çekirdeğin derlenmesine; dım dım dım dım :)
# make-kpkg clean
# make-kpkg kernel-image --append_to_version .25112005 --revision r1 --initrd

veeeeeeee sonuç; HATAAAAAAA :(
Bir sürü satırdan sonra şöyle bir ekran;

LD usr/built-in.o
CC arch/i386/kernel/process.o
{standard input}: Assembler messages:
{standard input}:861: Error: suffix or operands invalid for `mov'
{standard input}:862: Error: suffix or operands invalid for `mov'
{standard input}:1055: Error: suffix or operands invalid for `mov'
{standard input}:1056: Error: suffix or operands invalid for `mov'
{standard input}:1122: Error: suffix or operands invalid for `mov'
{standard input}:1123: Error: suffix or operands invalid for `mov'
{standard input}:1190: Error: suffix or operands invalid for `mov'
{standard input}:1191: Error: suffix or operands invalid for `mov'
{standard input}:1300: Error: suffix or operands invalid for `mov'
{standard input}:1312: Error: suffix or operands invalid for `mov'
make[1]: *** [arch/i386/kernel/process.o] B d 1
make: *** [arch/i386/kernel] B d
#

Amaaann tanrım. Bu hata ne yaaaaa? Neyse biraz daha araştırma sonucu bu hatanın da çözümü meğer bir patch ileymiş. Demek ki önce çekirdeğe patch (yama) yapacağız. Peki dedim. Yamayı indirdim; Bu arada bahsi geçen yama bu: PATCH Bu yamanın inmesi de yetmiyor tabi; ki çekideği yamamak için; make oldconfig yaptıktan sonra;

# patch -p1

ile çekirdeği yamadım. Ardından yine sırayla; make menuconfig (lazımsa) ve make-kpkg komutları. Yaşasın devam ediyor. Az önce hata verdiği yeri geçti. Biraz beklemeli derken baktım amcanın bitirmeye niyeti yok. Bir çay kahve mail arası. Aradan 1 saat sonra falan HATASIZ bir şekilde çekirdeğim derlenmiş, yetmemiş kpkg sayesinde çekirdeğim kernel-source kernel-image-2.6.8.25112005_r1_i386.deb adında deb paketi yapılmıştı. (Bu ne büyük bir lüks ya) Kalan sadece .deb paketini dpkg ile kurmak. Bunu da tabi ki;
# dpkg -P kernel-image-2.6.8.25112005_r1_i386.deb

ile kurdum ve gruba bile ekledi yeni çekirdeği. Daha sonra temizlik kaldı geriye. Önce; oluşturduğum linux sembolik linkini kaldırdım.
Peki sonuç ne oldu? Cuma akşam çıkmadan önce makinamı yeni çekirdekle açtım. Ardından 2 gün açık kaldı. Pazartesi sabahı heyecanla gelip makinama baktım. Sorunsuz görünüyordu. Kullanıcı adı, şifre girdim. Hemen sonra X'de bazı sorunlar oldu. Belki de nvidia sürücülerini yüklemediğim için olabilir diyorum. Bir de o şekilde deneyeceğim. Ayrıca son deneme şeklimde grubtan ACPI=Off yaparak olacak. Bunu yaparsam herhalde makina sadece elle kapatılabilcek ama olsun deneyeceğim. Bu arada ne çok şey öğrendim ya... :) I love this game(=linux) :)
Bir de bu sorunu yaşayanlara en üstteki çözümü bulduğum sayfada yazan alternatif çözüm, bios update ama ben öncelikle çekirdekten veya linuxtan çözmek istiyorum.
Sonuçlar yine blogta.. :)

Hiç yorum yok: