الأمر Linux / Unix insmod تثبيت وحدة قابلة للتحميل في نواة التشغيل.insmod يحاول ربط وحدة نمطية في kernel التشغيل عن طريق حل جميع الرموز من جدول رمز تصدير kernel.
إذا تم إعطاء اسم ملف الوحدة النمطية بدون دلائل أو امتداد ،insmod سيبحث عن الوحدة في بعض الدلائل الافتراضية الشائعة. متغير البيئةMODPATH يمكن استخدامها لتجاوز هذا الافتراضي. إذا كان ملف تكوين وحدة نمطية مثل/etc/modules.conf موجود ، سيؤدي إلى تجاوز المسارات المحددة فيMODPATH.
متغير البيئةMODULECONF يمكن أيضا أن تستخدم لتحديد ملف التكوين مختلفة من الافتراضي/etc/modules.conf (أو/etc/conf.modules (إهمال)). سوف يتخطى متغير البيئة هذا جميع التعاريف أعلاه.
عندما متغير البيئةUNAME_MACHINE يتم تعيين modutils سيستخدم قيمته بدلاً من حقل الجهاز من unys () syscall. هذا بشكل أساسي من الاستخدام عند تجميع الوحدات النمطية 64 بت في مساحة المستخدم 32 بت أو العكس ، تعيينUNAME_MACHINE لنوع الوحدات. لا يدعم modutils الحالي وضع إنشاء عبر الكامل للوحدات النمطية ، فإنه يقتصر على اختيار بين 32 و 64 بت إصدارات بنية المضيف.
خيارات
-e persist_name , --ثابر= persist_name
يحدد مكان قراءة أي بيانات دائمة للوحدة النمطية من عند التحميل ومكتوبة إلى عند إلغاء تحميل عملية إنشاء العنصر هذه. يتم تجاهل هذا الخيار بصمت إذا لم يكن لدى الوحدة النمطية بيانات مستمرة. يتم قراءة البيانات الثابتة فقط من قبلinsmod إذا كان هذا الخيار موجودًا ، بشكل افتراضيinsmod لا يقوم بمعالجة البيانات المستمرة.
كاختصار ،- "" (سلسلة فارغة) يتم تفسيرها بواسطةinsmod كقيمةpersistdir كما هو محدد فيmodules.conf، متبوعًا باسم الملف الخاص بالوحدة المتعلقة بمسار بحث الوحدة ، تم العثور عليه ، مطروحًا منه أي زائدة ".gz" ، ".o" أو ".mod". إذاmodules.conf يحدد "persistdir ="(أيpersistdir هو حقل فارغ) ثم يتم تجاهل هذا النموذج المختفي بصمت. (نرىmodules.conf (5).)
-F, --فرض
محاولة تحميل الوحدة النمطية حتى إذا لم تطابق إصدار kernel قيد التشغيل وإصدار النواة التي تم تصنيف الوحدة النمطية لها. هذا يتجاوز التحقق من إصدار kernel فقط ، ليس له أي تأثير على فحوصات اسم الرمز. إذا كانت أسماء الرموز في الوحدة لا تتطابق مع النواة ، فلا توجد طريقة لفرضهاinsmod لتحميل الوحدة.
-h, --مساعدة
عرض ملخص للخيارات والخروج على الفور.
-ك, --تنظيف سيارة
اضبط إشارة التنظيف التلقائي على الوحدة. سيتم استخدام هذه العلامة من قبلkerneld(8) لإزالة وحدات لم يتم استخدامها في فترة زمنية معينة - عادة دقيقة واحدة.
-L, --قفل
استعمالقطيع(2) لمنع الأحمال المتزامنة من نفس الوحدة.
-m, --خريطة
إخراج خريطة تحميل على stdout ، مما يجعل من السهل على تصحيح الوحدة النمطية في حالة ذعر النواة.
-n, --عدم التحميل
تشغيل وهمية ، افعل كل شيء ما عدا تحميل الوحدة في النواة. إذا طلبت من قبل-m أو-O، فإن المدى ينتج خريطة أو ملف blob. بما أن الوحدة لم يتم تحميلها ، فإن عنوان تحميل النواة الحقيقي غير معروف ، لذلك فإن الخريطة وملف blob يستندان إلى عنوان تحميل تعسفي لـ 0x12340000.
-o اسم وحدة , --اسم= اسم وحدة
صراحة تسمية الوحدة النمطية بدلاً من اشتقاق الاسم من الاسم الأساسي لملف الكائن المصدر.
-O blob_name , --blob= blob_name
احفظ الكائن الثنائي في blob_name . والنتيجة هي binary binary (لا رؤوس ELF) تظهر بالضبط ما يتم تحميله في النواة بعد التلاعب في القسم وإعادة التوطين. اختيار-m ينصح بالحصول على خريطة للكائن.
-p, --مسبار
دقق في الوحدة لمعرفة ما إذا كان يمكن تحميلها بنجاح. يتضمن ذلك تحديد موقع ملف الكائن في مسار الوحدة ، والتحقق من أرقام الإصدارات ، وحل الرموز. لا يتحقق من الترحيل ولا ينتج خريطة أو ملف blob.
ف اختصار , --اختصار= اختصار
يمكن استخدام هذا الخيار مع الوحدات النمطية ذات الإصدار الخاص بـ SMP أو نواة bigmem ، لأن هذه الوحدات لها بادئة إضافية مضافة في أسماء الرموز الخاصة بها. إذا تم بناء النواة مع نسخ الرموز ثمinsmod سيقوم باستخراج البادئة تلقائيًا من تعريف "get_module_symbol" أو "inter_module_get" ، ويجب أن يكون أحدها موجودًا في أي kernel يدعم الوحدات النمطية. إذا لم يكن لدى kernel أية إصدارات رمزية ولكن الوحدة بنيت مع إصدارات الرموز ، فيجب على المستخدم توفيرهاف.
-q, --هادئ
لا تطبع قائمة بأي رموز غير محلولة. لا تشكو من عدم تطابق الإصدار. سوف تنعكس المشكلة فقط في حالة الخروج منinsmod.
-r, --جذر
يقوم بعض المستخدمين بتجميع الوحدات النمطية تحت userid غير الجذر ثم تثبيت الوحدات النمطية كجذر. يمكن أن تترك هذه العملية الوحدات النمطية التي يملكها مستخدم غير الجذر ، على الرغم من أن دليل الوحدات مملوك من قبل الجذر. إذا تم اختراق معرف المستخدم غير الجذر ، يمكن أن يقوم المتطفل بالكتابة فوق الوحدات النمطية الموجودة التي يملكها ذلك userid واستخدام هذا التعريض للتشغيل لأعلى للوصول إلى الجذر.
بشكل افتراضي ، سترفض modutils محاولات لاستخدام وحدة نمطية غير مملوك من قبل الجذر. تحديد -r سيؤدي إلى تبديل الشيك وسيسمح للجذر بتحميل الوحدات النمطية غير المملوكة من قبل الجذر.
ملحوظة: يمكن تغيير القيمة الافتراضية لفحص الجذر عند تكوين modutils.استخدام -r لتعطيل التحقق من الجذر أو تعيين الإعداد الافتراضي إلى "عدم التحقق من الجذر" في وقت التكوين هو تعرض كبير للأمن ولا ينصح به.
-s, --syslog
إخراج كل شيء لسيسلوغ(3) بدلا من المحطة.
-S, --kallsyms
فرض الوحدة النمطية المحملة لديكkallsyms البيانات ، حتى لو كانت النواة لا تدعمها. هذا الخيار هو للأنظمة الصغيرة حيث يتم تحميل النواة بدونkallsyms البيانات ولكن تحتاج وحدات مختارةkallsyms لتصحيح الأخطاء. هذا الخيار هو الخيار الافتراضي في Red Hat Linux.
-الخامس, --verbose
كن مطولاً.
-الخامس, --الإصدار
عرض نسخة منinsmod.
-X, --تصدير; -x, --noexport
القيام ولا تصدير كافة الرموز الخارجية الوحدة النمطية على التوالي. الافتراضي هو أن يتم تصدير الرموز. يكون هذا الخيار فعالاً فقط إذا لم تقم الوحدة النمطية بتصدير جدول الرموز الخاص بها بشكل صريح ، وبالتالي تم إهمالها.
-Y, --ksymoops; -y, --noksymoops
هل ولا تضيفksymoops رموز ل ksyms. هذه الرموز تستخدم من قبلksymoops لتوفير تصحيح أفضل إذا كان هناك عفو في هذه الوحدة. الافتراضي هو لksymoopsالرموز التي يتعين تحديدها. هذا الخيار مستقل عن-X/-x خيارات.
ksymoops تضيف الرموز حوالي 260 بايت لكل وحدة نمطية محملة. إلا إذا كنت قصيرًا حقًا في مساحة kernel وتحاول تقليل ksyms إلى الحد الأدنى لحجمها ، فعليك اتخاذ الإعداد الافتراضي والحصول على تصحيح أخطاء Oops أكثر دقة.ksymoops الرموز مطلوبة لحفظ بيانات الوحدة النمطية الدائمة.
-N, --numeric فقط
تحقق فقط من الجزء الرقمي لإصدار الوحدة النمطية مقابل إصدار kernel ، أي تجاهل EXTRAVERSION عند تحديد ما إذا كانت الوحدة تنتمي إلى kernel أم لا. يتم ضبط هذه العلامة تلقائيًا على kernel 2.5 فصاعدًا ، وهي اختيارية للنواة السابقة.
معلمات الوحدة
تقبل بعض الوحدات معلمات وقت التحميل لتخصيص عملياتها. هذه المعلمات غالباً ما تكون منفذ الإدخال / الإخراج وأرقام IRQ التي تختلف من جهاز لآخر ولا يمكن تحديدها من الجهاز.
في الوحدات النمطية التي تم إنشاؤها لـ 2.0 سلسلة kernels ، قد يتم معاملة أي رمز صحيح أو رمز مؤشر كمعلمة وتعديلها. وابتداءً من نواة السلسلة 2.1 ، يتم وضع علامة واضحة على الرموز كمعلمات بحيث يمكن تغيير قيم محددة فقط. علاوة على ذلك ، يتم توفير معلومات النوع للتحقق من القيم المقدمة في وقت التحميل.
في حالة الأعداد الصحيحة ، قد تكون جميع القيم بالأرقام العشرية أو الثماني أو الست عشري a la: C: 17 أو 021 أو 0x11. عناصر المصفوفة محددة التسلسل مفصولة بفواصل. يمكن تخطي العناصر بإغفال القيمة.
في وحدات 2.0 سلسلة ، تعتبر القيم التي لا تبدأ برقم سلاسل. بداية من 2.1 ، تشير معلومات نوع المعلمة إلى ما إذا كان سيتم تفسير القيمة كسلسلة. إذا كانت القيمة تبدأ بعلامتي اقتباس مزدوجتين (') ، يتم تفسير السلسلة كما في C ، تسلسلات الهروب وجميع. هل لاحظ أنه من مطالبة shell ، قد يلزم حماية علامات الاقتباس نفسها من تفسير shell.
وحدات GPL المرخصة والرموز
بدءًا من kernel 2.4.10 ، يجب أن تحتوي الوحدات على سلسلة ترخيص ، يتم تعريفها باستخدامMODULE_LICENSE (). يتم التعرف على عدة سلاسل على أنها متوافقة مع GPL ؛ أي سلسلة ترخيص أخرى أو أي ترخيص على الإطلاق يعني أنه يتم التعامل مع الوحدة على أنها ملكية خاصة.
إذا كانت النواة تدعم/ بروك / SYS / نواة / الملوث علم ذلك الحينinsmod أو العلامة الملوثة بعلامة "1" عند تحميل وحدة بدون ترخيص GPL. يتم إصدار تحذير إذا كانت kernel تدعم tainting ويتم تحميل وحدة بدون ترخيص. يتم إصدار تحذير دائمًا للوحدات التي تحتوي علىMODULE_LICENSE () غير متوافق مع GPL ، حتى في النواة الأقدم التي لا تدعم التشويش. يقلل هذا التحذيرات عند استخدام modutils جديدة على kernels الأقدم.
إندمود -f وضع (القوة) أو العلم الملوث مع "2" على النوى التي تدعم الطعوم. تصدر دائما تحذير.
تتطلب بعض مطوري kernel أن الرموز التي يتم تصديرها بواسطة الكود الخاص بهم يجب أن تستخدم فقط من خلال الوحدات ذات الترخيص المتوافق مع GPL. يتم تصدير هذه الرموز من قبلEXPORT_SYMBOL_GPL بدلا من الطبيعيEXPORT_SYMBOL. تكون رموز GPL-only التي يتم تصديرها من خلال النواة ووحدات أخرى مرئية فقط للوحدات ذات الترخيص المتوافق مع GPL ، وتظهر هذه الرموز في/ بروك / ksyms مع بادئة "GPLONLY_'. insmod يتجاهلGPLONLY_ البادئة على الرموز أثناء تحميل وحدة GPL المرخصة بحيث تشير الوحدة النمطية فقط إلى اسم الرمز العادي ، بدون البادئة. لا تتوفر رموز GPL فقط للوحدات النمطية بدون ترخيص متوافق مع GPL ، وهذا يشمل وحدات بدون ترخيص على الإطلاق.
Ksymoops المساعدة
للمساعدة في تصحيح أخطاء kernel Oops عند استخدام الوحدات النمطية ،insmod افتراضيًا لإضافة بعض الرموز إلى ksyms ، راجع-Y اختيار. تبدأ هذه الرموز__insmod_ اسم وحدة_ . ال اسم وحدة مطلوب لجعل الرموز فريدة من نوعها. من القانوني تحميل نفس الكائن أكثر من مرة تحت أسماء وحدات مختلفة. حاليا ، الرموز المحددة هي:
__insmod_ اسم وحدة _ Oobjectfile _ Mmtime _ الإصدار VERSION
objectfile هو اسم الملف الذي تم تحميل الكائن منه. هذا يضمن أن ksymoops يمكن أن تتطابق مع رمز الكائن الصحيح. وقت أخر تعديل هو الطابع الزمني المعدّل الأخير على ذلك الملف في سداسي عشري ، إذا فشل stat stat. الإصدار هو إصدار kernel الذي تم تصنيف الوحدة النمطية له ، -1 إذا لم يكن هناك إصدار متاح. ال_O رمز له نفس عنوان بداية رأس الوحدة النمطية.
__insmod_ اسم وحدة _ Ssectionname _ Llength
يظهر هذا الرمز في بداية مقاطع ELF المحددة ، حاليًا .text ، .rodata ، .data ، .bss و .sbss. يظهر فقط إذا كان المقطع به حجم غير صفري. اسم القسم هو اسم قسم ELF ، الطول هو طول القسم بالأرقام العشرية. تساعد هذه الرموز ksymoops على تعيين العناوين إلى الأقسام في حالة عدم توفر الرموز.
__insmod_ اسم وحدة _Ppersistent_ اسم الملف
خلق فقط من قبلinsmod إذا كانت الوحدة تحتوي على معلمة أو أكثر تم وضع علامة عليها كبيانات مستمرة واسم ملف لحفظ البيانات الثابتة (راجع-eأعلاه) متاح.
المشكلة الأخرى مع تصحيح الأخطاء kernel Oops في الوحدات النمطية هو أن محتويات / proc / ksyms و / proc / modules يمكن أن تتغير بين Oops وعند معالجة ملف السجل. للمساعدة في التغلب على هذه المشكلة ، إذا كان الدليل / var / log / ksymoops موجودًاinsmod وrmmod سيتم نسخ / proc / ksyms و / proc / modules تلقائيًا إلى / var / log / ksymoops مع بادئة "تاريخ +٪ Y٪ m٪ d٪ H٪ M٪ S`. يمكن لمسؤول النظام أن يخبر ksymoops عن ملفات لقطة لاستخدامها عند تصحيح أخطاء Oops. لا يوجد مفتاح لتعطيل هذه النسخة التلقائية. إذا كنت لا تريد حدوث ذلك ، فلا تقم بإنشاء / var / log / ksymoops. إذا كان هذا الدليل موجودًا ، فيجب أن يكون مملوكًا للجذر وأن يكون هو الوضع 644 أو 600 ويجب تشغيل هذا البرنامج النصي كل يوم أو نحو ذلك. يتم تثبيت البرنامج النصي أدناه كما insmod_ksymoops_clean.
#! / بن / ش # حذف ksyms المحفوظة والوحدات التي لم يتم الوصول إليها في 2 أيام إذا كان -d / var / log / ksymoops ثم مجموعة- # تأكد من وجود إصدار واحد على الأقل دائمًا d = `date +٪ Y٪ m٪ d٪ H٪ M٪ S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules find / var / log / ksymoops -type f -atime +2 -exec rm {} ؛ فاي اسم insmod - تثبيت وحدة kernel للتحميل موجز insmod -fhkLmnpqrsSvVxXyYN -e persist_name - اسم وحدة -O blob_name -P اختصار وحدة رمز= القيمة … معلومات أساسية للمعرفة




