Skip to content

Kernel modullari

Linux kernel monolit bo'lsa-da, uning ko'p qismi — ayniqsa apparat drayverlari — alohida, kerak bo'lganda yuklanadigan modullar shaklida ishlaydi. Bu tufayli har bir mumkin bo'lgan qurilma uchun drayverni doim xotirada saqlash shart emas: modul faqat mos apparat topilganda yoki foydalanuvchi so'raganda yuklanadi.

Bu maqola boot jarayoni va GRUB davomi — kernel yuklangandan keyin uning ichki tarkibi qanday boshqarilishini ko'rsatadi.

O'quv maqsadlari

Maqolani tugatgach:

  • kernel moduli nima ekanini va nega alohida fayl sifatida saqlanishini tushunasiz;
  • lsmod bilan joriy yuklangan modullar ro'yxatini o'qiy olasiz;
  • modprobe va insmod/rmmod orasidagi farqni bilasiz;
  • modulni doimiy yuklash yoki bloklashni sozlay olasiz;
  • modul bilan bog'liq muammoni dmesg va modinfo yordamida diagnostika qila olasiz.

Modul nima

Kernel moduli — .ko (kernel object) kengaytmali fayl bo'lib, kernelga ishlayotgan holatda qo'shilishi yoki undan olib tashlanishi mumkin. Tarmoq kartasi drayveri, fayl tizimi implementatsiyasi (masalan, vfat, nfs) yoki virtualizatsiya komponenti (kvm) — bularning aksariyati modul sifatida taqdim etiladi.

find /lib/modules/$(uname -r) -name '*.ko*' | head -n 5

Bu buyruq joriy kernel versiyasi uchun mavjud modul fayllaridan bir nechtasini ko'rsatadi. $(uname -r) joriy ishlayotgan kernel versiyasini qaytaradi — modullar aynan shu versiyaga mos katalogda saqlanadi.

Yuklangan modullarni ko'rish

lsmod

Namunaviy natija:

Module                  Size  Used by
nf_tables             233472  10
vfat                   20480  1
fat                    86016  1 vfat
  • Module — modul nomi;
  • Size — xotirada egallagan joyi;
  • Used by — modulga bog'liq bo'lgan boshqa modullar yoki jarayonlar soni va nomi. fat ustunidagi 1 vfatvfat moduli fat ga bog'liq ekanini bildiradi, ya'ni fat ni avval olib tashlab bo'lmaydi.

Muayyan modul haqida batafsil:

modinfo vfat

modinfo modul fayli qayerdaligini, versiyasini, bog'liqliklarini va qo'llab-quvvatlanadigan parametrlarini ko'rsatadi — hech narsani yuklamaydi yoki o'zgartirmaydi, shuning uchun xavfsiz tekshiruv vositasi.

Modulni yuklash: modprobe vs insmod

Buyruq Nima qiladi Bog'liqliklarni hisobga oladimi
modprobe <nom> Modulni nomi bo'yicha topib yuklaydi Ha — kerakli bog'liq modullarni ham avtomatik yuklaydi
insmod <yo'l>.ko Aniq fayl yo'lidan modulni to'g'ridan-to'g'ri yuklaydi Yo'q — bog'liq modul oldindan yuklanmagan bo'lsa xato beradi

Amalda deyarli har doim modprobe ishlatiladi, chunki u /lib/modules/$(uname -r)/modules.dep faylidagi bog'liqlik ro'yxatiga qarab kerakli barcha modullarni to'g'ri tartibda yuklaydi.

sudo modprobe vfat
lsmod | grep vfat

insmod odatda faqat aniq bitta .ko faylni sinash kerak bo'lgan maxsus holatlarda (masalan, yangi drayverni test qilishda) ishlatiladi.

Modulni olib tashlash

sudo modprobe -r vfat

yoki

sudo rmmod vfat

modprobe -r modulni va unga endi hech kim muhtoj bo'lmagan bog'liq modullarni ham birga olib tashlashga urinadi. rmmod faqat ko'rsatilgan modulni olib tashlaydi.

Warning

Faol ishlatilayotgan modulni (masalan, mount qilingan fayl tizimi ishlatayotgan drayverni) olib tashlashga urinish "Module is in use" xatosini beradi yoki tizim barqarorligiga ta'sir qilishi mumkin. Avval lsmod dagi Used by ustunini tekshiring.

Modulni doimiy yuklash

Har bir boot vaqtida avtomatik yuklanishi kerak bo'lgan modul /etc/modules-load.d/ katalogidagi .conf faylga yoziladi:

echo "vfat" | sudo tee /etc/modules-load.d/vfat.conf

Bu — bitta modul nomini o'z ichiga olgan oddiy matn fayli. systemd-modules-load xizmati boot vaqtida shu kataloglarni o'qib, ro'yxatdagi modullarni yuklaydi.

Modulni bloklash (blacklist)

Ma'lum bir modulning avtomatik yuklanishini oldini olish kerak bo'lsa (masalan, mos kelmaydigan drayver muammo yaratayotganda), blacklist mexanizmi ishlatiladi:

echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf

Danger

Blacklist qilish modulni kernel darajasida taqiqlaydi, lekin allaqachon yuklangan modulni darhol olib tashlamaydi — bu faqat keyingi yuklashlarga ta'sir qiladi. Video yoki tarmoq drayverini blacklist qilishdan oldin, buning oqibatini (masalan, konsolga kirish yo'qolishi) tushunib oling; production serverda bunday o'zgarishni faqat konsolga muqobil kirish yo'li (masalan, IPMI) mavjud bo'lganda sinab ko'ring.

O'zgarishdan keyin initramfs ni yangilash kerak bo'lishi mumkin (ba'zi modullar initramfs ichiga oldindan kiritilgan bo'ladi):

sudo update-initramfs -u

Modul bilan bog'liq muammoni diagnostika qilish

sudo modprobe vfat
dmesg | tail -n 20

dmesg kernel xabarlar bufferini ko'rsatadi — modul yuklanishida xatolik yuz bersa (masalan, apparat topilmadi yoki versiya mos kelmadi), sabab odatda shu yerda ko'rinadi.

Muayyan modul haqidagi kernel xabarlarini filtrlash:

dmesg | grep -i vfat

Ko'p uchraydigan xatolar

insmod bilan modprobe o'rniga foydalanish

insmod bog'liqliklarni hisobga olmaydi. Modul boshqa modulga tayansa, insmod "unknown symbol" xatosi bilan muvaffaqiyatsiz tugaydi. Oddiy holatlarda har doim modprobe ishlatilishi kerak.

Used by ustunini tekshirmasdan modulni olib tashlash

Boshqa modul yoki faol mount unga bog'liq bo'lsa, olib tashlash xato beradi yoki, ba'zi hollarda, kutilmagan xatti-harakatga olib kelishi mumkin.

Blacklist qilingandan keyin modul hamon yuklanib turishi

Modul allaqachon initramfs ichiga kiritilgan bo'lishi mumkin. Bunday holatda faqat /etc/modprobe.d/ ga yozish yetarli emas — update-initramfs -u ham kerak.

Amaliy mashqlar

  1. lsmod natijasidan uchta modulni tanlang va har biri uchun modinfo bilan tavsifi va bog'liqliklarini toping.
  2. Disposable VM'da zararsiz modulni (masalan, vfat) modprobe -r bilan olib tashlang, lsmod bilan tasdiqlang, so'ng qayta modprobe bilan yuklang.
  3. /etc/modules-load.d/ ichida shu modul uchun doimiy yuklash faylini yarating va reboot'dan so'ng lsmod bilan tekshiring (faqat test VM'da).
  4. dmesg chiqishida "module" so'zi bilan bog'liq oxirgi xabarlarni toping va ular qaysi modulga tegishli ekanini aniqlang.

Xulosa

Kernel modullari drayver va fayl tizimi kabi funksionallikni kernelga ishlayotgan holatda qo'shish yoki olib tashlash imkonini beradi. lsmod joriy holatni, modinfo modul haqidagi ma'lumotni ko'rsatadi; modprobe bog'liqliklarni hisobga olib yuklaydi/olib tashlaydi, insmod/rmmod esa aniq faylga to'g'ridan-to'g'ri ishlaydi. Doimiy yuklash /etc/modules-load.d/, bloklash esa /etc/modprobe.d/ orqali sozlanadi. Tizim yuklanishi bilan bog'liq jiddiyroq muammolar uchun keyingi rescue va emergency mode maqolasiga qarang.

Manbalar