Saya baru-baru ini menginstal vendor yang disediakan linux tertanam ke perangkat perangkat keras. Ketika saya berlari lsmod
di baris perintah perangkat, responsnya kosong. Saya mulai percaya bahwa ini berarti driver untuk perangkat keras yang berjalan pada perangkat telah dibangun ke dalam kernel daripada sebagai file. Pertanyaan saya adalah ini: bagaimana proses ini terjadi?
Apakah dukungan untuk perangkat keras populer secara bertahap diintegrasikan ke dalam kernel pada versi selanjutnya sehingga mengganti file .ko? Apakah file .ko hanya digunakan untuk mendukung perangkat keras baru yang tidak memiliki dukungan driver terintegrasi kernel pada saat rilis? Dalam pengetahuan saya yang terbatas, saya berpikir bahwa semua driver perangkat keras berbentuk file .ko tetapi jelas ini salah.
Saya sedikit bingung dengan seluruh proses dan akan berterima kasih atas klarifikasi karena saya merasa bahwa saya mungkin melihat situasi dengan cara yang salah.
Jawaban:
Driver inti yang dianggap penting untuk memuat kernel biasanya dibangun ke dalam kernel, sedangkan driver perangkat keras lainnya, dll. Dibangun sebagai modul atau file .ko .
The .ko modul biasanya disimpan di bawah
/lib
direktori pada partisi root Anda. Untuk menggunakan ini, kernel harus terlebih dahulu dapat mendeteksi dan mengakses perangkat penyimpanan yang mendasarinya dan kemudian mengakses sistem file-nya. Jadi aman untuk mengasumsikan bahwa kernel tanpa SATA / SCSI dan dukungan ext2 / 3/4 tidak akan benar-benar boot;)Anda dapat memilih untuk mengganti sebagian besar driver kernel bawaan ke dalam bentuk modul. Tim kernel Ubuntu memutuskan apakah akan mengubah konfigurasi default tim kernel Linux dan memasukkan / mengecualikan driver bawaan tambahan untuk gambar kernel stock yang Anda unduh.
Jika Anda membangun kernel Anda sendiri, Anda dapat melakukan hal yang sama:
*
menunjukkan driver built-in, sementaraM
menunjukkan modul.sumber
Ketika mengkompilasi kernel , Anda bisa mengkonfigurasi komponen mana yang diinstal. Tidak hanya itu, tetapi Anda harus memilih apakah mereka dibangun ke dalam kernel atau jika mereka adalah modul .
Sebagai contoh, banyak orang menggunakan sistem file ext2 di partisi / boot mereka . Karena itu, kernel harus dapat membaca filesystem ext2 saat boot. Untuk mencapai hal ini, modul ext2 dibangun ke dalam kernel itu sendiri.
Sekarang, bayangkan jumlah modul yang tersedia. Tidak masuk akal untuk memiliki semuanya dibangun ke dalam kernel Anda, bukan? Inilah sebabnya mengapa Anda dapat membangun ini sebagai modul .ko terpisah dan memuatnya sesuka hati.
sumber
Ini tergantung pada bagaimana Anda mengonfigurasi kernel Linux Anda.
Dalam proses kompilasi Anda biasanya dapat:
untuk memahami apa file .ko untuk /programming/10476990/difference-between-o-and-ko-file
Alasan mengapa Anda memiliki output kosong
lsmod
adalah karena Anda memiliki kernel monolitik.Cara cepat untuk mendaftar semua modul Anda (jika ada) adalah dengan menjalankan perintah ini
perhatikan penggunaan
less
, Anda dapat menggunakan setiap pager yang Anda inginkan atau mengarahkan output ke tempat yang Anda inginkan.sumber
.config
file yang sama dan memodifikasinya sesuai kebutuhan.Lihat isi file / lib / modules / $ (uname -r) /modules.builtin
mis. untuk mencari modul tertentu
Dokumentasi / kbuild / kbuild.txt
sumber
tampaknya berisi semua modul internal dan eksternal.
Tetapi tampaknya juga mengandung beberapa entri yang sebenarnya bukan modul: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules
TODO: baca sumbernya dan pahami lebih tepatnya apa yang ada di sana.
Keuntungan dari metode ini adalah Anda tidak dapat mengandalkan untuk menemukan konfigurasi kernel di bawah
/boot
atau/proc/config.gz
.sumber