Mereka tidak dimuat secara otomatis saat start-up atau waktu lainnya, meskipun banyak dari mereka akhirnya dimuat saat boot. Ada tiga mekanisme berbeda yang menyebabkan hal ini terjadi:
-
Permintaan ruang pengguna: Yang mencakup semuanya, mulai dari layanan init hingga udev hingga baris perintah. Init atau udev mungkin merupakan cara yang paling mudah jika Anda ingin memuat modul tertentu saat boot.
-
Perangkat hotplug: Saat Anda menyambungkan sesuatu ke, misalnya, USB atau PCI, kernel mendeteksi ini dan meminta modul yang sesuai berdasarkan cara perangkat mengidentifikasi dirinya sendiri.
-
Protokol yang dibutuhkan atau penerapan lainnya :Ketika kernel perlu melakukan sesuatu, seperti membaca sistem file, dan menemukan kekurangan pengetahuan untuk melakukannya, kernel akan meminta modul.
Perhatikan bahwa untuk dua yang terakhir saya menggunakan frase "request a module" -- ini karena kernel benar-benar dimuat melalui daemon userspace, kmod
yang mengeksekusi /sbin/modprobe
. Menurut Wolfgang Mauerer dalam Linux Kernel Architecture , hanya ada ~100 poin berbeda di kernel 2.6 yang memanggil request_module()
internal fungsi.
modprobe
menggunakan database MODULE_ALIAS yang diinstal. Ini ditentukan dalam kode sumber modul secara eksplisit, atau diturunkan dari MODULE_DEVICE_TABLE, yang merupakan daftar ID perangkat OEM yang dilayani modul.
Banyak sistem diatur untuk menggunakan initrd atau initramfs. Ini adalah image sistem file yang dimuat oleh bootloader dan tersedia untuk kernel sebelum me-mount partisi root. Hal ini memungkinkan driver yang diperlukan untuk me-mount partisi root (driver disk, driver sistem file, pemetaan perangkat atau driver volume logis, …) untuk dikompilasi sebagai modul dan dimuat dari initrd/initramfs.
Skrip startup pada initrd (/linuxrc
) atau initramfs (/init
) biasanya memuat beberapa modul dan menempatkan sistem file root. Setiap distribusi memiliki pengaturannya sendiri. Ubuntu menggunakan initramfs yang dirakit dari komponen di initramfs-tools
paket dan dibuat ulang untuk setiap kernel berdasarkan driver yang diperlukan untuk me-mount sistem file root.
Setelah sistem file root dipasang, selama boot sistem, modul terdaftar di /etc/modules
(Debian, …) atau /etc/modules.conf
(Red Hat, Arch, …) dimuat. File ini biasanya mencantumkan beberapa modul jika ada. Sebagian besar modul dimuat sesuai permintaan.
Saat kernel mendeteksi beberapa perangkat keras yang tidak memiliki driver, atau komponen tertentu lainnya seperti protokol jaringan atau algoritme kriptografi, kernel akan memanggil /sbin/modprobe
untuk memuat modul. Untuk driver perangkat keras, kernel memberikan nama yang menyandikan id PCI, id USB, atau penunjukan sistematis perangkat keras lainnya. Ada tabel di /lib/modules/$VERSION/modules.alias
yang memetakan penunjukan sistematis ini ke nama modul. Tabel ini dihasilkan oleh depmod
dan dibaca oleh modprobe
.
Jika Anda memiliki modul kernel tambahan yang Anda kompilasi secara manual untuk perangkat keras, masukkan ke dalam /lib/modules/$VERSION/local
(buat local
subdirektori jika tidak ada) dan jalankan depmod -a
untuk membuat ulang database alias. Jika modul untuk beberapa fitur tidak biasa yang tidak dapat dideteksi oleh kernel secara otomatis, masukkan ke dalam /lib/modules/$VERSION/local
, jalankan depmod -a
untuk menganalisis dependensinya, dan tambahkan nama modul ke /etc/modules
.