لینوکس / یونیکس دستور: insmod

دستور insmod لینوکس / یونیکس یک ماژول قابل بارگذاری در هسته در حال اجرا را نصب می کند . insmod تلاش می کند یک ماژول را به هسته در حال اجرا پیوند دهد با حل تمام نشانه ها از جدول نماد صادرات هسته.

اگر نام فایل ماژول بدون دایرکتوری یا پسوند داده شده باشد، insmod برای برخی از دایرکتوری پیش فرض پیش فرض برای ماژول جستجو می کند. متغیر محیط MODPATH می تواند مورد استفاده قرار گیرد تا این پیشفرض را لغو کند. اگر یک فایل پیکربندی ماژول از قبیل /etc/modules.conf وجود داشته باشد، مسیرهای تعریف شده در MODPATH را لغو می کند.

متغیر محیطی MODULECONF همچنین می تواند برای انتخاب یک فایل پیکربندی متفاوتی از default / etc / modules.conf (یا /etc/conf.modules ( غیرقانونی ) استفاده شود). این متغیر محیطی تمام تعاریف بالا را لغو می کند.

وقتی متغیر محیطی UNAME_MACHINE تنظیم می شود، modutils از مقدار آن به جای فیلد machine از uname () 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 ، --help

نمایش خلاصه ای از گزینه ها و بلافاصله خروج.

-k ، --autoclean

پرچم خودکار تمیز را در ماژول تنظیم کنید. این پرچم با استفاده از kerneld (8) برای حذف ماژول هایی که در برخی از دوره های استفاده نشده اند - معمولا یک دقیقه استفاده می شود.

-L ، - قفل

از گله (2) برای جلوگیری از بارهای همزمان یک ماژول استفاده کنید.

-m ، - نقشه

خروجی یک بار بار در stdout، و آن را آسان تر برای اشکال زدایی ماژول در صورت ترس از هسته.

-n ، --noload

ساختن ساختگی، انجام همه چیز به جز بارگیری ماژول به هسته. اگر درخواست شده توسط -m یا -O ، اجرا یک فایل نقشه یا لکه را تولید می کند. از آنجا که ماژول بارگیری نمی شود، آدرس بار واقعی هسته شناخته شده است بنابراین فایل نقشه و لکه براساس آدرس بار دلخواه 0x12340000 است.

-o module_name ، --name = module_name

به صراحت ماژول را به نام نامی از نام پایه فایل شیء منبع نامگذاری می کنیم.

-oblob_name ، -blob = blob_name

جسم باینری را در blob_name ذخیره کنید . نتیجه یک لکه دوتایی (بدون هدرهای ELF) دقیقا نشان می دهد چه چیزی پس از اعمال بخش و جابجایی در هسته بارگذاری می شود. گزینه -m برای گرفتن یک نقشه از جسم توصیه می شود.

-p ، - پروب

ماژول را بررسی کنید تا ببینید آیا می توان آن را با موفقیت بارگذاری کرد . این شامل قرار دادن فایل شی در مسیر ماژول، بررسی شماره نسخه و حل و فصل نمادها است. این جابجایی ها را بررسی نمی کند و یا یک فایل نقشه یا لکه تولید نمی کند.

-P پیشوند ، --prefix = پیشوند

این گزینه را می توان با ماژول های نسخه ای برای یک هسته SMP یا bigmem استفاده کرد، از آنجا که چنین ماژول ها یک پیشوند اضافی در نام های نماد خود اضافه می کنند. اگر هسته با نسخه های نماد ساخته شده باشد، Insmod به طور خودکار پیشوند را از تعریف "get_module_symbol" یا "inter_module_get" استخراج می کند، که یکی از آنها باید در هر هسته ای که از ماژول ها پشتیبانی می کند، باشد. اگر هسته دارای نسخه های نماد نیست اما ماژول با نسخه های نماد ساخته شده است پس کاربر باید P- supply را ارائه دهد.

-q ، - مسخره

لیستی از نمادهای حل نشده را چاپ نکنید. درباره عدم تطابق نسخه شکایت نکنید مشکل فقط در وضعیت خروج از insmod قابل مشاهده خواهد بود.

-r ، - ریشه

بعضی از کاربران ماژول ها را تحت یک userid غیر ریشه کامپایل می کنند و سپس ماژول ها را به عنوان ریشه نصب می کنند. این فرایند می تواند ماژول هایی را که توسط کاربر غیر root وجود داشته باشد را ترک کند، حتی اگر دایرکتوری ماژول ها توسط root باشد. اگر کاربر غیر ریشه به خطر بیافتد، یک نفوذگر میتواند ماژولهای موجود متعلق به آن userid را بازنویسی کند و از این قرار گرفتن در معرض بوت استرپ تا دسترسی ریشه استفاده کند.

به طور پیش فرض، modutils تلاش برای استفاده از یک ماژول که توسط ریشه متعلق به آن نیست، رد خواهد شد. مشخص کردن -r چک را تغییر می دهد و ریشه را اجازه می دهد تا ماژول هایی را که توسط ریشه نیستند، بارگیری کنیم. توجه: مقدار پیش فرض برای بررسی ریشه می تواند تغییر کند، زمانی که modutils پیکربندی شده است.

استفاده از -r برای غیر فعال کردن چک کردن ریشه و یا تنظیم پیش فرض به "بدون ریشه چک" در زمان پیکربندی یک قرار گرفتن در معرض خطر عمده است و توصیه نمی شود.

-s ، - syslog

خروجی همه چیز را به syslog (3) به جای ترمینال.

-S ، - kallsyms

نیروی ماژول لود شده را به داده های kallsyms ، حتی اگر هسته آن را پشتیبانی نمی کند. این گزینه برای سیستم های کوچک است که در آن هسته بدون داده های kallsyms بارگذاری می شود، اما ماژول های انتخاب شده نیاز به کلاینت برای اشکال زدایی دارند. این گزینه پیش فرض روی لینوکس Red Hat است.

-v ، --verbose

ببخشید

-V ، --version

نمایش نسخه ای از insmod .

-X ، --export ؛ -x ، --noexport

انجام دهید و تمام نمادهای خارجی ماژول را به ترتیب صادر نکنید. به طور پیش فرض برای نمادهای صادر می شود. این گزینه تنها در صورتی موثر است که ماژول به صراحت نمیتواند جدول نماد کنترل شده خود را صادر کند و به این ترتیب از بین رفته است.

-Y ، -ksymoops ؛ -نه ، - نوشیموپس

آیا نمادهای ksymoops را به ksyms اضافه نمیکنید. این علامتها توسط ksymoops برای استفاده از اشکال زدایی بهتر مورد استفاده قرار می گیرند، اگر در این ماژول اووپ وجود داشته باشد. به طور پیش فرض برای نمادهای ksymoops تعریف شده است. این گزینه مستقل از گزینه های -X / -x است .

نمادهای ksymoops تقریبا 260 بایت در هر ماژول بارگذاری شده اضافه می کنند. مگر اینکه شما واقعا در فضای هسته ای کوتاه هستید و سعی می کنید کیمیم را به حداقل اندازه خود بکشید، پیش فرض را انتخاب کنید و دقیق تر اوه اشکال زدایی کنید. نمادهای ksymoops برای ذخیره داده های مداوم مداوم مورد نیاز هستند.

-N ، -numeric-only

فقط بخشی عددی نسخه ماژول را در مقابل نسخه کرنل بررسی کنید، به عنوان مثال، EXTRAVERSION را نادیده بگیرید و تصمیم بگیرید که آیا یک ماژول متعلق به یک هسته باشد. این پرچم به طور خودکار برای هسته 2.5 به بعد تنظیم شده است، برای هسته های قبلی اختیاری است.

پارامتر ماژول

بعضی از ماژول ها پارامترهای بار بار را می پذیرند تا عملیات خود را سفارشی کنند. این پارامترها اغلب پورت I / O و شماره های IRQ هستند که از دستگاه به دستگاه متفاوت هستند و نمی توانند از سخت افزار تعیین شوند.

در ماژول هایی که برای هسته های 2.0 ساخته شده اند، هر علامت صحیح یا نماد نشانگر شخصیت می تواند به عنوان پارامتر و اصلاح شود. شروع از هسته سری 2.1، نمادها به صورت صریح به عنوان پارامتر مشخص می شوند تا فقط مقادیر خاصی تغییر کنند. علاوه بر این، نوع اطلاعات برای بررسی مقادیر ارائه شده در زمان بارگذاری ارائه شده است.

در مورد عدد صحیح، تمام مقادیر ممکن است در دهدهی، اکتان یا هگزادسیمال a la C: 17، 021 یا 0x11 باشد. عناصر آرایه توالی مشخص شده توسط کاما هستند. عناصر را می توان با حذف ارزش.

در ماژول های سری 2.0، مقادیری که با یک عدد شروع نمی شوند، رشته ها هستند. از ابتدا در 2.1، اطلاعات نوع پارامتر نشان می دهد که آیا ارزش را به عنوان یک رشته تفسیر می کند. اگر مقدار با مقادیر دوگانه آغاز شود ( " )، رشته در C، فرار از توابع و همه تفسیر می شود. توجه داشته باشید که از فشرده پوسته، نقل قول ها ممکن است لازم باشد از تفسیر پوسته محافظت شود.

ماژول های مجاز GPL و نمادها

شروع با هسته 2.4.10، ماژول ها باید یک رشته مجوز داشته باشند، تعریف شده با استفاده از MODULE_LICENSE () . چندین رشته به عنوان GPL سازگار شناخته شده اند. هر رشته مجوز دیگری یا هیچ مجوزی به معنای این نیست که ماژول به عنوان اختصاصی محسوب می شود.

اگر هسته از پرچم / proc / sys / kernel / tinted پشتیبانی می کند، پس از بارگذاری یک ماژول بدون مجوز GPL OR MODIFIED OR MODIFIED PASSWORD با '1' پشتیبانی می کند. هشدار صادر می شود اگر هسته پشتیبانی از خرابکاری و یک ماژول بدون مجوز بارگذاری شده است. هشدار همیشه برای ماژولهایی است که دارای MODULE_LICENSE () است که GPL سازگار نیست، حتی در هسته های قدیمی که از تکه تکه پشتیبانی نمی کنند صادر می شود. این هشدارها را به حداقل می رساند زمانی که یک modutils جدید در هسته های قدیمی استفاده می شود.

insmod -f (force) mode خواهد بود یا پرچم دندانپزشکی با '2' در هسته هایی که از ضعف پشتیبانی می کنند. همیشه هشدار می دهد

برخی از توسعهدهندگان نرمافزار نیازمند آن هستند که نمادهای صادر شده توسط کد آنها فقط توسط ماژولها با یک مجوز سازگار با GPL استفاده شوند. این علامتها به جای EXPORT_SYMBOL طبیعی EXPORT_SYMBOL_GPL صادر می شود . نمادهای GPL تنها با هسته و سایر ماژول ها فقط برای ماژول هایی با مجوز سازگار با GPL قابل مشاهده هستند، این علامت ها در / proc / ksyms با پیشوند " GPLONLY_ " ظاهر می شود. insmod پیش فرض GPLONLY_ در نمادها را در هنگام بارگذاری یک ماژول مجوز GPL غلط می گیرد بنابراین ماژول فقط به نام نماد عادی اشاره می کند بدون پیشوند. تنها نمادهای GPL برای ماژول ها بدون مجوز سازگار با GPL در دسترس نیستند، این شامل ماژول هایی با هیچ مجوزی نیستند.

Ksymoops کمک

برای کمک به اشکال زدایی هسته Oops در هنگام استفاده از ماژول، insmod پیش فرض برای اضافه کردن برخی از نمادها به ksyms، گزینه ی را ببینید. این نمادها با __insmod_modulename_ شروع می شوند . نام مدول مورد نیاز است تا نمادها را منحصر به فرد نماید. قانونی است که همان شیء را بیش از یک بار در نام های مختلف ماژول بارگذاری کند. در حال حاضر، نمادهای تعریف شده عبارتند از:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile نام پرونده ای است که از جسم گرفته شده است. این تضمین می کند که ksymoops می تواند کد را با جسم صحیح مطابقت دهد. mtime آخرین آخرین زمان اصلاح شده در آن فایل در hex است، صفر اگر stat نتواند. version نسخه کرنل است که ماژول برای آن کامپایل شده است، -1 اگر هیچ نسخه در دسترس نیست. نماد _O همان آدرس شروع را به عنوان هدر ماژول دارد.

__insmod_modulename_Ssectionname_Llength

این نماد در آغاز بخش های ELF انتخاب شده است، در حال حاضر .text، .rodata، .data، .bss و .sbss. این فقط به نظر می رسد که بخش دارای اندازه غیر صفر است. sectionname نام بخش ELF است، طول طول بخش در اعشاری است. این نمادها به آدرس ksymoops آدرس ها را در بخش هایی که هیچ علامت در دسترس نیستند، کمک نمی کند.

__insmod_modulename_Ppersistent_filename

فقط با insmod ایجاد می شود اگر ماژول دارای یک یا چند پارامتر است که به عنوان داده های مداوم مشخص شده اند و یک نام فایل برای ذخیره اطلاعات مداوم (see- e ، above) در دسترس است.

مشکل دیگر با هسته اشکال زدایی Oops در ماژول ها این است که محتویات / proc / ksyms و / proc / modules می توانند بین اوو ها تغییر کنند و هنگام پردازش فایل ورودی. برای کمک به غلبه بر این مشکل، اگر directory / var / log / ksymoops وجود داشته باشد، Insmod و rmmod به صورت خودکار copy / proc / ksyms و / proc / modules به / var / log / ksymoops با پیشوند از 'date +٪ Y٪ m ٪ d٪ H٪ M٪ S`. مدیر سیستم می تواند ksymoops که فایرفاکس فایل های استفاده از زمانی که اشکال زدایی اووپ . هیچ سوئیچ برای غیر فعال کردن این کپی خودکار وجود ندارد. اگر نمیخواهید رخ دهد، / var / log / ksymoops را ایجاد نکنید . اگر این دایرکتوری وجود داشته باشد، آن باید توسط ریشه متعلق به حالت 644 یا 600 باشد و شما باید هر روز این اسکریپت را اجرا کنید. اسکریپت زیر به عنوان insmod_ksymoops_clean نصب شده است.

اطلاعات پایه برای شناختن

نام

insmod - ماژول کرنل قابل بارگذاری را نصب کنید

خلاصه

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P prefix ] ماژول [ نماد = ارزش ...]