Insmod

2015-11-16 8 views
6

'dan sonra sembol simge_adı sürümü hakkında fikir ayrılığımı Çekirdek programlamada yeniyim.Insmod

Proje çalışmamın uygulanması için, kernel.org numaralı telefondan en son çekirdek (v4.3) ürününü indirdim.

Sadece kontrol için kernel dizinlerinden bir kaç dosyayı proje dizinime kopyaladım. Yapılan değişiklikler ve ona birkaç tane daha kod eklendi.

O zaman başarıyla derlenmiş

obj-m := my_module.o 
my_module-objs := module_main.0 other_module1.o other_module2.o other_module3.o 

aşağıda Makefile kullandık

make -C /lib/modules/$(uname -r)/build M=$PWD modules 

kullanılarak SLES11 Linux çekirdeği üzerine derlenmiş. Ben

insmod my_sample.ko 

kullanarak çekirdeğin içine eklemek çalıştığında Ama o sembolün sürümü hakkında aşağıdaki

katılmıyor gösterdi

enter image description here

Lütfen yardım

parite_adı. Teşekkürler.

cevap

2

Buradaki sorun, Kernel modülünüzün, bu durumda, InfiniBand RDMA yığınının dışa aktarılan yöntemleri veya sembolleri gibi görünen diğer çekirdek modüllerinin dışa aktarılan sembollerini kullanmasıdır.

, sembol sürüm sorunları çözmek

/usr/src/ofa-kernel 

dizinden Module.symvers dosyayı kopyalayıp mevcut çalışma dizinine yapıştırın. Sonra modüllerinizi tekrar yaparsınız. Şimdi insmod kusursuz bir şekilde çalışmalıdır.

NOT: Module.symvers dosyası, tüm çekirdek modülünün dışa aktarılan sembolü hakkında bilgi içerir. Böylece, çalışma dizininize kopyalayarak, , kullanılan dışa aktarılan semboller hakkında daha fazla bilgi edinmenize yardımcı oluyorsunuz.

Ve Module.symvers bulmuyorum veya boş ise, o zaman ben çalışan çekirdekte/usr/src/dizinden src dosyaları indirdiğiniz create_Module.symvers.sh

+0

Bunu çözmek için saatler harcadı. İşe yarıyor! – JC1

+0

Ubuntu 14.04'te aynı sorunu yaşıyorum./Usr/src/of/kernal/default'dan kopyalama sorunu çözmedi./usr/src/ofa-kernel yalnızca bir dizin varsayılanına sahiptir. Sürücüyü, kernel ve ofa-kernel-3.3'ü oluşturan mlnx-of-kernel-3.3 aracılığıyla kurdu. Lütfen yardım et. Teşekkürler. –

8

Çekirdek modülünüzü, çalıştıracağınız sürüm sürümüne göre oluşturmanız gerekir. Böylece, indirdiğiniz çekirdek 4.3 kaynaklarınız varsa, çekirdeği yüklemeye başlamadan önce, bu çekirdekle birlikte derlemesini ve bu çekirdek ile sürümünü derlemeniz gerekir.

Daha sonra iki çözüm vardır: (. Eğer SLES üzerinde zypper install kernel-source veya diğer dağıtımlarında eşdeğer komutuyla olanlar yükleyebilirsiniz)

  1. o anda çalışmakta olan çekirdek için çekirdek kaynaklarını indir
  2. Derleme ve 4.3 çekirdeğini işletim sisteminize yükleyin. Bununla ilgili yardıma ihtiyacınız varsa, ayrı bir soru sorun (muhtemelen burada olmayan süper kullanıcıya aittir). Eğer çekirdek ve glibc birbirine sıkı sıkıya bağlıysa ve çok eski bir C kütüphaneniz varsa yeni bir çekirdek çalıştıramayacağınızı unutmayın.
+0

kullanarak oluşturabilirsiniz. Daha sonra aynı düzenleme yapıldı. Yine başarılı bir şekilde derlenmiştir ancak .ko dosyasını insmodlamaya çalıştığımda yukarıdaki anlık görüntüde gösterilen aynı sürüm sorunlarını gösterir. Çekirdek sürümü ve Insmod -V gösterileri (module-init-tools sürümü 3.11.1) yardım lütfen ('uname -r 3.0.76-0.11-default gösterir). – user3243499

+0

Ayrıca 'cat/proc/version' çalıştırarak 'Linux Sürüm 3.0.76-0.11-default (geeko @ buildhost) (gcc sürüm 4.3.4 [gcc-4_3-dallanma revizyon 152973] (SUSE Linux))' yi gösterir. . Hangi sürümü kullanmalıyım? – user3243499

+1

Modülünüzün çalışmakta olduğunuz çekirdeğin altında çalışmasını istiyorsanız, bu çekirdeğe karşı derlemeniz gerekir (3.0). SuSE'den bu yapı için orijinal çekirdek kaynaklarını alabilmelisiniz. –

2

yapmak -C/lib/modules/$ (uname -r)/M = $ inşa PWD modüller, "$ (uname -r)" Eğer şu anda yayınlanıyor çekirdek sürümü karşı derleme olduğunu göstermektedir Bu nedenle, eğer başlıkları değiştirmediyseniz, mevcut çekirdeğin modülünü modifiye edebilmelisiniz.

Metninizden, "Sadece kontrol için kernel dizinlerinden bir kaç dosyayı proje dizinime kopyaladım. Değişiklik yaptım ve ona birkaç tane daha kod ekledim."

Çekirdek kaynağında değişiklik yaptıysanız, yeni çekirdeği yeniden derlemeniz ve yeni güncelleştirilmiş çekirdeği önyükleme yapmanız gerekebilir. Ardından, çekirdek modülünüzü değiştirilmiş üstbilgilerle derleyebilmeniz gerekir.

+0

Sanırım bazı aygıt sürücülerinin başlığında bazı değişiklikler yaptım. Çekirdeği yeniden derlemek için MİNİMAL adımlarını gösteren bir bağlantıdan bahseder misiniz? 'Ayrıca, derlemeyi derlediğimizde, eğer çekirdeğindeki gelişmelerin bir parçası olarak herhangi bir değişiklik yapsam, çekirdeği yeniden derlemem gerekir mi? ' – user3243499

+1

Çekirdek derlemesi genellikle yapılandırma değişikliğini içerir, sonra onu oluşturur ve kurar.Bunu çoğunlukla ubuntu'da yaptım ama SuSe'de pek farklı değil. İşte SuSe https://www.howtoforge.com/kernel_compilation_suse içinde yapmak için adımları olan bir bağlantıdır. Evet, çekirdek üstbilgisini değiştiriyorsanız ve çekirdek modülünüz için değiştirilmiş üstbilgiyi kullanıyorsanız, çekirdeği yeniden derlememiz gerekir. – Randolf

1

Çekirdeğinizin nasıl derlendiği ile ilgili bir kernel.something. (Bkz. Config_conversions). Not --force