لينكس / يونيكس الأمر: insmod

يقوم الأمر المحيط بـ Linux / Unix بتثبيت وحدة قابلة للتحميل في kernel قيد التشغيل. يحاول armod لربط وحدة نمطية في kernel قيد التشغيل عن طريق حل جميع الرموز من جدول رمز تصدير kernel.

إذا تم إعطاء اسم ملف الوحدة النمطية بدون دلائل أو ملحق ، فسيبحث armod عن الوحدة النمطية في بعض الدلائل الافتراضية الشائعة. يمكن استخدام متغير البيئة MODPATH لتجاوز هذا الإعداد الافتراضي. في حالة وجود ملف تكوين وحدة نمطية مثل /etc/modules.conf ، فإنه سيتجاوز المسارات المحددة في MODPATH .

يمكن أيضًا استخدام متغير البيئة MODULECONF لتحديد ملف تكوين مختلف من الملف الافتراضي /etc/modules.conf (أو /etc/conf.modules (تم إهماله)). سوف يتخطى متغير البيئة هذا جميع التعاريف أعلاه.

عندما يتم تعيين متغير البيئة UNAME_MACHINE ، سيستخدم modutils قيمته بدلاً من حقل الجهاز من syscall uname (). هذا الاستخدام بشكل أساسي عند تجميع وحدات 64 بت في مساحة المستخدم 32 بت أو العكس ، تعيين UNAME_MACHINE إلى نوع الوحدات النمطية. لا يدعم modutils الحالي وضع إنشاء عبر الكامل للوحدات النمطية ، فإنه يقتصر على الاختيار بين 32 و 64 بت إصدارات بنية المضيف.

خيارات

-e persist_name ، --persist = persist_name

يحدد مكان قراءة أي بيانات دائمة للوحدة النمطية من عند التحميل ومكتوبة إلى عند إلغاء تحميل عملية إنشاء العنصر هذه. يتم تجاهل هذا الخيار بصمت إذا لم يكن لدى الوحدة النمطية بيانات مستمرة. لا تتم قراءة البيانات الثابتة إلا باستخدام قناع إذا كان هذا الخيار موجودًا ، ولا يقوم عنصر العزل الافتراضي بمعالجة البيانات المستمرة.

وكصيغة مختصرة ، يتم تفسير -e "" (سلسلة فارغة) من خلال اللصوص مثل قيمة persistdir كما هو محدد في modules.conf ، متبوعًا باسم اسم الوحدة بالنسبة لمسار بحث الوحدة النمطية الذي وجد فيه ، مطروحًا منه زائدة ".gz" ، ".o" أو ".mod". إذا كان modules.conf يحدد " persistdir = " (أي persistdir هو حقل فارغ) فإن هذا النموذج المختزل يتم تجاهله بصمت. (راجع modules.conf (5).)

-f ، --force

محاولة تحميل الوحدة النمطية حتى إذا لم تطابق إصدار kernel قيد التشغيل وإصدار النواة التي تم تصنيف الوحدة النمطية لها. هذا يتجاوز التحقق من إصدار kernel فقط ، ليس له أي تأثير على فحوصات اسم الرمز. إذا لم تتطابق أسماء الرموز في الوحدة النمطية مع kernel ، فلا توجد طريقة لفرض insmod لتحميل الوحدة.

-h ، - مساعدة

عرض ملخص للخيارات والخروج على الفور.

-k ، - autoclean

اضبط إشارة التنظيف التلقائي على الوحدة. سيتم استخدام هذه العلامة بواسطة kerneld (8) لإزالة الوحدات النمطية التي لم يتم استخدامها في بعض الوقت - عادة دقيقة واحدة.

-L ، --lock

استخدم القطيع (2) لمنع التحميل المتزامن لنفس الوحدة.

-m ، - خريطة

إخراج خريطة تحميل على stdout ، مما يجعل من السهل على تصحيح الوحدة النمطية في حالة ذعر النواة.

-n ، - لا يتم التحميل

تشغيل وهمية ، افعل كل شيء ما عدا تحميل الوحدة في النواة. إذا طلبت من قبل -m أو -O ، فسوف ينتج عن التشغيل خريطة أو ملف blob. بما أن الوحدة لم يتم تحميلها ، فإن عنوان تحميل النواة الحقيقي غير معروف ، لذلك فإن الخريطة وملف blob يستندان إلى عنوان تحميل تعسفي لـ 0x12340000.

-o module_name ، --name = module_name

صراحة تسمية الوحدة النمطية بدلاً من اشتقاق الاسم من الاسم الأساسي لملف الكائن المصدر.

-O blob_name ، --blob = blob_name

احفظ الكائن الثنائي في blob_name . والنتيجة هي binary binary (لا رؤوس ELF) تظهر بالضبط ما يتم تحميله في النواة بعد التلاعب في القسم وإعادة التوطين. ينصح الخيار -m للحصول على خريطة للكائن.

-p ، --proprobe

دقق في الوحدة لمعرفة ما إذا كان يمكن تحميلها بنجاح . يتضمن ذلك تحديد موقع ملف الكائن في مسار الوحدة ، والتحقق من أرقام الإصدارات ، وحل الرموز. لا يتحقق من الترحيل ولا ينتج خريطة أو ملف blob.

-P البادئة ، - البادئة = البادئة

يمكن استخدام هذا الخيار مع الوحدات النمطية ذات الإصدار الخاص بـ SMP أو نواة bigmem ، لأن هذه الوحدات لها بادئة إضافية مضافة في أسماء الرموز الخاصة بها. إذا تم بناء النواة مع إصدارات الرموز ، فسيتم إستخراج البادئة تلقائيًا من تعريف "get_module_symbol" أو "inter_module_get" ، ويجب أن يكون أحدها موجودًا في أي نواة تدعم الوحدات النمطية. إذا لم يكن لدى kernel أية إصدارات رمزية ولكن الوحدة بنيت مع إصدارات الرموز ، فيجب أن يقوم المستخدم بتوريد -P .

-q ، -

لا تطبع قائمة بأي رموز غير محلولة. لا تشكو من عدم تطابق الإصدار. سوف تنعكس المشكلة فقط في حالة الخروج من insmod .

-r ، - الجذر

يقوم بعض المستخدمين بتجميع الوحدات النمطية تحت userid غير الجذر ثم تثبيت الوحدات النمطية كجذر. يمكن أن تترك هذه العملية الوحدات النمطية التي يملكها مستخدم غير الجذر ، على الرغم من أن دليل الوحدات مملوك من قبل الجذر. إذا تم اختراق معرف المستخدم غير الجذر ، يمكن أن يقوم المتطفل بالكتابة فوق الوحدات النمطية الموجودة التي يملكها ذلك userid واستخدام هذا التعريض للتشغيل لأعلى للوصول إلى الجذر.

بشكل افتراضي ، سترفض modutils محاولات لاستخدام وحدة نمطية غير مملوك من قبل الجذر. سيؤدي تحديد -r إلى تبديل الاختيار والسماح بجذر تحميل الوحدات النمطية التي لا يملكها الجذر. ملاحظة: يمكن تغيير القيمة الافتراضية لفحص الجذر عند تكوين modutils.

استخدام -r لتعطيل التحقق من الجذر أو تعيين الإعداد الافتراضي إلى "عدم التحقق من الجذر" في وقت التكوين هو تعرض كبير للأمن ولا ينصح به.

-s ، - syslog

إخراج كل شيء إلى syslog (3) بدلاً من المحطة.

-S ، - kallsyms

إجبار الوحدة المحملة على الحصول على بيانات kallsyms ، حتى إذا كانت kernel لا تدعمها. هذا الخيار هو للأنظمة الصغيرة حيث يتم تحميل النواة بدون بيانات kallsyms لكن الوحدات المحددة تحتاج إلى kallsyms للتصحيح. هذا الخيار هو الخيار الافتراضي في Red Hat Linux.

-v ، --verbose

كن مطولاً.

-V ، - الإصدار

عرض نسخة من insmod .

-X ، - التصدير ؛ -x ، - noexport

القيام ولا تصدير كافة الرموز الخارجية الوحدة النمطية على التوالي. الافتراضي هو أن يتم تصدير الرموز. يكون هذا الخيار فعالاً فقط إذا لم تقم الوحدة النمطية بتصدير جدول الرموز الخاص بها بشكل صريح ، وبالتالي تم إهمالها.

-Y ، --ksymoops ؛ -y ، --noksymoops

لا تقم بإضافة رموز ksymoops إلى ksyms. يتم استخدام هذه الرموز بواسطة ksymoops لتوفير تصحيح أفضل إذا كان هناك عفو في هذه الوحدة. الافتراضي هو أن يتم تعريف رموز ksymoops . هذا الخيار مستقل عن خيارات -X / -x .

إضافة رموز ksymoops حوالي 260 بايت لكل وحدة محملة. إلا إذا كنت قصيرًا حقًا في مساحة kernel وتحاول تقليل ksyms إلى الحد الأدنى لحجمها ، فعليك اتخاذ الإعداد الافتراضي والحصول على تصحيح أخطاء Oops أكثر دقة. مطلوبة رموز ksymoops لحفظ بيانات الوحدة النمطية المستمرة.

-N ، - عددي فقط

تحقق فقط من الجزء الرقمي لإصدار الوحدة النمطية مقابل إصدار kernel ، أي تجاهل EXTRAVERSION عند تحديد ما إذا كانت الوحدة تنتمي إلى kernel أم لا. يتم ضبط هذه العلامة تلقائيًا على kernel 2.5 فصاعدًا ، وهي اختيارية للنواة السابقة.

معلمات الوحدة

تقبل بعض الوحدات معلمات وقت التحميل لتخصيص عملياتها. هذه المعلمات غالباً ما تكون منفذ الإدخال / الإخراج وأرقام IRQ التي تختلف من جهاز لآخر ولا يمكن تحديدها من الجهاز.

في الوحدات النمطية التي تم إنشاؤها لـ 2.0 سلسلة kernels ، قد يتم معاملة أي رمز صحيح أو رمز مؤشر كمعلمة وتعديلها. وابتداءً من نواة السلسلة 2.1 ، يتم وضع علامة واضحة على الرموز كمعلمات بحيث يمكن تغيير قيم محددة فقط. علاوة على ذلك ، يتم توفير معلومات النوع للتحقق من القيم المقدمة في وقت التحميل.

في حالة الأعداد الصحيحة ، قد تكون جميع القيم بالأرقام العشرية أو الثماني أو الست عشري a la: C: 17 أو 021 أو 0x11. عناصر المصفوفة محددة التسلسل مفصولة بفواصل. يمكن تخطي العناصر بإغفال القيمة.

في وحدات 2.0 سلسلة ، تعتبر القيم التي لا تبدأ برقم سلاسل. بداية من 2.1 ، تشير معلومات نوع المعلمة إلى ما إذا كان سيتم تفسير القيمة كسلسلة. إذا كانت القيمة تبدأ بـ double-quotes ( " ) ، يتم تفسير السلسلة كما في C ، متسلسلات الهروب وكلها. لاحظ أنه من مطالبة shell ، قد يلزم حماية علامات الاقتباس نفسها من تفسير shell.

وحدات GPL المرخصة والرموز

بدءًا من kernel 2.4.10 ، يجب أن تحتوي الوحدات النمطية على سلسلة ترخيص ، يتم تعريفها باستخدام MODULE_LICENSE () . يتم التعرف على عدة سلاسل على أنها متوافقة مع GPL ؛ أي سلسلة ترخيص أخرى أو أي ترخيص على الإطلاق يعني أنه يتم التعامل مع الوحدة على أنها ملكية خاصة.

إذا كانت النواة تدعم العلامة / proc / sys / kernel / الملوث ، فسيتم حينئذٍ إبطال اللصوص أو العلامة الملوثة بـ "1" عند تحميل وحدة بدون ترخيص GPL. يتم إصدار تحذير إذا كانت kernel تدعم tainting ويتم تحميل وحدة بدون ترخيص. يتم إصدار تحذير دائمًا للوحدات التي تحتوي على MODULE_LICENSE () غير متوافق مع GPL ، حتى في النواة الأقدم التي لا تدعم التشويش. يقلل هذا التحذيرات عند استخدام modutils جديدة على kernels الأقدم.

وضع armodm -f (force) أو العلامة الملوثة بعلامة "2" على النوى التي تدعم الطعوم. تصدر دائما تحذير.

تتطلب بعض مطوري kernel أن الرموز التي يتم تصديرها بواسطة الكود الخاص بهم يجب أن تستخدم فقط من خلال الوحدات ذات الترخيص المتوافق مع GPL. يتم تصدير هذه الرموز بواسطة EXPORT_SYMBOL_GPL بدلاً من EXPORT_SYMBOL العادي. تكون رموز GPL-only التي يتم تصديرها من خلال النواة ووحدات أخرى مرئية فقط للوحدات ذات الترخيص المتوافق مع GPL ، تظهر هذه الرموز في / proc / ksyms مع بادئة ' GPLONLY_ '. يتجاهل رمز اللامبوت GPLONLY_ البادئة على الرموز أثناء تحميل وحدة GPL المرخصة ، لذلك تشير الوحدة النمطية فقط إلى اسم الرمز العادي ، بدون البادئة. لا تتوفر رموز GPL فقط للوحدات النمطية بدون ترخيص متوافق مع GPL ، وهذا يشمل وحدات بدون ترخيص على الإطلاق.

Ksymoops المساعدة

للمساعدة في تصحيح أخطاء kernel Oops عند استخدام الوحدات النمطية ، defmults الافتراضي لإضافة بعض الرموز إلى ksyms ، راجع الخيار -Y . تبدأ هذه الرموز بـ __insmod_modulename_ . مطلوب modulename لجعل الرموز فريدة. من القانوني تحميل نفس الكائن أكثر من مرة تحت أسماء وحدات مختلفة. حاليا ، الرموز المحددة هي:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile هو اسم الملف الذي تم تحميل الكائن منه. هذا يضمن أن ksymoops يمكن أن تتطابق مع رمز الكائن الصحيح. mtime هو آخر طابع زمني تم تعديله على هذا الملف في سداسي عشري ، في حالة فشل stat. الإصدار هو إصدار kernel الذي تم تصنيف الوحدة النمطية لـ -1 إذا لم يتوفر إصدار. يحتوي رمز _O على نفس عنوان بداية رأس الوحدة النمطية.

__insmod_modulename_Ssectionname_Llength

يظهر هذا الرمز في بداية مقاطع ELF المحددة ، حاليًا .text ، .rodata ، .data ، .bss و .sbss. يظهر فقط إذا كان المقطع به حجم غير صفري. اسم القسم هو اسم قسم ELF ، الطول هو طول القسم بالأرقام العشرية. تساعد هذه الرموز ksymoops على تعيين العناوين إلى الأقسام في حالة عدم توفر الرموز.

__insmod_modulename_Ppersistent_filename

يتم إنشاؤه فقط من قبل insmod إذا كانت الوحدة تحتوي على معلمة واحدة أو أكثر تم وضع علامة عليها كأنها بيانات مستمرة واسم ملف لحفظ البيانات الثابتة (انظر -e أعلاه).

المشكلة الأخرى مع تصحيح الأخطاء kernel Oops في الوحدات النمطية هو أن محتويات / proc / ksyms و / proc / modules يمكن أن تتغير بين Oops وعند معالجة ملف السجل. للمساعدة في التغلب على هذه المشكلة ، إذا كان الدليل / var / log / ksymoops موجودًا ، فسيتم حينئذٍ نسخ armod و rmmod تلقائيًا / proc / ksyms و / proc / modules إلى / var / log / ksymoops مع بادئة "تاريخ +٪ Y٪ m" ٪٪ H٪ M٪ S` د. يمكن لمسؤول النظام أن يخبر ksymoops عن ملفات لقطة لاستخدامها عند تصحيح أخطاء Oops. لا يوجد مفتاح لتعطيل هذه النسخة التلقائية. إذا كنت لا تريد حدوث ذلك ، فلا تقم بإنشاء / var / log / ksymoops . إذا كان هذا الدليل موجودًا ، فيجب أن يكون مملوكًا للجذر وأن يكون هو الوضع 644 أو 600 ويجب تشغيل هذا البرنامج النصي كل يوم أو نحو ذلك. يتم تثبيت البرنامج النصي أدناه كما insmod_ksymoops_clean .

معلومات أساسية للمعرفة

اسم

insmod - تثبيت وحدة النواة للتحميل

موجز

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P prefix ] module [ symbol = value ...]