Bagaimana cara mendaftar semua modul kernel yang dapat dimuat?

66

Saya mencari beberapa modul kernel untuk dimuat i2c-devdan i2c-bcm2708. Tetapi modprobeperintah kembali:

sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep

Bagaimana saya bisa mendaftar semua modul yang tersedia di sistem? Di direktori mana mereka berada?

UserK
sumber
1
Kernel tidak mengkompilasi i2c-dev ini. Anda tidak menemukan modul ini. Modul kernel terletak / lib / modules / 'kernel-versi' / driver. Ketika Anda mencari driver linux.
supriady
Anda dapat memeriksa / boot / config-'kernel-versi 'dan membaca file konfigurasi ini. Anda harus tahu modul linux mana yang dimuat atau modulars atau selama kompilasi kernel tidak mengaktifkan modul i2c-dev.
supriady

Jawaban:

77
  • Secara default modprobememuat modul dari subdirektori yang terletak di /lib/modules/$(uname -r)direktori. Biasanya semua file memiliki ekstensi .ko, sehingga Anda dapat mendaftarnya

    find /lib/modules/$(uname -r) -type f -name '*.ko'
    

    atau, dengan mempertimbangkan file terkompresi akun:

    find /lib/modules/$(uname -r) -type f -name '*.ko*'
    
  • Namun, untuk memuat modul berhasil modprobemembutuhkan dependensinya yang tercantum dalam file /lib/modules/$(uname -r)/modules.dep(dan versi biner yang sesuai modules.dep.bin). Jika beberapa modul ada pada sistem, tetapi tidak ada dalam daftar, maka Anda harus menjalankan perintah depmodyang akan menghasilkan dependensi seperti itu dan secara otomatis menyertakan modul Anda ke modules.depdan modules.dep.bin.

  • Selain itu, jika modul berhasil dimuat akan terdaftar dalam file /proc/modules(juga diakses melalui perintah lsmod).

jimmij
sumber
3
File modul 7 redhat dikompresi dalam .xz (tidak yakin apakah itu karena versi kernel atau versi OS .. jika seseorang dapat mengklarifikasi kepada saya?) Jadi saya pikir Anda mungkin tidak menemukannya dengan perintah find jimmij. Gunakan sebagai gantinya find /lib/modules/$(uname -r) -type f -name *.ko*
Pozinux
1
@Pozinux Menemukan hal yang sama di sini di Arch linux pada 4.13.10, yang memiliki akhiran.gz
Johann
1
@posinux: hati-hati: shell dapat memperluas Anda *.ko*jika Anda kebetulan ada di dir Anda saat ini beberapa file yang cocok. lebih baik untuk menghindarinya di antara tanda kutip tunggal: find /lib/modules/$(uname -r) -type f -name '*.ko*'
Olivier Dulac
10

Ketik modprobedan tekan tab, daftar lengkapi-otomatis harus berisi semua modul yang dapat dimuat

Martin Hansen
sumber
11
itu tidak berfungsi untuk beberapa sistem
avtomaton
5

Ada lsmodperintah dari kmodpaket di Arch Linux apa yang daftar dan menunjukkan status modul kernel Linux yang berisi perintah lain yang berguna seperti modinfo, rmmod modprobejuga.

Untuk l ist semua binari disediakan oleh paket Anda dapat mengetik:

pacman -Ql kmod | grep /bin/ --color=always

, Dan Anda juga dapat memeriksa untuk o paket wner dari biner dengan pacman -Qo lsmod.


Qswitch untuk q uery paket diinstal secara lokal (seperti Suntuk s ynchronize, yaitu. untuk memeriksa dari jarak jauh).


sumber
2
Di mana penting untuk menyoroti bahwa lsmodhanya menampilkan modul yang sudah dimuat. Penulis utas ini memiliki masalah untuk memuat modul yang tidak ada di peta modul kernel yang dapat dimuat. Selain itu, solusi ini hanya berlaku untuk archlinux. Yang mungkin bukan distribusi dari Penulis dan mungkin tidak menyelesaikan masalah untuk orang lain.
Akendo
@Akendo lsmodjuga tersedia di Ubuntu, setidaknya. Namun, saya setuju ini tidak menyelesaikan masalah OP.
Melebius
2

Saya lebih suka menggunakan depmod. Dengan perintah depmod -av|grep MOD_NAME:, sistem Anda akan menghasilkan file modules.dep / map dan menerobosnya. The -vparameter yang penting untuk bertele-tele dan -auntuk memastikan bahwa semua kemungkinan modul dari /lib/modules/digunakan untuk file modules.dep.

Dengan cara ini dimungkinkan untuk memastikan, bahwa modul kernel yang diminta dipetakan ke kernel sebagai dapat dimuat. Ketika modul kernel keinginan tidak tercantum dalam output, Anda tahu bahwa kernel tidak akan menemukannya.

Akendo
sumber