[Çözüldü] Patch / Yama Nasıl Uygulanır ?

Başlatan noktakom, 04 Mayıs 2012 - 10:49:26

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

ironic


sudo modprobe pata_sis

# derlenmiş modül dizinindeyken
sudo insmod ./sata_sis.ko

noktakom

$ sudo modprobe pata_sis
[sudo] password for asus:
asus@asus-F5SR:~$ sudo insmod ./sata_sis.ko
insmod: can't read './sata_sis.ko': No such file or directory


Tekrar bi mail attım, kibarca yardım istedim. bakalım, bu sefer belki biraz yol gösterir.

heartsmagic

pata_sis dersen mevcut olanı yükler, yüklü olan varsa gerçi hata vermesi lazım. Bu durumda yeniden yüklüyorsa da senin modül o değildir diye bir şey geliyor aklıma.

sata_sis.ko komutu verdiğin dizinde miydi?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Pardon, aklım bir an başka bir yere gitmiş. Bu gün oluştuğumuz modüllerin dizinine girip. "sudo modprobe pata_sis" ve "sudo insmod ./sata_sis.ko" komutlarını verdim. kde masaüstü hemen kapandı, siyah ekranda bir sürü hata belirdi.

heartsmagic

Bir de normal kopyalama yolunu deneyelim. Kullandığın çekirdek muhtemelen 3.2.0-24-generic-pae'dir, haliyle sende de bu modülün /lib/modules/3.2.0-24-generic-pae/kernel/drivers/ata/ dizini altında olması lazım. Yedek alalım önce:

sudo cp /lib/modules/3.2.0-24-generic-pae/kernel/drivers/ata/sata_sis.ko /lib/modules/3.2.0-24-generic-pae/kernel/drivers/ata/sata_sis.ko.yedek

Sonra da kopyalayalım:

sudo cp /nerede/bu/oluşan/sata_sis.ko /lib/modules/3.2.0-24-generic-pae/kernel/drivers/ata/

Sonra sistemi yeniden başlatırsın. Masaüstü gelmez, sistem falan sorun yaparsa yedekten dönersin. Fakat biz bu modülün bizim derlemeye çalıştığımız dosyadan çıktığına emin miyiz şu anda?

Ayrıca pata_sis'i neden yüklüyoruz? Bende yüklenmesi sorun yapmamasına rağmen yüklü modüller arasında da görünmüyor.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

"modülün bizim derlemeye çalıştığımız dosyadan çıktığına emin miyiz şu anda? "

Eminiz,   ironic'in verdiği komutlarla oluşan modüller arasında vardı. o dizine girip, uyguladım.

Kopyalama yolunu denemiştim zaten. oluşan tüm modülleri lib/modules/ altındakilerle değiştirdim.

pata_sis konusunda birşey diyemiyorum.

Bu arada yardım talebime hala cevap gelmedi.

heartsmagic

Eğer modül oysa tamam. Peki kopyaladıktan sonra sistemi açınca ne oldu?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Normal bir şekilde açıldı. sonra uyku modunu test ettim. sorun devam ediyor.

heartsmagic

Normal bir şekilde açıldıysa olayı artık modül kısmından çıkartmak lazım. Sen eski modülün ismini değiştirip yenisini koyduysan ve sistem açıldıysa senin artık yine sorunu irdelemen, düzelmediyse bunu bildirmen gerekiyor.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

#34
Yaptığımız işlemleri ve aldığımız sonucu anlatan bir mail daha attım.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 08 Mayıs 2012, 08:11:23

Alıntı YapSo, the patch isn't supposed to fix the problem but provide more
details on what's going on.  That said, just building the kernel and
modules and copying the module file wouldn't work - you shouldn't be
combining kernel and modules of different versions and builds and
libata modules are probably being loaded from initrd anyway.

Umm.... There should be some tutorials on how to do this.  This thing
is distro dependent and grub2 seems to have added a lot of fun lately.
Can you find someone to help you from the distro side?  If there's
someone, please feel free to cc him/her here.

Thanks.


If my assumption that this is caused by no fault retry given out
incorrectly, something like the following to limit that should resolve
the issue (sans the part why no fault is given out in the first
place).

Thanks.

---
drivers/ata/libata-eh.c |   18 ++++++++++++++++--
include/linux/libata.h  |    4 ++++
2 files changed, 20 insertions(+), 2 deletions(-)


diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index c61316e..dcdb11f 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -1293,8 +1293,22 @@ void ata_eh_qc_complete(struct ata_queued_cmd *qc)
void ata_eh_qc_retry(struct ata_queued_cmd *qc)
{
       struct scsi_cmnd *scmd = qc->scsicmd;
-       if (!qc->err_mask && scmd->retries)
-               scmd->retries--;
+
+       /*
+        * If @qc failed through none of its own fault (zero err_mask),
+        * don't let it consume its SCSI cmd retry count.  Limit no fault
+        * retries for safety.
+        */
+       if (!qc->err_mask) {
+               if (qc->nr_nofault_fails++ < ATA_EH_MAX_NOFAULT_FAILS) {
+                       if (scmd->retries)
+                               scmd->retries--;
+               } else {
+                       ata_dev_warn(qc->dev, "no fault retry limit reached for cmd %02x\n",
+                                    qc->tf.command);
+               }
+       }
+
       __ata_eh_qc_complete(qc);
}

diff --git a/include/linux/libata.h b/include/linux/libata.h
index 42378d6..27b1797 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -356,6 +356,9 @@ enum {
       /* max tries if error condition is still set after ->error_handler */
       ATA_EH_MAX_TRIES        = 5,

+       /* !err_mask qc fails don't consume SCSI retry count upto this time */
+       ATA_EH_MAX_NOFAULT_FAILS = 15,
+
       /* sometimes resuming a link requires several retries */
       ATA_LINK_RESUME_TRIES   = 5,

@@ -582,6 +585,7 @@ struct ata_queued_cmd {
       unsigned int            cursg_ofs;

       unsigned int            err_mask;
+       int                     nr_nofault_fails;
       struct ata_taskfile     result_tf;
       ata_qc_cb_t             complete_fn;

heartsmagic

Doğrudan kopyalama işi olmuyormuş yani? Aslında modüllerin çekirdeğe bir şekilde gösterilmesi gerekiyor gibi, doğrudur fakat insmod ile anlık olarak yapıldığına göre ayrıca bir şey yapmaya gerek var mıdır?

Son gönderilen yeni yama mı?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Evet, olmuyormuş.

Yabancı forumların birinde ata sürücülerinin ayrı modüller olmadığını kernel'in bir parçası olduğunu, boot edilmeye ihtiyaç duyduklarını özetle komple kernel derlemem gerektiğini söylemiş.

Yeni yama, evet... yalnız bu da hata veriyor...

heartsmagic

Tümden çekirdek derlemek mi? Hani o da yapılır da gerekli mi cidden. Yama konusu çözülsün bence önce.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Tekrar mail attım. 3.3.5 kernel için yamalı dosyaları istedim. Sonrasında komple kernel derlemeyi deneyeceğim.

Kernel derlerken yüklenecek, kaldırılacak modülleri vs. nasıl seçiyoruz? Bu konuda bir bilgi bulamadım. Olabildiğince ufak boyutlu bir derleme yapmak istiyorum ki çabuk bitsin. Hem de sistem bu şekilde daha performanslı oluyor sanırım.

heartsmagic

Kendin yapılandırma yapacaksan işler daha da karışabilir zira emin ol bilmediğin bir dünya şey olacak. Sen Ubuntu'nun kullandığı .config dosyası üzerinden gidersen bence daha güzel olur. Fakat illa kendim yapacağım diyorsan "kernel compile" şeklinde yapacağın aramalarda anlatımlar bulabilirsin. Tabi daha çok İngilizce olacaktır bu anlatımlar.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

O aramaları yaptım zaten, kerneli indirip menu config ile açılan bölümü de inceledim. Dediğiniz gibi karşıma bilmediğim şeyler çıktığı için soruyorum    . .. Neyse, şimdi ben ayarlarla oynamadan direk derlemeye geçersem, şu an sistemdeki kernelin konfigürasyonu neyse aynı şekilde mi olacak yeni kernel. Yani eksik veya fazla birşey derlenmez değil mi???

heartsmagic

Bilmediğin şeylerin çoğunu ben de bilmiyorumdur muhtemelen :) Slackware zamanında çok irdelemeye çalışırdım derleme işini fakat ne kadar araştırsam da illa ki bilmediğim şeyler çıkardı. İnsan orada istese bile çekirdekten çıkartamıyor o özellikleri, zira etikilerini bilmiyor. Tabi belli başlı şeyler var ki onları gönül rahatlığıyla çıkartabiliyorsun zira anlıyorsun. Eğer denerim dersen sıfırdan da yapabilirsin, en fazla yeni derlediğin çekirdekle sistem açılmaz. Baştan yaparsın, zaman kaybın olur sadece.

Eğer Ubuntu'nun kullandığı ayarları kullanacaksan /boot altındaki dosyayı kullanabilirsin fakat çekirdek sürümleri değişik olacak tabi. Zira sen üst sürümden bir çekirdek indireceksin. Kullanırsın o dosyayı sorun olursa ayrıca araştırılır bence.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Peki sizce ne yapalım şimdi. geliştiricilere 1 haftadır düzgün bir cevap veremedik... Bu fırsatı da elimizden kaçırırsak bir daha konuyla ilgilenen birini bulamayız...

heartsmagic

Çekirdeği derlemeyi deneyebilirsin, elindeki config dosyasını kullan. Dediğim gibi sorun çıkarsa ona göre bakacağız duruma, şu aşamada başka çaremiz yok gibi. Sen ATA modüllerinin çekirdekten bağımsız derlenmediği bilgisinden emin misin?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Eminim diye bir şey yok, linux questions'ta yanki'nin biri öyle dedi. Ask ubuntu, mail listesi, geliştiriciler vs. başka hiçbir yerden de cevap alamadım. O yüzden net bir bilgi yok.

Birde 3.4 kernelinde bazı hatalar giderilmiş sanırım. Daha önce pc uyanma sürecindeyken ctrl+alt+f1 e bastığımda aldığım hatalar şunlardı.

ata1: ACPİ set timing mode failed (status: 0x300b)
ata3.00 : exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
ata3.00 : failed command :READ VERİFY SECTOR(S)
cmd: 40/00:01:00:00:00/00:00:00:00/e0 tag 0
res: 40/00:01:00:00:00/00:00:00:00/40 Emask:0x4 (timeout)
pm_op():scsi_bus_resume_common+0x0/0x60 returns 134217730
PM: Device 2:0:0:0 failed to resume async:error 134217730


3.4  kernelini yükleyince sadece şu hata görünüyor.

ata1: ACPİ set timing mode failed (status: 0x300b)

Bu  hatanın çözümünü bulsak büyük ihtimal problem ortadan kalkar.

heartsmagic

Şurada bu son hata iletisinin çok sorun olmayacağı söylenmiş:
https://bugs.launchpad.net/ubuntu/+bug/858994

Senin sorun kesin bu mudur bilemiyorum tabi. Forumda söylenen şeyse eğer o bilgi teyidi lazım, yapamayacağımız için de sanırım yine ne yönde gideceğimize karar vermemiz gerekmekte.

Şuraya bir bakalım:
https://wiki.ubuntu.com/KernelCustomBuild

Buradaki ilk "Comment" bölümüne yani soru/cevap kısmına bakarsak aslında tam da bizim yapmamız gereken şey anlatılıyor. Zaten yapılanlara bakacak olursan artık tanıdık gelecektir. Yama işi, sonra modülün derlenmesi, kurulması. En son da depmod işlemi.

cd linux-2.6.30/drivers/gpu/drm/i915/
patch i915_drv.c /tmp/patch # make any modification you need here
make -C /usr/src/linux-headers-`uname -r` M=`pwd` modules
sudo make -C /usr/src/linux-headers-`uname -r` M=`pwd` modules_install
sudo depmod -a


Senin yamalı dosyan zaten hazır. Burada dikkat edeceğin tek şey eğer yamalı dosya belirli bir çekirdek sürümü içinse senin önce o çekirdeği edinmen. Bu yönde düşünüyorum artık kısacası. Çünkü farklı bir çekirdek üzerindeyken farklı bir çekirdek sürümü için hazırlanan yama etki eder mi, ederse olumlu yönde eder mi kestiremiyorum. Şu durumda ne yapabilirsin:

1. Yamanın hazırlandığı çekirdeği kurarsın sisteme. .deb paketleri bulunabilir rahtlıkla mainline üzerinden: http://kernel.ubuntu.com/~kernel-ppa/mainline/
2. Yamalı dosyayı bu çekirdeğin kaynağı üzerinden derlersin. Bunun için de haliyle o seriye ait kaynak indirilmeli.
3. Sonra yukarıdaki anlatımın make aşamasından başlarsın.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Tamamdır, o yanki'nin bahsettiği durumun çözümü de burada anlatılmış.

If you want that the kernel uses the patched module during boot you need to do this as well:

sudo update-initramfs -u

heartsmagic

depmod'dan sonra bir de bunu uygularsın. Aslında bizim de aklımıza gelmesi lazımdı zira işlenmesi lazım çekirdeğe cidden modüllerin.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

noktakom

Çok teşekkürler işlemi yaptım, 5 dk bile sürmedi :) Şİmdi dmesg çıktını paste.ubuntu'ya geçip cevap atıyorum. Yalnız İşin ironik tarafı da ne biliyor musunuz? aradığımız kaynak meğer benim bilgisayarımda evvelden beri mevcutmuş :D kernel kaynak kodları arasında /documentation dizininde :)


heartsmagic

İşte, bezen neyi nerede aramamız gerektiğini kestiremiyoruz :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.