DEPMOD(8) depmod DEPMOD(8)

depmod - ایجاد فایل‌های modules.dep و فایل‌های نگاشت

depmod [-b basedir] [-m moduledir] [-o outdir] [-e] [-E Module.symvers]
[-F System.map] [-n] [-v] [-A] [-P prefix] [-w] [version]

depmod [-e] [-E Module.symvers] [-F System.map] [-n] [-v] [-P prefix]
[-w] [version] [filename...]

ماژول‌های هسته لینوکس می‌توانند خدماتی (با نام «نمادها» یا symbols) را برای استفاده سایر ماژول‌ها ارائه دهند (با استفاده از یکی از انواع EXPORT_SYMBOL در کد منبع). اگر ماژول دومی از این نماد استفاده کند، مشخصاً به ماژول اول وابسته است. این وابستگی‌ها می‌توانند بسیار پیچیده شوند.

دستور depmod با خواندن تمام ماژول‌های موجود در مسیر <BASEDIR>/<MODULEDIR>/version فهرستی از وابستگی‌های ماژول‌ها ایجاد می‌کند. به‌طور پیش‌فرض <MODULEDIR> برابر /lib/modules و <BASEDIR> خالی است. برای بازنویسی و تغییر این مقادیر در صورت نیاز، گزینه‌های زیر را ببینید. این دستور مشخص می‌کند که هر ماژول چه نمادهایی را صادر (export) کرده و به چه نمادهایی نیاز دارد. این فهرست در فایل modules.dep و نسخه دودویی هش‌شده آن به نام modules.dep.bin در همان دایرکتوری ذخیره می‌شود. اگر نام فایل‌ها در خط فرمان مشخص شده باشد، تنها آن ماژول‌ها بررسی می‌شوند (که به‌ندرت کاربرد دارد مگر اینکه تمام ماژول‌ها فهرست شده باشند). همچنین depmod فهرستی از نمادهای ارائه‌شده توسط ماژول‌ها را در فایلی با نام modules.symbols و نسخه دودویی هش‌شده آن، modules.symbols.bin ایجاد می‌کند. در نهایت، اگر ماژول‌ها نام‌های خاص دستگاه (devname) را ارائه دهند که باید در زمان بوت (توسط ابزاری مانند systemd-tmpfiles) در /dev بارگذاری شوند، depmod فایلی با نام modules.devname تولید خواهد کرد.

اگر یک version (نسخه) مشخص شود، دایرکتوری ماژول مربوط به آن نسخه هسته به‌جای نسخه جاری هسته (که توسط uname -r برگردانده می‌شود) استفاده خواهد شد.

-a, --all

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

-A, --quick

این گزینه پیش از انجام هر کاری بررسی می‌کند که آیا ماژولی جدیدتر از فایل modules.dep وجود دارد یا خیر؛ در صورتی که ماژول جدیدتری نباشد، به‌جای بازتولید فایل‌ها، بدون هیچ خروجی خارج می‌شود.

-b basedir, --basedir=basedir

بازنویسی دایرکتوری پایه <BASEDIR> که ماژول‌ها در آن قرار دارند. اگر ماژول‌های شما در حال حاضر در دایرکتوری (عادی) /lib/modules/version قرار ندارند، بلکه در یک ناحیه آماده‌سازی (staging) هستند، می‌توانید یک basedir مشخص کنید که به ابتدای نام دایرکتوری اضافه شود. این basedir از فایل حاصل modules.dep حذف می‌شود، بنابراین آماده انتقال به مکان عادی خواهد بود. اگر توزیع‌کننده‌ای هستید که نیاز دارید فایل‌های متادیتا را پیشاپیش ایجاد کنید به‌جای اینکه بعداً دوباره depmod را اجرا نمایید، از این گزینه استفاده کنید.

اگر یک مسیر نسبی داده شود، نسبت به دایرکتوری کاری جاری محاسبه می‌شود.

مثال:

depmod -b /my/build/staging/dir/

این دستور انتظار دارد تمام فایل‌های ورودی در مسیر /my/build/staging/dir/lib/modules/$(uname -r) باشند و فایل‌های نمایه را زیر همان دایرکتوری تولید می‌کند.

-m moduledir, --moduledir=moduledir

بازنویسی دایرکتوری ماژول <MODULEDIR> که به‌طور پیش‌فرض برابر با پیشوند /lib/modules تعیین‌شده در زمان ساخت است. این گزینه هنگام ساخت فایل modules.dep در basedir برای سیستمی که از پیشوند متفاوتی استفاده می‌کند (مانند /usr/lib/modules در مقایسه با /lib/modules) کاربرد دارد.

مسیرهای نسبی و مطلق پذیرفته می‌شوند، اما همیشه نسبت به basedir سنجیده می‌شوند.

مثال‌ها:

depmod -b /tmp/build -m /kernel-modules
depmod -b /tmp/build -m kernel-modules

این دستور انتظار دارد تمام فایل‌های ورودی در مسیر /tmp/build/kernel-modules/$(uname -r) قرار داشته باشند و فایل‌های نمایه را زیر همان دایرکتوری تولید می‌کند.

بدون آرگومان همگام -b، مقدار moduledir نسبت به / سنجیده می‌شود.

مثال:

depmod -m foo/bar

این دستور انتظار دارد تمام فایل‌های ورودی در مسیر /foo/bar/$(uname -r) باشند و فایل‌های نمایه را در همان دایرکتوری تولید می‌کند. توجه داشته باشید که مگر در صورتی که libkmod برای مدیریت این مکان دلخواه آماده شده باشد، در زمان اجرا کار نخواهد کرد.

-o outdir, --outdir=outdir

تعیین دایرکتوری خروجی که در آن depmod فایل‌های تولیدشده را ذخیره خواهد کرد. outdir مشابه با نحوه استفاده از basedir به عنوان ریشه آن مکان عمل می‌کند. همچنین این تنظیم اولویت دارد و در صورت استفاده همراه با basedir، ورودی از آن دایرکتوری خوانده شده اما خروجی در مکان تعیین‌شده با outdir ذخیره می‌شود.

اگر یک مسیر نسبی داده شود، نسبت به دایرکتوری کاری جاری محاسبه می‌شود.

مثال:

depmod -o /my/build/staging/dir/

این دستور انتظار دارد تمام فایل‌های ورودی زیر مسیر /lib/modules/$(uname -r) باشند و فایل‌های نمایه را در مسیر /my/build/staging/dir/lib/modules/$(uname -r) تولید می‌کند.

-C file or directory, --config=file or directory

این گزینه فایل‌های پیکربندی پیش‌فرض را بازنویسی می‌کند. به depmod.d(5) مراجعه کنید.

-e, --errsyms

در صورت ترکیب با گزینه -F، هر نمادی را که یک ماژول نیاز دارد اما توسط سایر ماژول‌ها یا هسته ارائه نشده است گزارش می‌کند. به‌طور معمول فرض بر این است که نمادهای ارائه‌نشده توسط ماژول‌ها توسط هسته تأمین می‌شوند (که در یک سیستم ایده‌آل باید چنین باشد)، اما این فرض به‌ویژه هنگامی که درایورهای شخص ثالثِ به‌روزرسانی‌شده به‌درستی نصب نشده یا اشتباه ساخته شده باشند ممکن است نقض شود.

-E Module.symvers, --symvers=Module.symvers

در صورت ترکیب با گزینه -e، هر نسخه از نمادهای ارائه‌شده توسط ماژول‌ها را که با نسخه نماد ارائه‌شده توسط هسته در فایل Module.symvers مطابقت ندارد گزارش می‌کند. این گزینه با -F ناسازگار است.

-F System.map, --filesyms=System.map

با ارائه فایل System.map تولیدشده در زمان ساخت هسته، به گزینه -e اجازه می‌دهد نمادهای حل‌نشده را گزارش کند. این گزینه با -E ناسازگار است.

-h, --help

چاپ پیام راهنما و خروج.

-n, --show, --dry-run

فایل حاصل modules.dep و انواع فایل‌های نگاشت (map) را به‌جای نوشتن در دایرکتوری ماژول، به خروجی استاندارد ارسال می‌کند.

-P

برخی معماری‌ها کاراکتری اضافی را به ابتدای نمادها اضافه می‌کنند. این گزینه یک کاراکتر پیشوند (برای مثال '_') را برای نادیده گرفتن مشخص می‌کند.

-v, --verbose

در حالت پرگو (verbose)، دستور depmod تمام نمادهایی را که هر ماژول به آن‌ها وابسته است و همچنین نام فایل ماژولی را که آن نماد را تأمین می‌کند در خروجی استاندارد چاپ می‌کند.

-V, --version

نمایش نسخه برنامه و خروج. برای نکات مربوط به اجرا روی هسته‌های قدیمی‌تر به بخش‌های پایین مراجعه کنید.

-w

هشدار در مورد وابستگی‌ها، نام‌های مستعار (alias)، نسخه‌های نماد تکراری و موارد مشابه.

حق نشر این صفحه راهنما در اصل متعلق به 2002، Rusty Russell، شرکت IBM Corporation است. بخشی از حق نشر متعلق به Jon Masters و دیگران است.

depmod.d(5), 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