Driver perangkat mana yang dibangun ke dalam kernel?

14

Saya baru-baru ini menginstal vendor yang disediakan linux tertanam ke perangkat perangkat keras. Ketika saya berlari lsmoddi 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.

ahli matematika1975
sumber
superuser.com/questions/287371/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

10

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 /libdirektori 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:

masukkan deskripsi gambar di sini

  • Pada tangkapan layar di atas, yang *menunjukkan driver built-in, sementara Mmenunjukkan modul.
  • Dukungan perangkat loopback, yang seringkali penting untuk mem-boot sistem, sudah bawaan secara bawaan.
  • Driver USB kecepatan rendah (USB 1.0) juga bawaan secara bawaan untuk memungkinkan Anda untuk mem-boot USB stick, tetapi di sini saya telah mengubahnya menjadi modul.
ish
sumber
Terima kasih banyak membantu. Saya kira saya akan mendapatkan pemahaman yang lebih baik tentang ini ketika saya akhirnya melakukan kernel build dari awal untuk diri saya sendiri.
ahli matematika1975
3

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.

earthmeLon
sumber
1
Ya, paragraf terakhir Anda itulah yang memotivasi pertanyaan saya untuk jujur. Terima kasih atas jawabannya
ahli matematika1975
1

Ini tergantung pada bagaimana Anda mengonfigurasi kernel Linux Anda.

Dalam proses kompilasi Anda biasanya dapat:

  • kompilasi kernel dengan atau tanpa dukungan modul (seringkali disertai dengan dukungan modul)
  • mengkompilasi driver sebagai modul atau perangkat lunak bawaan ke dalam kernel

untuk memahami apa file .ko untuk /programming/10476990/difference-between-o-and-ko-file

Alasan mengapa Anda memiliki output kosong lsmodadalah karena Anda memiliki kernel monolitik.

Cara cepat untuk mendaftar semua modul Anda (jika ada) adalah dengan menjalankan perintah ini

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

perhatikan penggunaan less, Anda dapat menggunakan setiap pager yang Anda inginkan atau mengarahkan output ke tempat yang Anda inginkan.

pengguna827992
sumber
Jadi pada kernel yang dikonfigurasi tanpa dukungan modul (seperti milik saya tampaknya) saya tidak akan dapat menginstal driver dalam bentuk file .ko untuk menggunakan perangkat keras tambahan?
ahli matematika1975
ya, pada dasarnya Anda harus mengkompilasi ulang dari sumbernya, jika Anda ingin mengedit dan / atau menambahkan driver Anda harus membangunnya kembali, mungkin hanya menggunakan .configfile yang sama dan memodifikasinya sesuai kebutuhan.
user827992
Jadi untuk melakukan ini saya perlu mendapatkan sumber kernel dari vendor, kompilasi sendiri dengan modifikasi yang benar untuk file .config maka saya akan lebih baik untuk menginstal driver lain?
ahli matematika1975
tergantung, jika ia menggunakan kernel vanilla (tanpa lebih dari kode sumber asli) Anda tidak masalah hanya dengan .config dan Anda dapat mereproduksi kernel yang sama hanya dengan komputer Anda, namun jika ia menggunakan kernel vanilla + beberapa tambalan atau modifikasi Anda memerlukan informasi tambahan ini, Makefile khusus dapat juga dianggap sebagai variabel yang relevan seperti modifikasi lainnya pada rantai alat standar dan secara umum untuk proses pembuatan standar.
user827992
Ini pengalaman saya bahwa modul dinonaktifkan untuk Linux tertanam, karena alasan kecepatan dan ukuran, dan bahwa kernel untuk perangkat tersebut sering mengandung driver out-of-tree dan dibangun pada beberapa PC karyawan acak tanpa manfaat dari kontrol sumber. Semoga beruntung dengan itu.
Stephen M. Webb
0

Lihat isi file / lib / modules / $ (uname -r) /modules.builtin

mis. untuk mencari modul tertentu

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

Dokumentasi / 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.
Andrew
sumber
??? Tidak yakin apa yang seharusnya dilakukan OP. Apakah dia seharusnya menjalankan baris pertama di terminal? Ini bisa menjadi jawabannya, tetapi bisakah Anda sedikit menjelaskan?
anonymous2
0
ls /sys/module

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 /bootatau /proc/config.gz.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber