ค้นหาเว็บไซต์

วิธีโหลดและยกเลิกการโหลดโมดูลเคอร์เนลใน Linux


โมดูลเคอร์เนลคือโปรแกรมที่สามารถโหลดเข้าหรือยกเลิกการโหลดจากเคอร์เนลได้ตามความต้องการ โดยไม่จำเป็นต้องคอมไพล์ใหม่ (เคอร์เนล) หรือรีบูตระบบ และมีจุดมุ่งหมายเพื่อปรับปรุงการทำงานของเคอร์เนล

ในแง่ซอฟต์แวร์โดยทั่วไป โมดูลจะเหมือนกับปลั๊กอินของซอฟต์แวร์ เช่น WordPress ไม่มากก็น้อย ปลั๊กอินให้วิธีการขยายฟังก์ชันการทำงานของซอฟต์แวร์ หากไม่มีปลั๊กอินเหล่านี้ นักพัฒนาจะต้องสร้างซอฟต์แวร์ขนาดใหญ่ตัวเดียวที่มีฟังก์ชันทั้งหมดรวมอยู่ในแพ็คเกจ หากจำเป็นต้องมีฟังก์ชันการทำงานใหม่ จะต้องเพิ่มฟังก์ชันเหล่านั้นลงในซอฟต์แวร์เวอร์ชันใหม่

ในทำนองเดียวกันหากไม่มีโมดูล เคอร์เนลจะต้องถูกสร้างขึ้นโดยมีฟังก์ชันการทำงานทั้งหมดที่รวมอยู่ในอิมเมจเคอร์เนลโดยตรง นี่หมายถึงการมีเคอร์เนลที่ใหญ่กว่า และผู้ดูแลระบบจะต้องคอมไพล์เคอร์เนลใหม่ทุกครั้งที่ต้องการฟังก์ชันใหม่

ตัวอย่างง่ายๆ ของโมดูลคือไดรเวอร์อุปกรณ์ ซึ่งช่วยให้เคอร์เนลเข้าถึงส่วนประกอบฮาร์ดแวร์/อุปกรณ์ที่เชื่อมต่อกับระบบ

การอ่านที่แนะนำ: จะทราบได้อย่างไรว่าคุณกำลังใช้งาน Linux เวอร์ชันใดอยู่

แสดงรายการโมดูลเคอร์เนลที่โหลดทั้งหมดใน Linux

ใน Linux โมดูลทั้งหมดจะลงท้ายด้วยส่วนขยาย .ko และโดยปกติโมดูลจะถูกโหลดโดยอัตโนมัติเมื่อตรวจพบฮาร์ดแวร์เมื่อบูตระบบ อย่างไรก็ตาม ผู้ดูแลระบบสามารถจัดการโมดูลโดยใช้คำสั่งบางอย่างได้

ในการแสดงรายการโมดูลที่โหลดในปัจจุบันทั้งหมดใน Linux เราสามารถใช้คำสั่ง lsmod (list modules) ซึ่งจะอ่านเนื้อหาของ /proc/modules เช่นนี้

lsmod
Module                  Size  Used by
rfcomm                 69632  2
pci_stub               16384  1
vboxpci                24576  0
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               454656  3 vboxnetadp,vboxnetflt,vboxpci
bnep                   20480  2
rtsx_usb_ms            20480  0
memstick               20480  1 rtsx_usb_ms
btusb                  45056  0
uvcvideo               90112  0
btrtl                  16384  1 btusb
btbcm                  16384  1 btusb
videobuf2_vmalloc      16384  1 uvcvideo
btintel                16384  1 btusb
videobuf2_memops       16384  1 videobuf2_vmalloc
bluetooth             520192  29 bnep,btbcm,btrtl,btusb,rfcomm,btintel
videobuf2_v4l2         28672  1 uvcvideo
videobuf2_core         36864  2 uvcvideo,videobuf2_v4l2
v4l2_common            16384  1 videobuf2_v4l2
videodev              176128  4 uvcvideo,v4l2_common,videobuf2_core,videobuf2_v4l2
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0
media                  24576  2 uvcvideo,videodev
....

วิธีโหลดและยกเลิกการโหลด (ลบ) โมดูลเคอร์เนลใน Linux

หากต้องการโหลดโมดูลเคอร์เนล เราสามารถใช้คำสั่ง insmod (insert module) ที่นี่ เราต้องระบุเส้นทางแบบเต็มของโมดูล คำสั่งด้านล่างจะแทรกโมดูล speedstep-lib.ko

insmod /lib/modules/4.4.0-21-generic/kernel/drivers/cpufreq/speedstep-lib.ko 

หากต้องการยกเลิกการโหลดโมดูลเคอร์เนล เราใช้คำสั่ง rmmod (ลบโมดูล) ตัวอย่างต่อไปนี้จะยกเลิกการโหลดหรือลบโมดูล speedstep-lib.ko

rmmod /lib/modules/4.4.0-21-generic/kernel/drivers/cpufreq/speedstep-lib.ko 

วิธีจัดการโมดูลเคอร์เนลโดยใช้คำสั่ง modprobe

modprobe เป็นคำสั่งอัจฉริยะสำหรับการแสดงรายการ การแทรก และการถอดโมดูลออกจากเคอร์เนล โดยจะค้นหาในไดเร็กทอรีโมดูล /lib/modules/$ (uname -r) สำหรับโมดูลทั้งหมดและไฟล์ที่เกี่ยวข้อง แต่จะไม่รวมไฟล์การกำหนดค่าอื่นใน /etc/modprobe.d ไดเรกทอรี

ที่นี่คุณไม่จำเป็นต้องมีเส้นทางที่แน่นอนของโมดูล นี่คือข้อดีของการใช้ modprobe เหนือคำสั่งก่อนหน้า

หากต้องการแทรกโมดูล เพียงระบุชื่อดังต่อไปนี้

modprobe speedstep-lib

หากต้องการลบโมดูลออก ให้ใช้แฟล็ก -r เช่นนี้

modprobe -r speedstep-lib

หมายเหตุ: ภายใต้ modprobe จะมีการแปลงขีดล่างอัตโนมัติ ดังนั้นจึงไม่มีความแตกต่างระหว่าง _ และ ในขณะที่ ป้อนชื่อโมดูล

สำหรับข้อมูลการใช้งานและตัวเลือกเพิ่มเติม โปรดอ่านหน้า modprobe man

man modprobe

อย่าลืมตรวจสอบ:

  1. วิธีการเปลี่ยนพารามิเตอร์รันไทม์เคอร์เนลในลักษณะถาวรและไม่ถาวร
  2. วิธีติดตั้งหรืออัปเกรดเป็นเคอร์เนลเวอร์ชันล่าสุดใน CentOS 7
  3. วิธีอัปเกรดเคอร์เนลเป็นเวอร์ชันล่าสุดใน Ubuntu

นั่นคือทั้งหมดที่สำหรับตอนนี้! คุณมีแนวคิดที่เป็นประโยชน์ใดๆ ที่คุณต้องการให้เราเพิ่มลงในคู่มือนี้หรือข้อสงสัย โปรดใช้แบบฟอร์มคำติชมด้านล่างเพื่อส่งมาให้เรา