.\" Man page generated from reStructuredText .\" by the Docutils 0.22.4 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "KMIDIFF" "1" "May 01, 2026" "" "Libabigail" .SH "نام (NAME)" kmidiff \- مقایسه KMIهای درخت‌های هسته لینوکس .sp دستور \fBkmidiff\fP رابط‌های باینری ماژول‌های هسته (KMI) را میان دو درخت هسته لینوکس مقایسه می‌کند. رابط باینری KMI رابطی است که هسته لینوکس در اختیار ماژول‌های خود قرار می‌دهد. درخت‌های مورد نظر در اینجا، حاصل ساخت (build) درخت منبع هسته لینوکس هستند. .SH "رویکرد کلی (GENERAL APPROACH)" .sp نمونه‌ای از نحوه ساخت هسته در صورتی که بخواهید با استفاده از kmidiff آن را با هسته دیگری مقایسه کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX git clone \-b v4.5 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux/v4.5 cd linux/v4.5 make allyesconfig all .EE .UNINDENT .UNINDENT .sp سپس ماژول‌ها را در یک دایرکتوری نصب کنید، برای نمونه، زیردایرکتوری build/modules از درخت منبع هسته خودتان: .INDENT 0.0 .INDENT 3.5 .sp .EX mkdir build/modules make modules_install INSTALL_MOD_DIR=build/modules .EE .UNINDENT .UNINDENT .sp سپس فهرستی از رابط‌های صادرشده (exported) توسط هسته را که می‌خواهید مقایسه کنید، بسازید: .INDENT 0.0 .INDENT 3.5 .sp .EX cat > kmi\-whitelist << EOF [kernel_4.5_kmi_whitelist] init_task schedule dev_queue_xmit __kmalloc printk EOF .EE .UNINDENT .UNINDENT .sp فرض کنید کار مشابهی را برای شاخه v4.6 از هسته لینوکس انجام داده‌اید؛ اکنون این دو دایرکتوری را در اختیار دارید: \fBlinux/v4.5\fP و \fBlinux/v4.6\fP\&. ماژول‌های آن‌ها در دایرکتوری‌های \fBlinux/v4.5/build/modules\fP و \fBlinux/v4.6/build/modules\fP موجود هستند. .sp برای مقایسه KMI آن‌ها، \fBkmidiff\fP نیاز دارد بداند باینری‌های vmlinux و ماژول‌های مرتبط با آن‌ها را در کجا پیدا کند. خط فرمان به این صورت خواهد بود: .INDENT 0.0 .INDENT 3.5 .sp .EX kmidiff \e \-\-kmi\-whitelist linux/v4.6/kmi\-whitelist \e \-\-vmlinux1 linux/v4.5/vmlinux \e \-\-vmlinux2 linux/v4.6/vmlinux \e linux/v4.5/build/modules \e linux/v4.6/build/modules .EE .UNINDENT .UNINDENT .sp این ابزار از کتابخانه libabigail برای تحلیل باینری و همچنین اطلاعات اشکال‌زدایی (debug) مرتبط با آن استفاده می‌کند. در ادامه نحوه عملکرد کلی آن شرح داده شده است. .sp هنگامی که دستور اجرا صادر می‌شود، یک باینری و اطلاعات اشکال‌زدایی مرتبط با آن خوانده و تحلیل می‌شود. بدین منظور، libabigail به‌طور پیش‌فرض توصیف نوع‌های داده‌ایِ قابل‌دسترسی از طریق رابط‌هایی (توابع و متغیرها) را که خارج از واحد ترجمه (translation unit) خود قابل مشاهده هستند، تحلیل می‌کند. پس از انجام این تحلیل، یک پیکره رابط باینری برنامه (Application Binary Interface Corpus) تنها با در نظر گرفتن زیرمجموعه‌ای از نوع‌های قابل‌دسترسی از رابط‌های مرتبط با نمادهای ELF \% که توسط باینری تعریف و صادر شده‌اند، ساخته می‌شود. این همان پیکره نهایی ABI است که libabigail آن را به عنوان نمایانگر ABI باینری تحلیل‌شده در نظر می‌گیرد. .sp سپس Libabigail این توانایی را دارد که نمایش‌های متنی از پیکره‌های ABI تولید کند، آن‌ها را با یکدیگر مقایسه نماید، تغییراتشان را تحلیل کرده و درباره آن‌ها گزارش دهد. .SH "فراخوانی (INVOCATION)" .sp به‌طور کلی‌تر، \fBkmidiff\fP به این صورت فراخوانی می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX kmidiff [options] .EE .UNINDENT .UNINDENT .SH "محیط (ENVIRONMENT)" .sp به‌طور پیش‌فرض، \fBkmidiff\fP تمام رابط‌ها (توابع و متغیرهای صادرشده) را میان هسته و ماژول‌های آن مقایسه می‌کند. با این حال، در عمل ممکن است برخی کاربران بخواهند زیرمجموعه‌ای از این رابط‌ها را مقایسه نمایند. .sp به‌طور پیش‌فرض، \fBkmidiff\fP در صورت وجود، از اطلاعات اشکال‌زدایی در قالب اطلاعات اشکال‌زدایی DWARF \% استفاده می‌کند؛ در غیر این صورت، رابط‌ها را با استفاده از قالب‌های اطلاعات اشکال‌زدایی CTF \% یا BTF \% (در صورت وجود) مقایسه می‌نماید. در نهایت، اگر هیچ اطلاعات اشکال‌زدایی در این قالب‌ها یافت نشود، تنها نمادهای ELF \% را مد نظر قرار داده و افزوده شدن یا حذف آن‌ها را گزارش می‌کند. .sp سپس کاربران می‌توانند یک \(dqلیست سفید\(dq (whitelist) از رابط‌ها برای مقایسه تعریف کنند. چنین لیست سفیدی صرفاً یک فایل با قالب \(dqINI\(dq است که به این شکل است: .INDENT 0.0 .INDENT 3.5 .sp .EX [kernel_version_x86_64_whitelist] function1_name function2_name global_variable1_name .... .EE .UNINDENT .UNINDENT .sp توجه داشته باشید که نام بخش (نامی که میان دو قلاب قرار دارد) در آن فایل INI صرفاً باید با رشته \(dqwhitelist\(dq خاتمه یابد. بنابراین می‌توانید هر نامی را که می‌خواهید تعریف کنید، برای نمونه \fB[kernel_46_x86_64_whitelist]\fP\&. .sp سپس هر خط از آن فایل لیست سفید، نام یک تابع یا متغیر صادرشده است. تنها آن رابط‌ها به همراه نوع‌های قابل‌دسترسی از امضاهایشان، به‌طور بازگشتی توسط \fBkmidiff\fP مقایسه خواهند شد. .sp توجه داشته باشید که kmidiff به‌طور پیش‌فرض، نوع‌های قابل‌دسترسی از رابط‌های مرتبط با نمادهای ELF \% را که توسط هسته لینوکس \% تعریف و صادر شده‌اند، به عنوان اجتماع باینری \fBvmlinux\fP و تمام ماژول‌های کامپایل‌شده آن تحلیل می‌کند. سپس آن رابط‌ها را (به همراه نوع‌هایشان) مقایسه می‌نماید. .SH "گزینه‌ها (OPTIONS)" .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .IP \(bu 2 \fB\-\-help | \-h\fP .sp نمایش یک راهنمای کوتاه درباره دستور و خروج. .IP \(bu 2 \fB\-\-version | \-v\fP .sp نمایش نسخه برنامه و خروج. .IP \(bu 2 \fB\-\-verbose\fP .sp نمایش پیام‌های پرگو (verbose) در حین اجرا. .IP \(bu 2 \fB\-\-debug\-info\-dir1 | \-\-d1\fP <\fIdi\-path1\fP> .sp برای مواردی که اطلاعات اشکال‌زدایی باینری‌های هسته اول لینوکس در فایل‌های جداگانه‌ای تفکیک شده است، به \fBkmidiff\fP اعلام می‌کند که آن فایل‌های جداگانه اطلاعات اشکال‌زدایی را از کجا پیدا کند. .sp توجه داشته باشید که \fIdi\-path\fP باید به دایرکتوری ریشه‌ای اشاره کند که اطلاعات اشکال‌زدایی به صورت درختی در زیر آن سازماندهی شده‌اند. در سیستم‌های مبتنی بر Red Hat، این دایرکتوری معمولاً \fB/usr/lib/debug\fP است. .IP \(bu 2 \fB\-\-debug\-info\-dir2 | \-\-d2\fP <\fIdi\-path2\fP> .sp همانند \fB\-\-debug\-info\-dir1\fP، این گزینه به \fBkmidiff\fP اعلام می‌کند که اطلاعات اشکال‌زدایی تفکیک‌شده برای باینری‌های هسته دوم لینوکس را از کجا بیابد. .IP \(bu 2 \fB\-\-vmlinux1 | \-\-l1\fP <\fIpath\-to\-first\-vmlinux\fP> .sp مسیر اولین باینری \fBvmlinux\fP را برای بررسی تعیین می‌کند. این فایل باید باینری فشرده‌نشده vmlinux باشد که با اطلاعات اشکال‌زدایی کامپایل شده است. .IP \(bu 2 \fB\-\-vmlinux2 | \-\-l2\fP <\fIpath\-to\-first\-vmlinux\fP> .sp مسیر دومین باینری \fBvmlinux\fP را برای بررسی تعیین می‌کند. این فایل باید باینری فشرده‌نشده vmlinux باشد که با اطلاعات اشکال‌زدایی کامپایل شده است. .IP \(bu 2 \fB\-\-kmi\-whitelist | \-w\fP <\fIpath\-to\-interface\-whitelist\fP> .sp تعیین مسیر فایل لیست سفید رابط‌ها برای بررسی هنگام مقایسه رابط ماژول هسته (KMI) هسته اول با هسته دوم. .sp اگر این گزینه مشخص نشود، \fIتمام\fP رابط‌های صادرشده دو هسته مقایسه خواهند شد. این کار زمان زیادی می‌برد و لزوماً معنی‌دار نیست، چرا که احتمالاً نوع‌های داده‌ایِ قابل‌دسترسیِ بسیاری از رابط‌ها قرار است تغییر کنند. .sp بنابراین لطفاً اطمینان حاصل کنید که همیشه از این گزینه استفاده می‌کنید، مگر اینکه واقعاً بدانید چه کاری انجام می‌دهید. .IP \(bu 2 \fB\-\-suppressions | \-\-suppr\fP <\fIpath\-to\-suppressions\fP> .sp استفاده از یک فایل مشخصات نادیده‌گیری (suppression specification) \%<#\:suppr-spec-label> واقع در \fIpath\-to\-suppressions\fP\&. توجه داشته باشید که این گزینه می‌تواند چندین بار در خط فرمان تکرار شود. در این صورت، تمام فایل‌های مشخصات نادیده‌گیری ارائه‌شده مد نظر قرار می‌گیرند. .sp لطفاً توجه داشته باشید که به‌طور پیش‌فرض، در صورت مشخص نشدن این گزینه، فایل‌های پیش‌فرض مشخصات نادیده‌گیری \%<#\:abidiff-default-supprs-label> بارگذاری می‌شوند. .IP \(bu 2 \fB\-\-no\-change\-categorization | \-x\fP .sp این گزینه دسته‌بندی تغییرات به بی‌ضرر (harmless) و آسیب‌رسان (harmful) را غیرفعال می‌کند. توجه داشته باشید که این دسته‌بندی پیش‌نیازی برای پالایش تغییرات است، بنابراین این گزینه پالایش تغییرات را نیز غیرفعال می‌سازد. هدف این گزینه افزایش سرعت اجرای برنامه در مواردی است که گراف تغییرات بسیار بزرگ است و کاربر صرفاً علاقه‌مند است، برای مثال، بدون اهمیت دادن به تأثیر احتمالی بر رابط‌ها، به تغییرات گره‌های برگ (leaf node) نگاه کند. .IP \(bu 2 \fB\-\-ctf\fP .sp استخراج اطلاعات ABI از اطلاعات اشکال‌زدایی CTF \%، در صورت وجود در هسته و ماژول‌ها. .IP \(bu 2 \fB\-\-btf\fP .sp استخراج اطلاعات ABI از اطلاعات اشکال‌زدایی BTF \%، در صورت وجود در هسته و ماژول‌ها. .IP \(bu 2 \fB\-\-impacted\-interfaces | \-i\fP .sp مشخص کردن اینکه چه رابط‌هایی تحت تأثیر هر تغییر مجزای ABI قرار گرفته‌اند. .IP \(bu 2 \fB\-\-full\-impact | \-f\fP .sp صدور گزارش تغییری که تأثیر کامل هر تغییر بر رابط‌های صادرشده را نشان می‌دهد. این همان گزارش پیش‌فرضی است که توسط ابزارهایی مانند \fBabidiff\fP یا \fBabipkgdiff\fP ارائه می‌شود. .IP \(bu 2 \fB\-\-exported\-interfaces\-only\fP .sp هنگام استفاده از این گزینه، این ابزار توصیف نوع‌های قابل‌دسترسی توسط رابط‌هایی (توابع و متغیرها) را تحلیل می‌کند که مرتبط با نمادهای ELF \% هستند که توسط هسته لینوکس \% تعریف و صادر شده‌اند. .sp در غیر این صورت، ابزار همچنین توانایی تحلیل توصیف نوع‌های قابل‌دسترسی توسط رابط‌های مرتبط با نمادهای ELF \% را که خارج از واحد ترجمه خود قابل مشاهده هستند، دارد. با این حال، امکان اخیر به منابع بسیار بیشتری نیاز دارد و منجر به عملیات بسیار کندتری می‌شود. .sp به همین دلیل این گزینه به‌طور پیش‌فرض فعال است. .IP \(bu 2 \fB\-\-allow\-non\-exported\-interfaces\fP .sp هنگام استفاده از این گزینه، این ابزار توصیف نوع‌های قابل‌دسترسی توسط رابط‌هایی (توابع و متغیرها) را که خارج از واحد ترجمه خود قابل مشاهده هستند، تحلیل می‌کند. پس از انجام این تحلیل، یک پیکره ABI تنها با در نظر گرفتن زیرمجموعه‌ای از نوع‌های قابل‌دسترسی از رابط‌های مرتبط با نمادهای ELF \% که توسط باینری تعریف و صادر شده‌اند، ساخته می‌شود. این همان پیکره نهایی ABI است که در برابر پیکره دیگری مقایسه می‌شود. .sp اما مشکل این رویکرد آن است که تحلیل تمام رابط‌های قابل مشاهده از خارج از واحد ترجمه‌شان، می‌تواند حجم بسیار زیادی از داده‌ها را در بر داشته باشد و منجر به عملیات بسیار کند شود. .sp توجه داشته باشید که این گزینه به‌طور پیش‌فرض غیرفعال است. .IP \(bu 2 \fB\-\-show\-bytes\fP .sp نمایش اندازه‌ها و آفست‌ها به بایت، نه بیت. این گزینه به‌طور پیش‌فرض فعال است. .IP \(bu 2 \fB\-\-show\-bits\fP .sp نمایش اندازه‌ها و آفست‌ها به بیت، نه بایت. به‌طور پیش‌فرض، اندازه‌ها و آفست‌ها به بایت نمایش داده می‌شوند. .IP \(bu 2 \fB\-\-show\-hex\fP .sp نمایش اندازه‌ها و آفست‌ها در مبنای شانزده‌شانزدهی (هگزادسیمال). این گزینه به‌طور پیش‌فرض فعال است. .IP \(bu 2 \fB\-\-show\-dec\fP .sp نمایش اندازه‌ها و آفست‌ها در مبنای ده‌دهی (دسیمال). .UNINDENT .UNINDENT .UNINDENT .SH "نویسندگان (AUTHORS)" Dodji Seketeli .SH "کپی‌رایت و تکثیر (COPYRIGHT)" 2014-2025, Red Hat, Inc. .\" End of generated man page.