MODPROBE.D(5) modprobe.d MODPROBE.D(5)

modprobe.d - دایرکتوری پیکربندی برای modprobe

/etc/modprobe.d/*.conf

/run/modprobe.d/*.conf

/usr/local/lib/modprobe.d/*.conf

/usr/lib/modprobe.d/*.conf

/lib/modprobe.d/*.conf

از آنجا که دستور modprobe می‌تواند به دلیل وابستگی‌های میان ماژول‌ها بیش از یک ماژول را اضافه یا حذف کند، ما نیازمند روشی برای مشخص کردن گزینه‌هایی هستیم که باید با این ماژول‌ها استفاده شوند. همچنین می‌توان از آن‌ها برای ایجاد نام‌های مستعار (alias) مناسب استفاده کرد: نام‌های جایگزین برای یک ماژول، یا اینکه می‌توانند رفتار عادی modprobe را برای مواردی با نیازهای ویژه (مانند درج بیش از یک ماژول) به‌طور کلی بازنویسی (override) کنند.

توجه داشته باشید که نام‌های ماژول و نام‌های مستعار (مانند دیگر نام‌های ماژول) می‌توانند شامل - یا _ باشند: هر دو در تمامی دستورات ماژول قابل تعویض با یکدیگر هستند، زیرا تبدیل به زیرخط (underscore) به‌طور خودکار انجام می‌شود.

فایل‌های پیکربندی در هر سطر شامل یک دستور هستند؛ خطوط خالی و خطوطی که با '#' آغاز می‌شوند نادیده گرفته خواهند شد (مفید برای افزودن یادداشت‌ها). یک '\' در انتهای یک سطر، باعث ادامه یافتن آن در سطر بعدی می‌شود که ساختار فایل‌ها را مرتب‌تر می‌سازد.

برای اطلاعات بیشتر، بخش دستورات (COMMANDS) را در ادامه ببینید.

فایل‌های پیکربندی از دایرکتوری‌های ذکرشده در بخش خلاصه دستور و با همان اولویت خوانده می‌شوند. هنگامی که فایلی با یک نام مشخص بارگذاری شد، هر فایلی با همان نام در دایرکتوری‌های بعدی نادیده گرفته می‌شود.

تمامی فایل‌های پیکربندی صرف‌نظر از دایرکتوری محل قرارگیری‌شان، به ترتیب الفبایی (lexicographic) مرتب می‌شوند. فایل‌های پیکربندی می‌توانند به‌طور کامل جایگزین شوند (با قرار دادن یک فایل پیکربندی جدید با همان نام در دایرکتوری با اولویت بالاتر) یا به‌صورت جزئی جایگزین شوند (با داشتن یک فایل پیکربندی که در ترتیب نام‌گذاری دیرتر قرار می‌گیرد).

نکته: دایرکتوری‌های پیکربندی را می‌توان از طریق متغیر محیطی MODPROBE_OPTIONS تغییر داد. بخش محیط (ENVIRONMENT) در modprobe(8) را ببینید.

alias wildcard modulename

این دستور به شما امکان می‌دهد نام‌های جایگزینی برای یک ماژول تعیین کنید. برای نمونه: دستور "alias my-mod really_long_modulename" بدین معناست که می‌توانید به جای "modprobe really_long_modulename" از "modprobe my-mod" استفاده کنید. همچنین می‌توانید از نویسه‌های عمومی (wildcard) به سبک شل استفاده کنید، بنابراین "alias my-mod* really_long_modulename" بدین معناست که "modprobe my-mod-something" نیز همان اثر را دارد. شما نمی‌توانید برای یک نام مستعار، نام مستعار دیگری تعریف کنید (این کار فقط موجب سردرگمی و آشفتگی می‌شود)، اما نام‌های مستعار می‌توانند گزینه‌هایی داشته باشند که به هر گزینه دیگری اضافه خواهند شد.

توجه داشته باشید که ماژول‌ها می‌توانند شامل نام‌های مستعار مختص خود نیز باشند که می‌توانید با استفاده از modinfo آن‌ها را مشاهده کنید. از این نام‌های مستعار به عنوان آخرین چاره استفاده می‌شود (یعنی در صورتی که هیچ ماژول واقعی، یا دستور install، remove یا alias در پیکربندی وجود نداشته باشد).

blacklist modulename

ماژول‌ها می‌توانند شامل نام‌های مستعار مختص خود باشند: این‌ها معمولاً نام‌های مستعاری هستند که دستگاه‌های مورد پشتیبانی آن‌ها را توصیف می‌کنند، مانند "pci:123...". این نام‌های مستعار «داخلی» را می‌توان با کلیدواژه‌های معمولی "alias" بازنویسی کرد، اما مواردی وجود دارد که دو یا چند ماژول از دستگاه‌های یکسانی پشتیبانی می‌کنند، یا یک ماژول به نادرست ادعا می‌کند از دستگاهی پشتیبانی می‌کند که در واقع پشتیبانی نمی‌کند: کلیدواژه blacklist نشان می‌دهد که تمامی نام‌های مستعار داخلی آن ماژول خاص باید نادیده گرفته شوند.

install modulename command...

این دستور به modprobe دستور می‌دهد تا به جای درج عادی ماژول در هسته، دستور شما را اجرا کند. این دستور می‌تواند هر دستور شلی باشد: این امکان را به شما می‌دهد که هر نوع پردازش پیچیده‌ای را که می‌خواهید انجام دهید. برای نمونه، اگر ماژول "fred" در صورتی که ماژول "barney" از قبل نصب شده باشد بهتر کار کند (اما به آن وابستگی ندارد، بنابراین modprobe آن را به‌طور خودکار بارگذاری نخواهد کرد)، می‌توانید بنویسید: "install fred /sbin/modprobe barney; /sbin/modprobe --ignore-install fred"; که کار مورد نظرتان را انجام می‌دهد. به --ignore-install توجه کنید که از اجرای دوباره همان دستور install توسط modprobe دوم جلوگیری می‌کند. همچنین دستور remove را در ادامه ببینید.

آینده بلندمدت این دستور به‌عنوان راهکاری برای حل مشکل ارائه وابستگی‌های اضافی ماژول تضمین‌شده نیست و هدف بر این است که در نسخه‌ای در آینده، هشداری مبنی بر حذف نهایی یا منسوخ شدن جایگزین این دستور شود. استفاده از آن، تعیین خودکار وابستگی‌های ماژول توسط ابزارهای توزیع مانند mkinitrd را پیچیده می‌کند (چرا که این ابزارها اکنون باید به نحوی تفسیر کنند که دستورات install ممکن است چه کاری انجام دهند). در یک شرایط ایده‌آل، ماژول‌ها تمامی اطلاعات وابستگی را بدون نیاز به استفاده از این دستور ارائه می‌کردند و کار بر روی پیاده‌سازی پشتیبانی از وابستگی‌های نرم در هسته لینوکس در جریان است.

اگر از رشته "$CMDLINE_OPTS" در دستور استفاده کنید، با هر گزینه‌ای که در خط فرمان modprobe مشخص شده باشد جایگزین خواهد شد. این موضوع می‌تواند سودمند باشد زیرا کاربران انتظار دارند دستور "modprobe fred opt=1" آرگومان "opt=1" را به ماژول ارسال کند، حتی اگر یک دستور install در فایل پیکربندی وجود داشته باشد. بدین ترتیب مثال بالا تبدیل می‌شود به: "install fred /sbin/modprobe barney; /sbin/modprobe --ignore-install fred $CMDLINE_OPTS"

options modulename option...

این دستور به شما امکان می‌دهد هربار که ماژول modulename (که می‌تواند یک نام مستعار باشد) در هسته درج می‌شود، گزینه‌هایی به آن بیفزایید: چه به صورت مستقیم (با استفاده از modprobe modulename) و چه به این دلیل که ماژول در حال درج، به این ماژول وابسته است.

تمامی گزینه‌ها با یکدیگر ترکیب می‌شوند: آن‌ها می‌توانند از یک option برای خود ماژول، برای یک نام مستعار و یا از خط فرمان بیایند.

remove modulename command...

این دستور مشابه دستور install در بالا است، با این تفاوت که هنگام اجرای "modprobe -r" فراخوانی می‌شود.

softdep modulename pre: modules... post: modules...

دستور softdep به شما امکان می‌دهد وابستگی‌های نرم (soft) یا اختیاری ماژول را مشخص کنید. modulename می‌تواند بدون نصب بودن این ماژول‌های اختیاری استفاده شود، اما معمولاً برخی ویژگی‌ها در دسترس نخواهند بود. برای نمونه، درایور مربوط به یک کارت واسط میزبان حافظه (storage HBA) ممکن است برای استفاده از ویژگی‌های مدیریتی نیاز به بارگذاری ماژول دیگری داشته باشد.

ماژول‌های pre-deps و post-deps فهرستی از نام‌ها و/یا نام‌های مستعار دیگر ماژول‌ها هستند که modprobe تلاش می‌کند آن‌ها را به ترتیب پیش و پس از ماژول اصلی داده‌شده در آرگومان modulename نصب (یا حذف) کند.

مثال: فرض کنید دستور "softdep c pre: a b post: d e" در پیکربندی داده شده باشد. اجرای "modprobe c" اکنون معادل "modprobe a b c d e" بدون وجود softdep است. پرچم‌هایی مانند --use-blacklist برای تمامی ماژول‌های مشخص‌شده اعمال می‌شوند، در حالی که پارامترهای ماژول فقط بر روی ماژول c اعمال می‌شوند.

نکته: در صورتی که دستورات install یا remove با آرگومان modulename یکسان وجود داشته باشند، softdep اولویت خواهد داشت.

weakdep modulename modules...

دستور weakdep به شما امکان می‌دهد وابستگی‌های ضعیف (weak) ماژول را مشخص کنید. این موارد مشابه pre softdep هستند، با این تفاوت که فضای کاربری (userspace) تلاشی برای بارگذاری آن وابستگی پیش از ماژول مشخص‌شده نمی‌کند. در عوض بسته به سخت‌افزاری که به آن متصل می‌شود، هسته ممکن است در حین کاوش (probe) ماژول درخواست بارگذاری یک یا چند مورد از آن‌ها را صادر کند. هدف از ماژول ضعیف این است که به درایور اجازه دهد مشخص کند وابستگی خاصی ممکن است مورد نیاز باشد، بنابراین هنگام کاوش آن ماژول، باید در فایل‌سیستم (مثلاً در initramfs) وجود داشته باشد.

مثال: فرض کنید دستور "weakdep c a b" داده شده است. برنامه‌ای که یک initramfs ایجاد می‌کند می‌داند که باید a، b و c را به فایل‌سیستم اضافه کند زیرا ممکن است در زمان اجرا به a و b نیاز باشد. هنگامی که c بارگذاری شده و در حال کاوش است، ممکن است فراخوانی‌هایی به ()request_module ارسال کند که باعث می‌شود a یا b نیز بارگذاری شوند.

نسخه‌های آینده kmod با هشداری قوی مبنی بر اجتناب از استفاده از install (همان‌گونه که در بالا توضیح داده شد) ارائه خواهند شد. این امر زمانی رخ می‌دهد که پشتیبانی از وابستگی‌های نرم در هسته کامل شود. آن پشتیبانی با ارائه چنین وابستگی‌هایی به‌طور مستقیم درون خود ماژول‌ها، مکمل پشتیبانی موجود از softdep در این ابزار خواهد بود.

حق نشر (کپی‌رایت) این صفحه راهنما در اصل متعلق به 2004, Rusty Russell, IBM Corporation. است.

modprobe(8), modules.dep(5)

لطفاً هرگونه گزارش باگ را به سامانه ردیابی اشکالات kmod در https://github.com/kmod-project/kmod/issues همراه با نسخه استفاده‌شده، مراحل بازتولید مشکل و نتیجه مورد انتظار ارسال نمایید.

مشارکت‌های بی‌شماری از فهرست پستی linux-modules <linux-modules@vger.kernel.org> و گیت‌هاب صورت گرفته است. چنانچه کلونی از مخزن kmod.git در اختیار دارید، خروجی git-shortlog(1) و git-blame(1) می‌تواند نویسندگان بخش‌های خاصی از پروژه را به شما نشان دهد.

Lucas De Marchi <lucas.de.marchi@gmail.com> نگه‌دارنده فعلی این پروژه است.

2025-03-28 kmod