Module.symvers nasıl oluşturulur?


14

Kısa süre önce, çekirdek kaynak devir / dakika sisteminden (OpenSuse) Paketten Çıkarıldım? ; ve makinemde 10 saatten fazla sürdüğü için, orada açıklanan işlemi yaptıktan sonra hiçbir Module.symversyerde hiçbir şey bulamadığımı düşünün !

"Oluşturmak Module.symvers" için arama yaptığınızda, bunu elde:

Not:
CONFIG_MODVERSIONS ayarlanmış olsa bile "modules_prepare" Module.symvers oluşturmaz ; bu nedenle,
modül sürümlendirmesinin çalışması için tam bir çekirdek derlemesi yürütülmelidir.
( Linux Çekirdek Belgeleri :: kbuild: modules.txt )

... ama gerçekten anlamıyorum - çekirdek önceki adımda inşa edilmedi mi (yukarıda verilen bağlantıda açıklanmıştır? CC'nin bir sürü *. dosyaları ve LD onları bağlamak için bir şey inşa edilmiş olmalı ama eğer öyleyse, o zaman nerede Module.symvers?

Daha açık bir ifadeyle, Module.symvers oluşturmak için tam olarak hangi komutu çağırmalıyım? Bunun make prepareişe yaramayacağını biliyorum - ama işe yarayacak komut nedir?


Bilginize, opensuse üzerinde, sen alabilirsiniz Module.symverstarafından zypper install kernel-sourceve diğer linux dağıtımı benzer. Dosya içinde bulunuyor lib/modules/xxx/build.
Syrtis Major

Yanıtlar:


16

Module.symversNe zaman (yeniden) derleme modülleri üretilen (yeniden) 'dir. Çalıştırın make modulesve Module.symversçekirdek ağacının kökünden bir dosya almalısınız .

Sadece koştuysanız makeve make modulesyapmadıysanız, henüz herhangi bir modül oluşturmadığınızı unutmayın. Çekirdeğin içindeki semboller ( vmlinuxveya mimariye bağlı görüntü formatlarından biri) içerisindedir System.map.


Bunun için çok teşekkürler, @Gilles - O zamandan beri de Cevap buldum : Cevap: Module.symvers dosyası ; ve bunun make modulesgerçekten yarattığını doğrulayabilir Module.symvers. Ayrıca teşekkürler arasındaki farkı netleştirmek için makeve make modulesiçin ve ilişki System.map. Şerefe!
sdaau

Makinede "make" yoksa ne olur?
bzupnick

3
@bzupnick Kurun. Linux çekirdek modülleri oluşturmak için gerekli araçlardan biridir. Bir çok yazılım oluşturmak için marka gerektirir.
Gilles 'SO- kötü olmayı bırak

Başka bir makineden LKM'yi çapraz derlemeye çalışıyorum. İlk kutuya bir şeyler yüklemek mümkün değildir.
bzupnick

@bzupnick Yine de modülü oluşturmak için yapmak zorundasınız. Her şey yapı makinesinde oluyor, hedef makinede yapacak bir şey yok insmod.
Gilles 'SO- kötü olmayı bırak

4

Derek Molloy'un örnek LKM'lerinden birini derlerken aldığınız uyarıyı araştırarak bu soruyu bulan kişiler için: sadece boş bir soru yapabilirsiniz touch Modules.symvers. çekirdeğiniz modversiyon kullanmıyorsa (modüllerin çekirdeğe uygun olmasını sağlamak için işletim sistemi tarafından kullanılan CRC'ler) ve modülünüzün diğer modüllere bağımlılığı yoksa, uyarıyı bastırmak için yeterince iyi olacaktır.

WARNING: Symbol version dump ./Module.symvers
         is missing; modules will have no dependencies and modversions.

boş dosya, 0x00000000modifikasyonları olmayan bir sistemde, sadece aynı CRC değerine sahip sembollere sahip olan gcc tarafından oluşturulan dosya kadar iyidir .


2

CentOS ve belki de diğer RedHat varyantlarında, çalışan çekirdeğiniz için ilgili dosyayı ayıklamanız yeterlidir:

zcat /boot/symvers-$(uname -r).gz > ./Module.symvers

Ubuntu ve belki de diğer Debian varyantlarında, dosya otomatik olarak bulunacaktır. Ancak, ihtiyacınız varsa, dosya burada:

/usr/src/linux-headers-$(uname -r)/Module.symvers

linux-headers-$(uname -r)Klasörü bulamıyorum
King Stone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.