มีความแตกต่างระหว่าง insmod และ modprobe หรือไม่?
มีความแตกต่างระหว่าง insmod และ modprobe หรือไม่?
คำตอบ:
ต่อman insmod:
ผู้ใช้ส่วนใหญ่จะต้องการใช้ modprobe แทนซึ่งฉลาดกว่าและสามารถรองรับการพึ่งพาโมดูลได้
modprobeอ่านโมดูลจาก/lib/modules/$(uname -r)/modules.dep.bin(หรือไม่มี.binส่วนต่อท้ายหากไฟล์อื่นไม่พร้อมใช้งาน) จากไฟล์เดียวกันโหลดขึ้นต่อกัน
modprobeยอมรับชื่อ.koไฟล์ใน/lib/modules/$(uname -r)(เช่นnvidia-currentสำหรับไฟล์dkms/nvidia-current.ko) และชื่อแทน ( modules.alias.bin) Builtins ( modules.alias.bin) ได้รับการยอมรับเช่นกัน แต่เนื่องจากโมดูลเหล่านี้ถูกโหลดตามค่าเริ่มต้นจึงไม่มีประเด็นในการดัดแปลงโมดูลประเภทนี้
insmodในอีกทางหนึ่งยอมรับเส้นทางไปยังไฟล์ โมดูลไม่จำเป็นต้องอยู่ใน/lib/modules/$(uname -r)แต่การอ้างอิงจะไม่ถูกโหลดโดยอัตโนมัติ นี่เป็นโปรแกรมที่ต่ำกว่าที่ใช้modprobeเพื่อโหลดโมดูล
โปรแกรมอื่น ๆ ที่เกี่ยวข้องกับโมดูลและrmmodmodinfo
rmmod/proc/modulesเอาชื่อเคอร์เนลตามชื่อจาก ชื่อนี้ไม่จำเป็นต้องเหมือนกับชื่อที่ส่งไปยังmodprobe(สำหรับnvidia-currentไฟล์nvidiaตัวอย่างเช่นนี้)
modinfoยอมรับชื่อไฟล์หรือชื่อไฟล์โดยไม่ต้องต่อท้ายใน.ko/lib/modules/$(uname -r)
modprobeเป็นคำสั่งอัจฉริยะมันมองหาการอ้างอิงในขณะที่โหลดโมดูล สมมติว่าถ้าฉันโหลดโมดูลซึ่งมีสัญลักษณ์ที่กำหนดไว้ในโมดูลอื่น ๆ (เส้นทางโมดูลนี้จะได้รับภายในโมดูลหลัก) ดังนั้นmodprobeโหลดโมดูลหลักและโมดูลที่ต้องพึ่งพา
แต่ถ้าจะใช้ก็จะไม่สามารถโหลดพึ่งพาและด้วยเหตุนี้มันจะทำให้เกิดข้อผิดพลาดเช่นการรวบรวมinsmod Unresolved symbolsในกรณีนี้เราต้องค้นหาโมดูลที่ต้องพึ่งพาและต้องโหลดมันด้วยตนเองเพื่อแก้ไขข้อผิดพลาด
ยูทิลิตี้ modprobe มีค่าพูดถึงอย่างรวดเร็ว modprobe เช่น insmod โหลดโมเดอเรเตอร์ในเคอร์เนล มันแตกต่างกันในการที่จะดูโมดูลที่จะโหลดเพื่อดูว่ามันอ้างอิงสัญลักษณ์ใด ๆ ที่ไม่ได้กำหนดไว้ในเคอร์เนลในปัจจุบัน หากพบการอ้างอิงดังกล่าว modprobe จะค้นหาโมดูลอื่น ๆ ในเส้นทางการค้นหาโมดูลปัจจุบันที่กำหนดสัญลักษณ์ที่เกี่ยวข้อง เมื่อ modprobe พบโมดูลเหล่านั้น (ซึ่งจำเป็นสำหรับโมดูลที่กำลังโหลด) มันจะโหลดมันลงในเคอร์เนลเช่นกัน หากคุณใช้ insmod ในสถานการณ์นี้แทนคำสั่งจะล้มเหลวด้วยข้อความ“ สัญลักษณ์ที่ไม่ได้รับการแก้ไข” ที่ทิ้งไว้ในล็อกไฟล์ของระบบ