ทั้งหมดเกี่ยวกับคำสั่ง Linux/Unix: modprobe

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

แนวของสถาปนิกหนุ่มใช้แล็ปท็อปในสำนักงาน
รูปภาพ Westend61 / Getty

การใช้ Modprobe

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

sudo modprobe rtl8723de

นั่นคือทั้งหมดที่มีให้ โมดูลถูกโหลดจนกว่าคุณจะรีบูตระบบ

หากคุณต้องการลบโมดูลโดยไม่ต้องรีบูต ให้รันคำสั่งอีกครั้งด้วยปุ่ม -NS ธง.

sudo modprobe -r rtl8723de

โดยส่วนใหญ่ นี่คือวิธีที่คุณจะทำงานกับ modprobe หากต้องการข้อมูลเพิ่มเติม โปรดดูเอกสารทางเทคนิคด้านล่าง

เอกสารทางเทคนิค Modprobe

คำสั่ง modprobe ดำเนินการจัดการโมดูลที่โหลดได้ในระดับสูง

เรื่องย่อ

modprobe [-adnqv] [-C config] โมดูล [สัญลักษณ์=ค่า ...] modprobe [-adnqv] [-C config] [-NS พิมพ์] ลวดลาย 

modprobe -l [-C config] [-NS พิมพ์] ลวดลาย modprobe -c [-C configmodprobe -r [-dnv] [-C config] [โมดูล ...] modprobe -Vh.

ตัวเลือก

-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).

ใช้ ชาย สั่งการ (% ชาย) เพื่อดูวิธีการใช้คำสั่งบนคอมพิวเตอร์ของคุณ