ทั้งหมดเกี่ยวกับคำสั่ง Linux/Unix: modprobe
NS เคอร์เนลลินุกซ์ ได้เติบโตเป็นซอฟต์แวร์ชิ้นใหญ่ ในบางแง่นั่นเป็นสิ่งที่ดี อย่างอื่นทำให้ไม่ยืดหยุ่นบ้าง วิธีแก้ไขคือแบ่งส่วนต่างๆ ของเคอร์เนลออกเป็นโมดูล โมดูลเหล่านี้สามารถโหลดได้หรือไม่ก็ได้ ขึ้นอยู่กับการกำหนดค่าของคอมพิวเตอร์และความต้องการของคุณ คำสั่ง modprobe โหลดโมดูลเคอร์เนลใหม่บนระบบ Linux ช่วยให้คุณสามารถเปิดใช้งานคุณลักษณะใหม่และการสนับสนุนโดยไม่ต้องรีบูต

การใช้ Modprobe
Modprobe มักจะใช้งานง่าย เมื่อคุณทราบโมดูลเคอร์เนลที่คุณต้องการโหลดแล้ว ให้ส่งต่อไปยังคำสั่ง modprobe
sudo modprobe rtl8723de
นั่นคือทั้งหมดที่มีให้ โมดูลถูกโหลดจนกว่าคุณจะรีบูตระบบ
หากคุณต้องการลบโมดูลโดยไม่ต้องรีบูต ให้รันคำสั่งอีกครั้งด้วยปุ่ม -NS ธง.
sudo modprobe -r rtl8723de
โดยส่วนใหญ่ นี่คือวิธีที่คุณจะทำงานกับ modprobe หากต้องการข้อมูลเพิ่มเติม โปรดดูเอกสารทางเทคนิคด้านล่าง
เอกสารทางเทคนิค Modprobe
คำสั่ง modprobe ดำเนินการจัดการโมดูลที่โหลดได้ในระดับสูง
เรื่องย่อ
modprobe [-adnqv] [-C config] โมดูล [สัญลักษณ์=ค่า ...] modprobe [-adnqv] [-C config] [-NS พิมพ์] ลวดลาย
ตัวเลือก
-NS, --ทั้งหมด
โหลดโมดูลที่ตรงกันทั้งหมดแทนที่จะหยุดหลังจากโหลดสำเร็จครั้งแรก
-ค, --showconfig
แสดงการกำหนดค่าที่ใช้อยู่ในปัจจุบัน
-ค, --configconfig
ใช้ไฟล์ config แทน (ตัวเลือก) /etc/modules.conf เพื่อระบุการกำหนดค่า ตัวแปรสภาพแวดล้อม MODULECONF สามารถใช้เพื่อเลือก (และแทนที่) ไฟล์การกำหนดค่าอื่นจากค่าเริ่มต้น /etc/modules.conf (หรือ /etc/conf.modules ซึ่งเลิกใช้แล้ว)
เมื่อสภาพแวดล้อมแปรผัน UNAME_MACHINE ถูกตั้งค่าแล้ว modutils ใช้ค่าของมันแทนฟิลด์เครื่องจาก uname() syscall ส่วนใหญ่จะใช้เมื่อคอมไพล์โมดูล 64 บิตในพื้นที่ผู้ใช้ 32 บิตหรือในทางกลับกัน ตั้งค่า UNAME_MACHINE ถึงประเภทของโมดูล modutils ปัจจุบันไม่รองรับโหมด cross-build แบบเต็มสำหรับโมดูล มันจำกัดให้เลือกระหว่าง 32 บิตและ 64 บิต เวอร์ชันของสถาปัตยกรรมโฮสต์
-NS, --debug
แสดงข้อมูลเกี่ยวกับการแสดงภายในของสแต็กของโมดูล
-ชม, --ช่วย
แสดงสรุปตัวเลือกและออกทันที
-k, --ทำความสะอาดอัตโนมัติ
ตั้งค่า autoclean บนโมดูลที่โหลด ใช้โดยเคอร์เนลเมื่อเรียกใช้ modprobe เพื่อตอบสนองคุณสมบัติที่ขาดหายไป (จัดมาให้เป็นโมดูล) NS -NS ตัวเลือกมีนัยโดย -k. ตัวเลือกเหล่านี้จะถูกส่งไปยัง insmod โดยอัตโนมัติ
-NS, --แสดง
ไม่ดำเนินการ แสดงเฉพาะสิ่งที่จะทำ
-NS, --เงียบ
อย่าบ่นว่า insmod ล้มเหลวในการติดตั้งโมดูล ดำเนินการต่อตามปกติ แต่เงียบ โดยมีความเป็นไปได้อื่นๆ ที่ modprobe จะทดสอบ ตัวเลือกนี้จะถูกส่งไปยัง insmod โดยอัตโนมัติ
-NS, --ลบ
ลบโมดูล (สแต็ค) หรือทำความสะอาดอัตโนมัติ ขึ้นอยู่กับว่ามีโมดูลใดบ้างที่กล่าวถึงในบรรทัดคำสั่ง
-NS, --syslog
รายงานผ่าน syslog แทน stderr ตัวเลือกนี้จะถูกส่งไปยัง insmod โดยอัตโนมัติ
-NSประเภทโมดูล; --พิมพ์ประเภทโมดูล
พิจารณาเฉพาะโมดูลประเภทนี้เท่านั้น modprobe จะดูเฉพาะโมดูลที่มีเส้นทางไดเรกทอรีรวมอยู่เท่านั้น /moduletype/. ประเภทโมดูล สามารถใส่ชื่อไดเร็กทอรีได้มากกว่าหนึ่งชื่อ ตัวอย่างเช่น -NSไดรเวอร์/net แสดงรายการโมดูลใน xxx/driver/net/ และไดเรกทอรีย่อย
-v, --verbose
พิมพ์คำสั่งทั้งหมดในขณะที่ดำเนินการ
-V, --เวอร์ชั่น
แสดงเวอร์ชันของ modprobe
ชื่อโมดูลต้องไม่มีเส้นทาง (no /) หรือชื่อต้องไม่ต่อท้าย .o. ตัวอย่างเช่น, ลื่น เป็นชื่อโมดูลที่ถูกต้องสำหรับ modprobe, /lib/modules/2.2.19/net/slip และ slip.o ไม่ถูกต้อง สิ่งนี้ใช้กับบรรทัดคำสั่งและรายการในการกำหนดค่า
คำอธิบายของคำสั่ง
โปรแกรมอรรถประโยชน์ modprobe และ depmod มีวัตถุประสงค์เพื่อทำให้เคอร์เนลโมดูลาร์ของ Linux สามารถจัดการได้มากขึ้นสำหรับผู้ใช้ ผู้ดูแลระบบ และผู้ดูแลการกระจาย
Modprobe ใช้ไฟล์การพึ่งพา Makefile ซึ่งสร้างโดย depmod เพื่อโหลดโมดูลที่เกี่ยวข้องโดยอัตโนมัติจากชุดของโมดูลที่มีอยู่ในแผนผังไดเร็กทอรีที่กำหนดไว้ล่วงหน้า
Modprobe ใช้เพื่อโหลดโมดูลเดียว สแต็คของโมดูลที่ขึ้นต่อกัน หรือโมดูลทั้งหมดที่ทำเครื่องหมายด้วยแท็กที่ระบุ
Modprobe จะโหลดโมดูลพื้นฐานทั้งหมดที่จำเป็นในโมดูลสแต็กโดยอัตโนมัติ ตามที่อธิบายไว้ในไฟล์การพึ่งพา modules.dep. หากการโหลดหนึ่งในโมดูลเหล่านี้ล้มเหลว สแต็คปัจจุบันทั้งหมดของโมดูลที่โหลดในเซสชันปัจจุบันจะถูกยกเลิกการโหลดโดยอัตโนมัติ
Modprobe มีสองวิธีในการโหลดโมดูล วิธีหนึ่ง (โหมดโพรบ) จะพยายามโหลดโมดูลออกจากรายการ (กำหนดโดย ลวดลาย). Modprobe หยุดโหลดทันทีที่โหลดโมดูลหนึ่งสำเร็จ สามารถใช้เพื่อโหลดไดรเวอร์อีเทอร์เน็ตหนึ่งตัวออกจากรายการโดยอัตโนมัติ อีกวิธีหนึ่งที่สามารถใช้ modprobe ได้คือการโหลดโมดูลทั้งหมดจากรายการ
ด้วยตัวเลือก -NS, modprobe จะยกเลิกการโหลดโมดูลโดยอัตโนมัติ คล้ายกับวิธีการ rmmod -r ทำ. ใช้เท่านั้น modprobe -r ล้างโมดูลที่โหลดอัตโนมัติที่ไม่ได้ใช้และยังดำเนินการคำสั่งก่อนและหลังการลบในไฟล์การกำหนดค่า /etc/modules.conf.
ผสมผสานตัวเลือก -l และ -NS แสดงรายการโมดูลที่มีอยู่ทั้งหมดบางประเภท
ตัวเลือก -ค พิมพ์การกำหนดค่าที่ใช้อยู่ในปัจจุบัน (ค่าเริ่มต้น + ไฟล์การกำหนดค่า)
การกำหนดค่า
พฤติกรรมของ modprobe (และ depmod) สามารถแก้ไขได้โดยไฟล์การกำหนดค่า (เป็นทางเลือก) /etc/modules.conf. สำหรับคำอธิบายโดยละเอียดเกี่ยวกับสิ่งที่ไฟล์นี้สามารถมีได้ รวมถึงการกำหนดค่าเริ่มต้นที่ใช้โดย depmod และ modprobe โปรดดูที่ modules.conf(5).
คำสั่งก่อนและหลังการลบจะไม่ถูกดำเนินการหากโมดูลได้รับการทำความสะอาดอัตโนมัติโดย kerneld มองหาการสนับสนุนที่กำลังจะมีขึ้นสำหรับการจัดเก็บโมดูลแบบถาวรแทน หากคุณต้องการใช้คุณลักษณะก่อนและหลังการติดตั้ง ให้ปิด autoclean สำหรับ kerneld และแทนที่ put บางอย่างเช่นบรรทัดต่อไปนี้ใน crontab (ใช้สำหรับระบบ kmod เช่นกัน) เพื่อทำการ autoclean ทุกๆ 2 นาที:
*/2 * * * * ทดสอบ -f /proc/modules && /sbin/modprobe -r
กลยุทธ์
แนวคิดก็คือว่า modprobe จะมีลักษณะเป็นอันดับแรกในไดเร็กทอรีที่มีโมดูลที่คอมไพล์สำหรับเคอร์เนลรุ่นปัจจุบัน หากไม่พบโมดูลที่นั่น modprobe จะค้นหาในไดเร็กทอรีทั่วไปของเวอร์ชันเคอร์เนล (เช่น 2.0, 2.2) หากยังไม่พบโมดูล modprobe จะค้นหาในไดเร็กทอรีที่มีโมดูลสำหรับรุ่นเริ่มต้น และอื่นๆ
เมื่อคุณติดตั้ง Linux ใหม่ โมดูลควรถูกย้ายไปยังไดเร็กทอรีที่เกี่ยวข้องกับรีลีส (และเวอร์ชัน) ของเคอร์เนลที่คุณกำลังติดตั้ง จากนั้นทำ symlink จากไดเร็กทอรีนี้ไปยังไดเร็กทอรีเริ่มต้น
ทุกครั้งที่คุณคอมไพล์เคอร์เนลใหม่ คำสั่ง ทำ modules_install สร้างไดเร็กทอรีใหม่ แต่จะไม่เปลี่ยนลิงค์เริ่มต้น
เมื่อคุณได้รับโมดูลที่ไม่เกี่ยวข้องกับการแจกจ่ายเคอร์เนล ให้วางไว้ในไดเร็กทอรีที่ไม่ขึ้นกับเวอร์ชันภายใต้ /lib/modules.
นี่คือกลยุทธ์เริ่มต้น ซึ่งสามารถแทนที่ได้ใน /etc/modules.conf.
ตัวอย่าง
modprobe -t net
โหลดหนึ่งในโมดูลที่เก็บไว้ในไดเร็กทอรีที่ติดแท็ก สุทธิ. แต่ละโมดูลจะถูกทดลองจนกว่าจะสำเร็จ
modprobe -a -t boot
โมดูลทั้งหมดที่เก็บไว้ในไดเร็กทอรีที่ติดแท็ก boot กำลังโหลด
modprobe ลื่น
นี้พยายามที่จะโหลดโมดูล slhc.o หากไม่ได้โหลดไว้ก่อนหน้านี้เนื่องจากโมดูลสลิปต้องการฟังก์ชันการทำงานในโมดูล slhc การพึ่งพานี้มีอธิบายไว้ในไฟล์ modules.dep ที่สร้างขึ้นโดยอัตโนมัติโดย depmod
modprobe -r สลิป
สิ่งนี้จะยกเลิกการโหลดโมดูลสลิป นอกจากนี้ยังยกเลิกการโหลดโมดูล slhc โดยอัตโนมัติ เว้นแต่จะใช้โดยโมดูลอื่นด้วยเช่นกัน (เช่น ppp)
ดูสิ่งนี้ด้วย: depmod(8), lsmod (8), kerneld (8), ksyms (8), rmmod(8).
โหมดปลอดภัย
หาก uid ที่มีประสิทธิภาพไม่เท่ากับ uid จริง modprobe จะดำเนินการกับอินพุตด้วยความสงสัยอย่างยิ่ง พารามิเตอร์สุดท้ายถือเป็นชื่อโมดูลเสมอ แม้ว่าจะขึ้นต้นด้วย -. มีได้เพียงหนึ่งชื่อโมดูลและตัวเลือกของแบบฟอร์ม ตัวแปร=ค่า เป็นสิ่งต้องห้าม ชื่อโมดูลจะถือเป็นสตริงเสมอ ไม่มีการขยายเมตาในเซฟโหมด อย่างไรก็ตาม การขยายเมตาจะใช้กับข้อมูลที่อ่านจากไฟล์ปรับแต่ง
euid อาจไม่เท่ากับ uid เมื่อ modprobe ถูกเรียกใช้จากเคอร์เนล สิ่งนี้เป็นจริงสำหรับ kernels 2.4.0-test11 และใหม่กว่า ในโลกอุดมคติ modprobe สามารถไว้วางใจเคอร์เนลให้ส่งผ่านพารามิเตอร์ที่ถูกต้องไปยัง modprobe เท่านั้น อย่างไรก็ตาม มีอย่างน้อยหนึ่งช่องโหว่ภายในเครื่องเกิดขึ้นเนื่องจากโค้ดเคอร์เนลระดับสูงส่งผ่านพารามิเตอร์ที่ไม่ได้รับการยืนยันโดยตรงจากผู้ใช้ไปยัง modprobe ดังนั้น modprobe จึงไม่เชื่อถืออินพุตเคอร์เนลอีกต่อไป
modprobe ตั้งค่าเซฟโหมดโดยอัตโนมัติเมื่อสภาพแวดล้อมประกอบด้วยสตริงเหล่านี้เท่านั้น
หน้าแรก=/
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
สิ่งนี้จะตรวจจับการดำเนินการ modprobe จากเคอร์เนลบนเคอร์เนล 2.2 แม้ว่า 2.4.0-test11 แม้ว่า uid == euid ซึ่งทำกับเมล็ดก่อนหน้า
คำสั่งการบันทึก
ถ้าไดเร็กทอรี /var/log/ksymoops มีอยู่และ modprobe ถูกเรียกใช้ด้วยตัวเลือกที่สามารถโหลดหรือลบโมดูล modprobe จะบันทึกคำสั่งและส่งคืนสถานะใน /var/log/ksymoops/'วันที่ +%Y%m%d.log'. ไม่มีสวิตช์ปิดการใช้งานการบันทึกอัตโนมัตินี้ หากคุณไม่ต้องการให้เกิดขึ้น อย่าสร้าง /var/log/ksymoops. หากมีไดเร็กทอรีนั้นอยู่ ไดเร็กทอรีนั้นควรเป็นเจ้าของโดยรูทและเป็นโหมด 644 หรือ 600 และคุณควรเรียกใช้ script insmod_ksymoops_clean ทุกวันหรือมากกว่านั้น
ยูทิลิตี้ที่จำเป็น
depmod (8), insmod (8).
ใช้ ชาย สั่งการ (% ชาย) เพื่อดูวิธีการใช้คำสั่งบนคอมพิวเตอร์ของคุณ