คำสั่ง Linux / Unix insmod ติดตั้งโมดูลที่สามารถโหลดได้ในเคอร์เนลที่รันinsmod พยายามเชื่อมโยงโมดูลกับเคอรเนตที่รันโดยการแกไขสัญลักษณทั้งหมดจากตารางสัญลักษณที่เอ็กซ์ปอร์ตของเคอรเนล
ถ้าชื่อไฟล์โมดูลได้รับโดยไม่มีไดเร็กทอรีหรือส่วนขยายinsmod จะค้นหาโมดูลในไดเร็กทอรีเริ่มต้นทั่วไปบางแห่ง ตัวแปรสภาพแวดล้อมMODPATH สามารถใช้แทนที่ค่าดีฟอลต์นี้ได้ หากไฟล์การกำหนดค่าโมดูลเช่น/etc/modules.conf มีอยู่จะแทนที่เส้นทางที่กำหนดไว้ในMODPATH.
ตัวแปรสภาพแวดล้อมMODULECONF นอกจากนี้ยังสามารถใช้เพื่อเลือกแฟ้มการกำหนดค่าอื่นจากค่าเริ่มต้น/etc/modules.conf (หรือ/etc/conf.modules (เลิก)) ตัวแปรสภาพแวดล้อมนี้จะแทนที่คำจำกัดความทั้งหมดข้างต้น
เมื่อตัวแปรสภาพแวดล้อมUNAME_MACHINE ตั้งค่า modutils จะใช้ค่าแทนฟิลด์ machine จาก unysame () syscall นี่คือส่วนใหญ่ของการใช้งานเมื่อคุณกำลังรวบรวมโมดูล 64 บิตในพื้นที่ผู้ใช้ 32 บิตหรือในทางกลับกันตั้งค่าUNAME_MACHINE ประเภทของโมดูล modutils ปัจจุบันไม่สนับสนุนโหมดการสร้างข้ามเต็มสำหรับโมดูลจะ จำกัด ให้เลือกระหว่างสถาปัตยกรรมโฮสต์รุ่น 32 บิตและ 64 บิต
ตัวเลือก
-e persist_name , --persist= persist_name
ระบุตำแหน่งที่จะอ่านข้อมูลแบบถาวรสำหรับโมดูลจากเมื่อโหลดและเขียนเมื่อมีการยกเลิกการโหลดโมดูลโมดูลนี้ ตัวเลือกนี้ถูกละเลยในกรณีที่โมดูลไม่มีข้อมูลถาวร ข้อมูลแบบถาวรจะอ่านได้โดยinsmod ถ้าตัวเลือกนี้มีอยู่โดยค่าเริ่มต้นinsmod ไม่ประมวลผลข้อมูลแบบถาวร
เป็นรูปแบบชวเลข,-e "" (สตริงที่ว่างเปล่า) ถูกตีความโดยinsmod เป็นค่าของpersistdir ตามที่กำหนดไว้ในmodules.confตามด้วยชื่อไฟล์ของโมดูลที่สัมพันธ์กับเส้นทางการค้นหาโมดูลที่ถูกพบในไม่ว่าจะเป็น ".gz", ".o" หรือ ".mod" ถ้าmodules.conf ระบุ "persistdir ="(กล่าวคือpersistdir เป็นช่องว่าง) แล้วรูปแบบชวเลขนี้จะละเว้นเงียบ (ดูmodules.conf (5).)
-f, --บังคับ
ลองโหลดโมดูลแม้ว่ารุ่นของเคอร์เนลที่ใช้งานอยู่และเวอร์ชันของเคอร์เนลที่โมดูลได้รวบรวมไว้ไม่ตรงกัน การดำเนินการนี้จะแทนที่การตรวจสอบเวอร์ชันของเคอร์เนลเท่านั้น แต่จะไม่มีผลต่อการตรวจสอบชื่อสัญลักษณ์ ถ้าสัญลักษณ์ชื่อในโมดูลไม่ตรงกับเคอร์เนลก็ไม่มีทางบังคับinsmod เพื่อโหลดโมดูล
-h, --ช่วยด้วย
แสดงสรุปตัวเลือกและออกจากระบบทันที
-k, --autoclean
ตั้งค่าแฟล็กอัตโนมัติในโมดูล ธงนี้จะใช้โดยkerneld(8) ถอดโมดูลที่ไม่ได้ใช้ออกไปในบางช่วงเวลา - โดยปกติใช้เวลาหนึ่งนาที
-L, --ล็อค
ใช้ฝูง(2) เพื่อป้องกันการโหลดพร้อมกันของโมดูลเดียวกัน
-m, --แผนที่
เอาต์พุตแผนที่โหลดบน stdout ทำให้ง่ายต่อการตรวจแก้จุดบกพร่องของโมดูลในกรณีที่เกิดความตื่นตระหนกของเคอร์เนล
-n, --ไม่โหลด
ทำงาน Dummy ทำทุกอย่างยกเว้นโหลดโมดูลลงในเคอร์เนล ถ้าต้องการโดย a-m หรือ-O, รันจะสร้างแผนที่หรือไฟล์หยด เนื่องจากไม่ได้โหลดโมดูลที่อยู่โหลดเคอร์เนลจริงจึงไม่เป็นที่รู้จักดังนั้นไฟล์แผนที่และไฟล์หยดจะขึ้นอยู่กับที่อยู่ที่โหลดโดยพลการของ 0x12340000
-o module_name , --ชื่อ= module_name
ระบุชื่อโมดูลอย่างชัดเจนมากกว่าการสืบทอดชื่อจากชื่อฐานของไฟล์ออบเจกต์ต้นทาง
-O blob_name , --หยด= blob_name
บันทึกวัตถุไบนารีใน blob_name . ผลลัพธ์คือไบนารีหยด (ไม่มีส่วนหัว ELF) แสดงสิ่งที่ถูกโหลดลงในเคอร์เนลหลังจากการจัดการและการย้ายส่วน ตัวเลือก-m ขอแนะนำให้หาแผนที่ของวัตถุ
-p, --probe
ตรวจสอบโมดูลเพื่อดูว่าสามารถโหลดได้สำเร็จหรือไม่ ซึ่งรวมถึงการค้นหาไฟล์อ็อบเจ็กต์ในพา ธ โมดูลตรวจสอบหมายเลขเวอร์ชันและสัญลักษณ์การแก้ปัญหา ไม่ตรวจสอบการโยกย้ายหรือไม่ก็สร้างแผนที่หรือไฟล์หยด
-P อุปสรรค , คำนำหน้า= อุปสรรค
ตัวเลือกนี้สามารถใช้ได้กับโมดูลที่มีการกำหนดรุ่นสำหรับ SMP หรือ bigmem kernel เนื่องจากโมดูลดังกล่าวมีคำนำหน้าเสริมในชื่อสัญลักษณ์ ถ้าเคอร์เนลถูกสร้างขึ้นด้วยสัญลักษณ์แล้วinsmod จะดึงคำนำหน้าจากคำจำกัดความของ "get_module_symbol" หรือ "inter_module_get" โดยอัตโนมัติซึ่งหนึ่งในนั้นจะต้องมีอยู่ในเคอร์เนลใด ๆ ที่สนับสนุนโมดูล ถ้าเคอร์เนลไม่มีรูปแบบสัญลักษณ์ แต่โมดูลถูกสร้างขึ้นด้วยรูปแบบสัญลักษณ์แล้วผู้ใช้ต้องจัดหา-P.
-q, --เงียบ
อย่าพิมพ์รายการสัญลักษณ์ที่ยังไม่ได้แก้ไข อย่าบ่นเกี่ยวกับเวอร์ชันที่ไม่ตรงกัน ปัญหาจะแสดงเฉพาะในสถานะการออกจากinsmod.
-r, --ราก
ผู้ใช้บางรายคอมไพล์โมดูลภายใต้ userid ที่ไม่ใช่ root จากนั้นติดตั้งโมดูลเป็น root กระบวนการนี้สามารถปล่อยให้โมดูลที่เป็นของ userid ที่ไม่ใช่ root ได้แม้ว่าไดเรกทอรี root จะเป็นของ root ก็ตาม หากผู้ใช้ที่ไม่ใช่ root ถูกบุกรุกผู้บุกรุกสามารถเขียนทับโมดูลที่มีอยู่ซึ่งเป็นของ userid และใช้การเปิดรับนี้เพื่อบูตระบบได้สูงสุด
โดยค่าเริ่มต้น modutils จะปฏิเสธความพยายามที่จะใช้โมดูลที่ไม่ได้เป็นของ root การระบุ -r จะสลับการตรวจสอบและอนุญาตให้ root โหลดโมดูลที่ไม่ได้เป็นของ root
บันทึก: ค่าดีฟอลต์สำหรับการตรวจสอบ root สามารถเปลี่ยนแปลงได้เมื่อกำหนดค่า modutilsการใช้ -r เพื่อปิดใช้งานการตรวจสอบ root หรือการตั้งค่าเริ่มต้นเป็น "no root check" ที่เวลากำหนดค่าคือการรักษาความปลอดภัยที่สำคัญและไม่แนะนำให้ใช้
-s, --syslog
ส่งข้อมูลทุกอย่างไปที่syslog(3) แทนขั้ว
-S, --kallsyms
บังคับให้โหลดโมดูลที่มีkallsyms แม้ว่าเคอร์เนลจะไม่รองรับก็ตาม ตัวเลือกนี้ใช้สำหรับระบบขนาดเล็กที่มีการโหลดเคอร์เนลโดยไม่มีkallsyms ข้อมูล แต่จำเป็นต้องใช้โมดูลที่เลือกkallsyms สำหรับการแก้จุดบกพร่อง ตัวเลือกนี้เป็นค่าดีฟอลต์สำหรับ Red Hat Linux
-v, --verbose
พูดอย่างละเอียด
-V, --version
แสดงเวอร์ชันของinsmod.
-X, --ส่งออก; -x, --noexport
ทำและไม่ส่งออกสัญลักษณ์ภายนอกของโมดูลทั้งหมดตามลำดับ ค่าดีฟอลต์คือสำหรับสัญลักษณ์ที่จะเอ็กซ์พอร์ต ตัวเลือกนี้จะมีผลเฉพาะในกรณีที่โมดูลไม่ได้ส่งออกตารางสัญลักษณ์ที่มีการควบคุมของตัวเองอย่างชัดเจนและจะเลิกใช้งาน
-Y, --ksymoops; -y, --noksymoops
ทำและอย่าเพิ่มksymoops สัญลักษณ์เพื่อ ksyms สัญลักษณ์เหล่านี้ใช้โดยksymoops เพื่อให้มีการดีบักที่ดีกว่าถ้ามีอ๊ะในโมดูลนี้ ค่าดีฟอลต์คือสำหรับksymoopsสัญลักษณ์ที่จะกำหนด ตัวเลือกนี้ไม่ขึ้นกับ-X/-x ตัวเลือก.
ksymoops สัญลักษณ์เพิ่มประมาณ 260 ไบต์ต่อโมดูลที่โหลด จนกว่าคุณจะสั้น ๆ เกี่ยวกับพื้นที่เคอร์เนลและกำลังพยายามลดขนาดของ ksyms ให้เหลือน้อยที่สุดให้ใช้ค่าดีฟอลต์และได้รับการแก้จุดบกพร่องอย่างแม่นยำมากขึ้นksymoops สัญลักษณ์จะต้องใช้เพื่อบันทึกข้อมูลโมดูลแบบถาวร
-N, --numeric เท่านั้น
ตรวจสอบเฉพาะส่วนที่เป็นตัวเลขของเวอร์ชันโมดูลกับเวอร์ชันเคอร์เนลเท่านั้นเช่นละเว้นคำสั่ง EXTRAVERSION เมื่อตัดสินใจว่าโมดูลเป็นของเคอร์เนลหรือไม่ ค่าสถานะนี้จะถูกกำหนดโดยอัตโนมัติสำหรับ kernel 2.5 เป็นต้นไปซึ่งจะเป็นทางเลือกสำหรับเคอร์เนลก่อนหน้านี้
พารามิเตอร์ของโมดูล
โมดูลบางโมดูลยอมรับพารามิเตอร์เวลาโหลดเพื่อกำหนดการทำงานของตนเอง พารามิเตอร์เหล่านี้มักเป็นพอร์ต I / O และหมายเลข IRQ ที่แตกต่างกันไปในแต่ละเครื่องและไม่สามารถระบุได้จากฮาร์ดแวร์
ในโมดูลที่สร้างขึ้นสำหรับเมล็ดพันธุ์ 2.0 ชุดสัญลักษณ์จำนวนเต็มหรือตัวอักษรใด ๆ อาจถือเป็นพารามิเตอร์และได้รับการแก้ไข เริ่มต้นในเมล็ด 2.1 ชุดสัญลักษณ์จะถูกทำเครื่องหมายอย่างชัดเจนว่าเป็นพารามิเตอร์เพื่อให้สามารถเปลี่ยนค่าเฉพาะได้ นอกจากนี้ยังมีข้อมูลประเภทสำหรับตรวจสอบค่าที่ให้ไว้เมื่อโหลด
ในกรณีของจำนวนเต็มค่าทั้งหมดอาจเป็นทศนิยม, เลขฐานแปดหรือเลขฐานสิบหก a la C: 17, 021 หรือ 0x11 องค์ประกอบอาร์เรย์ถูกระบุโดยคั่นด้วยเครื่องหมายจุลภาค องค์ประกอบสามารถข้ามได้โดยละเว้นค่า
ในโมดูลชุด 2.0 ค่าที่ไม่ได้ขึ้นต้นด้วยตัวเลขถือว่าเป็นสตริง เริ่มต้นใน 2.1 ข้อมูลประเภทของพารามิเตอร์จะระบุว่าจะตีความค่าเป็นสตริง หากค่าเริ่มต้นด้วยเครื่องหมายคำพูดสองครั้ง (') สตริงจะตีความเช่นเดียวกับใน C ลำดับหนีและทั้งหมด อย่าสังเกตว่าจากเชลล์พรอมต์คำพูดของตัวเองอาจต้องได้รับการปกป้องจากการตีความเปลือก
GPL Modensed Modules และสัญลักษณ์
เริ่มต้นด้วยเคอร์เนล 2.4.10 โมดูลควรมีสตริงลิขสิทธิ์ที่กำหนดโดยใช้MODULE_LICENSE (). หลายสายได้รับการยอมรับว่าเป็น GPL compatible; สายการอนุญาตใด ๆ หรือไม่มีใบอนุญาตเลยหมายความว่าโมดูลนี้ถือว่าเป็นกรรมสิทธิ์
ถ้าเคอร์เนลรองรับproc / sys / kernel / / ปนเปื้อน ธงแล้วinsmod จะหรือธงที่เสียด้วย '1' เมื่อโหลดโมดูลโดยไม่มีใบอนุญาต GPL มีการแจ้งเตือนหากเคอร์เนลสนับสนุนการสลบและโหลดโมดูลโดยไม่มีใบอนุญาต มีคำเตือนสำหรับโมดูลที่มี aMODULE_LICENSE () ที่ไม่รองรับ GPL แม้กระทั่งในเมล็ดที่เก่ากว่าที่ไม่สนับสนุนการทาลาย ซึ่งจะลดคำเตือนเมื่อมีการใช้ modutils ใหม่ในเมล็ดที่มีอายุมาก
insmod -f (บังคับ) หรือธงที่เสียด้วย '2' บนเมล็ดที่รองรับการสลบ มีการเตือนเสมอ
นักพัฒนาเคอร์เนลบางคนต้องการให้มีการส่งออกสัญลักษณ์ตามรหัสของตนโดยใช้โมดูลที่มีใบอนุญาต GPL สัญลักษณ์เหล่านี้จะถูกเอ็กซ์พอร์ตโดยEXPORT_SYMBOL_GPL แทนปกติEXPORT_SYMBOL. สัญลักษณ์ GPL ที่ส่งออกโดยเคอร์เนลและโมดูลอื่น ๆ จะปรากฏเฉพาะกับโมดูลที่มีสิทธิการใช้งาน GPL เท่านั้นสัญลักษณ์เหล่านี้จะปรากฏใน/ proc / ksyms ด้วยคำนำหน้าของ 'GPLONLY_'. insmod ละเว้นGPLONLY_ คำนำหน้าเกี่ยวกับสัญลักษณ์ในขณะที่โหลดโมดูลที่ได้รับอนุญาตของ GPL ดังนั้นโมดูลจึงหมายถึงชื่อสัญลักษณ์ปกติโดยไม่มีคำนำหน้า เฉพาะสัญลักษณ์ GPL ไม่สามารถใช้งานได้กับโมดูลที่ไม่มีใบอนุญาต GPL ซึ่งรวมถึงโมดูลที่ไม่มีใบอนุญาตเลย
การช่วยเหลือ Ksymoops
เพื่อช่วยในการแก้จุดบกพร่องของเคอร์เนลโอ๊ะเมื่อใช้โมดูลinsmod ค่าดีฟอลต์ในการเพิ่มสัญลักษณ์บางส่วนไปยัง ksyms ดูที่-Y ตัวเลือก สัญลักษณ์เหล่านี้เริ่มต้นด้วย__insmod_ modulename_ . modulename จะต้องทำให้สัญลักษณ์เป็นเอกลักษณ์ เป็นไปตามกฎหมายที่จะโหลดวัตถุเดียวกันมากกว่าหนึ่งครั้งภายใต้ชื่อโมดูลที่แตกต่างกัน ปัจจุบันสัญลักษณ์ที่กำหนดคือ:
__insmod_ modulename _ Oobjectfile _ Mmtime _ vVERSION
objectfile คือชื่อของไฟล์ที่โหลดจากวัตถุ เพื่อให้แน่ใจว่า ksymoops สามารถจับคู่รหัสกับวัตถุที่ถูกต้องได้ mtime คือการประทับเวลาล่าสุดที่แก้ไขในไฟล์นั้นในรูป hex, zero ถ้า stat ล้มเหลว รุ่น เป็นเวอร์ชั่นของเคอร์เนลที่โมดูลถูกคอมไพล์, -1 ถ้าไม่มีเวอร์ชั่นใด_O มีที่อยู่เริ่มต้นเหมือนกับส่วนหัวของโมดูล
__insmod_ modulename _ Ssectionname _ Llength
สัญลักษณ์นี้ปรากฏขึ้นเมื่อเริ่มต้นของส่วน ELF ที่เลือกอยู่ในปัจจุบัน .text, .rodata, .dat, .bss และ .sbss จะปรากฏเฉพาะในกรณีที่ส่วนนั้นมีขนาดที่ไม่ใช่ศูนย์ sectionname เป็นชื่อของส่วน ELF, ความยาว ความยาวของส่วนเป็นทศนิยม สัญลักษณ์เหล่านี้ช่วยให้ ksymoops map address ไปยังส่วนต่างๆเมื่อไม่มีสัญลักษณ์ใด ๆ
__insmod_ modulename _Ppersistent_ ชื่อไฟล์
สร้างโดยinsmod ถ้าโมดูลมีพารามิเตอร์อย่างน้อยหนึ่งรายการที่ถูกทำเครื่องหมายว่าเป็นข้อมูลที่มีอยู่ถาวรและชื่อไฟล์เพื่อบันทึกข้อมูลที่มีอยู่ถาวร (ดูที่-e, ด้านบน) สามารถใช้ได้
ปัญหาอื่น ๆ กับการดีบั๊กเคอร์เนลโอ๊ะโอในโมดูลคือเนื้อหาของ / proc / ksyms และ / proc / modules สามารถเปลี่ยนระหว่าง Oops และเมื่อคุณประมวลผลแฟ้มบันทึก เพื่อช่วยแก้ปัญหานี้ถ้าไดเร็กทอรี / var / log / ksymoops มีอยู่แล้วinsmod และrmmod จะคัดลอก / proc / ksyms และ / proc / modules ไปที่ / var / log / ksymoops โดยอัตโนมัติพร้อมกับคำนำหน้าของ "date %%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ผู้ดูแลระบบสามารถบอก ksymoops ซึ่งไฟล์ snapshot ที่จะใช้เมื่อแก้จุดบกพร่องอ๊ะ ไม่มีสวิตช์เพื่อปิดใช้งานการทำสำเนาอัตโนมัตินี้ ถ้าคุณไม่ต้องการให้เกิดขึ้นอย่าสร้าง / var / log / ksymoops หากไดเรกทอรีนั้นมีอยู่ควรเป็นของ root และเป็นโหมด 644 หรือ 600 และคุณควรเรียกใช้สคริปต์นี้ทุกวันหรือมากกว่า สคริปต์ด้านล่างมีการติดตั้งเป็น insmod_ksymoops_clean
#! / bin / ดวลจุดโทษ # ลบ ksyms และโมดูลที่บันทึกไว้ซึ่งไม่สามารถเข้าถึงได้ภายใน 2 วัน ถ้า -d / var / log / ksymoops แล้วก็ ตั้งค่า e # ตรวจสอบให้แน่ใจว่ามีอย่างน้อยหนึ่งเวอร์ชัน d = วันที่% +% Y% m% d% H% M% S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules หา / var / log / ksymoops -type f -atime +2 -exec rm {} ; Fi ชื่อ insmod - ติดตั้งโมดูลเคอร์เนลที่ใส่ได้ สรุป insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o module_name -O blob_name -P อุปสรรค โมดูล สัญลักษณ์= ราคา … ข้อมูลพื้นฐานที่ควรรู้