วิธีโหลดและยกเลิกการโหลดโมดูลเคอร์เนลใน 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
อย่าลืมตรวจสอบ:
- วิธีการเปลี่ยนพารามิเตอร์รันไทม์เคอร์เนลในลักษณะถาวรและไม่ถาวร
- วิธีติดตั้งหรืออัปเกรดเป็นเคอร์เนลเวอร์ชันล่าสุดใน CentOS 7
- วิธีอัปเกรดเคอร์เนลเป็นเวอร์ชันล่าสุดใน Ubuntu
นั่นคือทั้งหมดที่สำหรับตอนนี้! คุณมีแนวคิดที่เป็นประโยชน์ใดๆ ที่คุณต้องการให้เราเพิ่มลงในคู่มือนี้หรือข้อสงสัย โปรดใช้แบบฟอร์มคำติชมด้านล่างเพื่อส่งมาให้เรา