GNU/Linux >> Belajar Linux >  >> Linux

Apa urutan memuat modul kernel linux saat startup? Bagaimana prioritas ditetapkan untuk mereka?

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 .


Linux
  1. Linux – Bagaimana Cara Menentukan Modul Yang Menodai Kernel?

  2. Apa perbedaan antara module_init dan init_module dalam modul kernel Linux?

  3. Apa sumber kernel Linux saat ini?

  1. Linux – Apa Cara Berbeda Untuk Mengatur Izin File Dll Di Gnu/linux?

  2. Linux – Bagaimana Cara Mengatur Afinitas Prosesor Suatu Proses Di Linux?

  3. Cara mengatur antarmuka jaringan yang disukai di linux

  1. Linux – Bagaimana Cara Memuat Ulang Modul Kernel dengan Benar?

  2. Bagaimana cara mengatur nama utas di Linux pthreads?

  3. Cara mengatur alamat IP dari C di linux