Çekirdekte hangi aygıt sürücüleri yerleşiktir?


14

Kısa süre önce bir donanım aygıtına yerleşik linux tarafından sağlanan bir satıcı kurdum. lsmodAygıt komut satırında koştuğumda yanıt boştu. Bunun, aygıtta çalışan donanım sürücülerinin .ko dosyaları yerine çekirdeğe yerleştirildiği anlamına geldiğine inanmaya başladım. Sorum şu: bu süreç nasıl oluyor?

Popüler donanım desteği, sonraki sürümlerde yavaş yavaş çekirdeğe entegre ediliyor mu, böylece .ko dosyalarını değiştiriyor mu? .Ko dosyası, sürüm sırasında çekirdek tümleşik sürücü desteğine sahip olmayan yeni donanımı desteklemek için mi kullanılıyor? Sınırlı bilgime göre, tüm donanım sürücülerinin .ko dosyaları biçiminde olduğunu düşündüm ama açıkça bu yanlış.

Tüm süreçten biraz kafam karıştı ve duruma yanlış bir şekilde baktığımı hissettiğim için açıklama için minnettar olurum.


Yanıtlar:


10

Çekirdeğin yüklenmesi için kritik olduğu düşünülen çekirdek sürücüler genellikle çekirdeğe, diğer donanım sürücüleri vb . İse modüller veya .ko dosyaları olarak oluşturulur.

.Ko modüller genellikle altında saklanır /libkök dizininde dizinde. Bunlardan herhangi birini kullanmak için, çekirdek önce temeldeki depolama aygıtını algılayıp erişebilmeli ve ardından dosya sistemine erişebilmelidir. Bu nedenle, yerleşik SATA / SCSI ve ext2 / 3/4 desteği olmayan bir çekirdeğin gerçekten önyükleme yapmayacağını varsayalım;)

Çoğu yerleşik çekirdek sürücüsünü modül formuna geçirmeyi seçebilirsiniz. Ubuntu çekirdek ekibi Linux çekirdek ekibinin varsayılan yapılandırmasını değiştirip değiştirmeyeceğinize ve indirdiğiniz stok çekirdeği görüntüleri için ek yerleşik sürücüler ekleyip eklemeyeceğinize karar verir.

Kendi çekirdeğinizi kurarsanız, aynısını yapabilirsiniz:

resim açıklamasını buraya girin

  • Yukarıdaki ekran görüntüsünde, *yerleşik bir sürücüyü Mbelirtirken, bir modülü belirtir.
  • Genellikle sistemi önyüklemek için gerekli olan geri döngü aygıtı desteği varsayılan olarak yerleşiktir.
  • Düşük hızlı USB sürücüsü (USB 1.0) ayrıca bir USB çubuğunu önyüklemenize izin vermek için varsayılan olarak yerleşiktir, ancak burada bir modüle değiştirdim.

Çok yardımcı olur teşekkürler. Sanırım sonunda kendim için sıfırdan bir çekirdek derlemesi yaptığımda bunu daha iyi anlayacağım.
mathematician1975

3

Bir çekirdeği derlerken , hangi bileşenlerin yükleneceğini yapılandırabilirsiniz . Sadece bu değil, aynı zamanda çekirdek içine yerleştirilip yerleştirilmediklerini veya bir modül olup olmadıklarını da seçebileceksiniz .

Örneğin, birçok kişi ext2 dosya sistemini kendi / boot bölümlerinde kullanır. Bu nedenle, çekirdek ext2 dosya sistemlerini önyükleme sırasında okuyabilmelidir. Bunu başarmak için ext2 modülü çekirdeğin içine yerleştirilmiştir.

Şimdi, mevcut modül miktarını hayal edin. Hepsini çekirdeğinize yerleştirmek mantıklı değil, değil mi? Bu yüzden bunları ayrı .ko modülleri olarak oluşturabilir ve istediğiniz zaman yükleyebilirsiniz.


1
Evet, son paragrafınız sorumu dürüst olmaya motive eden şeydir. Cevabınız için teşekkürler
mathematician1975

1

Bunlar, linux çekirdeği yapılandırmanızı nasıl yapılandırdığınıza bağlıdır.

Bir derleme sürecinde genellikle şunları yapabilirsiniz:

  • çekirdeği modül desteği olsun veya olmasın derleyin (genellikle modül desteği ile gelir)
  • sürücüyü modül olarak veya yerleşik bir yazılım parçası olarak doğrudan çekirdeğe derlemek

bir .ko dosyasının ne olduğunu anlamak için /programming/10476990/difference-between-o-and-ko-file

Boş bir çıktınızın olmasının nedeni lsmod, yekpare bir çekirdeğe sahip olmanızdır.

Tüm modüllerinizi (varsa) listelemenin hızlı bir yolu bu komutu çalıştırmaktır

find /lib/modules/*/ -type f -iname '*.ko' | less

kullanımını fark lessederseniz, istediğiniz her çağrı cihazını kullanabilir veya çıktıyı istediğiniz yere yeniden yönlendirebilirsiniz.


Modül desteği olmadan yapılandırılmış bir çekirdeğe (benimki gibi) ek donanım kullanmak için .ko dosyaları şeklinde herhangi bir sürücü yükleyemez miyim?
mathematician1975

evet, temel olarak onu kaynaktan yeniden derlemelisiniz, eğer sürücüleri yeniden oluşturmak ve düzenlemek istiyorsanız, belki de aynı .configdosyayı kullanın ve istediğiniz gibi değiştirin.
user827992

Bunu yapmak için, satıcıdan çekirdek kaynağını almam gerekecek, .config dosyasında doğru değişikliklerle kendim derlemeliyim, sonra diğer sürücüleri kurmak iyi olacak mı?
mathematician1975

Eğer bir vanilya çekirdeği kullandıysa (orijinal kaynak kodundan başka bir şey olmadan) sadece .config ile tamamsınız ve aynı çekirdeği sadece bilgisayarınız ile çoğaltabilirsiniz, ancak bir vanilya çekirdeği + bazı yamalar veya değişiklikler yaptıysa Bu ek bilgilere ihtiyacınız varsa, özel bir Makefile, standart araç zincirinde ve genel olarak standart oluşturma işleminde yapılan diğer değişiklikler gibi ilgili bir değişken olarak da düşünülebilir.
user827992

Deneyimlerime göre, modüllerin gömülü Linux için, hız ve boyut nedenleriyle devre dışı bırakıldığı ve bu tür cihazların çekirdeklerinin genellikle ağaç dışı sürücüler içerdiği ve kaynak kontrolünden faydalanmadan rastgele çalışanların bilgisayarında oluşturulduğu. Bunda iyi şanslar.
Stephen M. Webb

0

/ Lib / modules / $ (uname -r) /modules.builtin dosyasının içeriğine bakın

örneğin, belirli bir modülü aramak için

grep <module> /lib/modules/$(uname -r)/modules.builtin

Belgeler / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.

??? OP'nin ne yapacağından emin değilim. Terminaldeki ilk hattı mı çalıştırması gerekiyor? Bu cevap olabilir, ama lütfen biraz ayrıntı verir misiniz?
anonymous2

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.