.\" -*- coding: UTF-8 -*- .\" Copyright 1996, Free Software Foundation, Inc. .\" Copyright 2012, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH init_module 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم init_module, finit_module \- تحميل وحدة نواة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP /* Definition of \fBMODULE_*\fP constants */ \fB#include \fP /* Definition of \fBSYS_*\fP constants */ \fB#include \fP .P \fBint syscall(\fPunsigned long size; \fBSYS_init_module,\fP \fB void \fP\fImodule_image\fP\fB[\fP\fIsize\fP\fB], unsigned long \fP\fIsize\fP\fB,\fP \fB const char *\fP\fIparam_values\fP\fB);\fP \fBint syscall(SYS_finit_module, int \fP\fIfd\fP\fB,\fP \fB const char *\fP\fIparam_values\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .P \fIملاحظة\fP: لا توفر glibc أغلفة لنداءات النظام هذه، مما يستلزم استخدام \fBsyscall\fP(2). .SH الوصف \fBinit_module\fP() يحمل صورة ELF إلى مساحة النواة، ويؤدي أي إعادة توطين رموز ضرورية، ويُهيئ معاملات الوحدة إلى القيم المقدمة من المستدعي، ثم يشغل دالة \fIinit\fP للوحدة. تتطلب استدعاء النظام هذا صلاحية. .P تشير وسيطة \fImodule_image\fP إلى مخزن مؤقت يحتوي على الصورة الثنائية المراد تحميلها؛ تحدد \fIsize\fP حجم ذلك المخزن. يجب أن تكون صورة الوحدة صورة ELF صالحة، مبنية للنواة الجارية. .P وسيطة \fIparam_values\fP هي سلسلة تحتوي على مواصفات مفصولة بمسافات لقيم معاملات الوحدة (المعرفة داخل الوحدة باستخدام \fBmodule_param\fP() و \fBmodule_param_array\fP()). تحلل النواة هذه السلسلة وتهيئ المعاملات المحددة. كل مواصفات معامل لها الشكل: .P \fIname\fP[ \fB=\fP\fIvalue\fP [\fB,\fP\fIvalue\fP...]] .P اسم المعامل \fIname\fP هو أحد تلك المعرفة داخل الوحدة باستخدام \fImodule_param\fP() (انظر ملف مصدر نواة لينكس \fIinclude/linux/moduleparam.h\fP). قيمة المعامل \fIvalue\fP اختيارية في حالة معاملات \fIbool\fP و \fIinvbool\fP. تُحدد قيم معاملات المصفوفة كقائمة مفصولة بفواصل. .SS finit_module() .\" commit 34e1169d996ab148490c01b65b4ee371cf8ffba2 .\" https://lwn.net/Articles/519010/ استدعاء النظام \fBfinit_module\fP() يشبه \fBinit_module\fP()، لكنه يقرأ الوحدة المراد تحميلها من واصف الملف \fIfd\fP. يكون مفيدًا عندما يمكن تحديد أصالة وحدة نواة من موقعها في نظام الملفات؛ في الحالات التي يكون فيها ذلك ممكنًا، يمكن تجنب عبء استخدام الوحدات الموقعة تشفيريًا لتحديد أصالة الوحدة. وسيطة \fIparam_values\fP كما في \fBinit_module\fP(). .P .\" commit 2f3238aebedb243804f58d62d57244edec4149b2 تعدل وسيطة \fIflags\fP عملية \fBfinit_module\fP(). هي قيمة قناع بتات تُنشأ بجمع OR معًا صفرًا أو أكثر من الأعلام التالية: .TP \fBMODULE_INIT_IGNORE_MODVERSIONS\fP تجاهل تجزئات إصدار الرموز. .TP \fBMODULE_INIT_IGNORE_VERMAGIC\fP تجاهل سحر إصدار النواة. .TP \fBMODULE_INIT_COMPRESSED_FILE\fP (منذ لينكس 5.17) .\" commit b1ae6dc41eaaa98bb75671e0f3665bfda248c3e7 استخدام فك ضغط الوحدة داخل النواة. .P .\" http://www.tldp.org/HOWTO/Module-HOWTO/basekerncompat.html .\" is dated, but informative هناك بعض فحوصات الأمان المضمنة في الوحدة لضمان مطابقتها للنواة التي تُحمل ضدها. تُسجل هذه الفحوصات عند بناء الوحدة وتُتحقق عند تحميل الوحدة. أولاً، تسجل الوحدة سلسلة "vermagic" تحتوي على رقم إصدار النواة والميزات البارزة (مثل نوع وحدة المعالجة المركزية). ثانيًا، إذا بُنيت الوحدة مع تمكين خيار التهيئة \fBCONFIG_MODVERSIONS\fP، يُسجل تجزئة إصدار لكل رمز تستخدمه الوحدة. تعتمد هذه التجزئة على أنواع الوسائط وقيمة الإرجاع للدالة المسماة بالرمز. في هذه الحالة، يُتجاهل رقم إصدار النواة داخل سلسلة "vermagic"، حيث يُفترض أن تجزئات إصدار الرموز موثوقة بما يكفي. .P استخدام العلم \fBMODULE_INIT_IGNORE_VERMAGIC\fP يشير إلى أن سلسلة "vermagic" يجب تجاهلها، والعلم \fBMODULE_INIT_IGNORE_MODVERSIONS\fP يشير إلى أن تجزئات إصدار الرموز يجب تجاهلها. إذا بُنيت النواة للسماح بالتحميل القسري (أي، مهيأة مع \fBCONFIG_MODULE_FORCE_LOAD\fP)، يستمر التحميل، وإلا يفشل مع الخطأ \fBENOEXEC\fP كما هو متوقع للوحدات المشوهة. .P إذا بُنيت النواة مع \fBCONFIG_MODULE_DECOMPRESS\fP، يمكن استخدام ميزة فك الضغط داخل النواة. يمكن لرمز مساحة المستخدم التحقق مما إذا كانت النواة تدعم فك الضغط بقراءة السمة \fI/sys/module/compression\fP. إذا دعمت النواة فك الضغط، يمكن تمرير الملف المضغوط مباشرة إلى \fBfinit_module\fP() باستخدام العلم \fBMODULE_INIT_COMPRESSED_FILE\fP. يدعم مفكك ضغط الوحدة داخل النواة خوارزميات الضغط التالية: .P .RS 4 .PD 0 .IP \[bu] 3 \fIgzip\fP (منذ لينكس 5.17) .IP \[bu] \fIxz\fP (منذ لينكس 5.17) .IP \[bu] .\" commit 169a58ad824d896b9e291a27193342616e651b82 \fIzstd\fP (منذ لينكس 6.2) .PD .RE .P تنفذ النواة طريقة فك ضغط واحدة فقط. تُختار هذه الطريقة أثناء توليد الوحدة وفقًا لطريقة الضغط المختارة في تهيئة النواة. .SH "قيمة الإرجاع" عند النجاح، تُرجع استدعاءات النظام هذه 0. عند الخطأ، يُرجع \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEBADMSG\fP (منذ لينكس 3.7) توقيع الوحدة ذو تنسيق خاطئ. .TP \fBEBUSY\fP انتهاء المهلة أثناء محاولة حل مرجع رمز بواسطة هذه الوحدة. .TP \fBEFAULT\fP وسيطة عنوان تشير إلى موقع خارج مساحة العنوان القابلة للوصول للعملية. .TP \fBENOKEY\fP (منذ لينكس 3.7) .\" commit 48ba2462ace6072741fd8d0058207d630ce93bf1 .\" commit 1d0059f3a468825b5fc5405c636a2f6e02707ffa .\" commit 106a4ee258d14818467829bf0e12aeae14c16cd7 توقيع الوحدة غير صالح أو لا يملك النواة مفتاحًا لهذه الوحدة. يُرجع هذا الخطأ فقط إذا ضُبطت النواة مع \fBCONFIG_MODULE_SIG_FORCE\fP؛ إذا لم تضبط النواة مع هذا الخيار، فإن الوحدة غير الصالحة أو غير الموقعة تشوه النواة ببساطة. .TP \fBENOMEM\fP نفدت الذاكرة. .TP \fBEPERM\fP لم يكن المتصل مميزًا (لم يملك صلاحية \fBCAP_SYS_MODULE\fP)، أو تحميل الوحدة معطل (انظر \fI/proc/sys/kernel/modules_disabled\fP في \fBproc\fP(5)). .P قد تحدث الأخطاء التالية بالإضافة إلى ذلك لـ \fBinit_module\fP(): .TP \fBEEXIST\fP وحدة بهذا الاسم محملة بالفعل. .TP \fBEINVAL\fP .\" .TP .\" .BR EINVAL " (Linux 2.4 and earlier)" .\" Some .\" .I image .\" slot is filled in incorrectly, .\" .I image\->name .\" does not correspond to the original module name, some .\" .I image\->deps .\" entry does not correspond to a loaded module, .\" or some other similar inconsistency. \fIparam_values\fP غير صالح، أو جزء ما من صورة ELF في \fImodule_image\fP يحتوي على تناقضات. .TP \fBENOEXEC\fP الصورة الثنائية المقدمة في \fImodule_image\fP ليست صورة ELF، أو هي صورة ELF غير صالحة أو لبنية مختلفة. .P قد تحدث الأخطاء التالية بالإضافة إلى ذلك لـ \fBfinit_module\fP(): .TP \fBEBADF\fP الملف المشار إليه بـ \fIfd\fP لم يُفتح للقراءة. .TP \fBEFBIG\fP الملف المشار إليه بـ \fIfd\fP كبير جدًا. .TP \fBEINVAL\fP \fIflags\fP غير صالحة. .TP \fBEINVAL\fP فشلت فحوصات السلامة لمفكك الضغط، أثناء تحميل وحدة مضغوطة مع تعيين العلم \fBMODULE_INIT_COMPRESSED_FILE\fP. .TP \fBENOEXEC\fP \fIfd\fP لا يشير إلى ملف مفتوح. .TP \fBEOPNOTSUPP\fP (منذ لينكس 5.17) العلم \fBMODULE_INIT_COMPRESSED_FILE\fP مضبوط لتحميل وحدة مضغوطة، وبُنيت النواة بدون \fBCONFIG_MODULE_DECOMPRESS\fP. .TP \fBETXTBSY\fP (منذ لينكس 4.7) .\" commit 39d637af5aa7577f655c58b9e55587566c63a0af الملف المشار إليه بـ \fIfd\fP مفتوح للقراءة والكتابة. .P بالإضافة إلى الأخطاء أعلاه، إذا نُفذت دالة \fIinit\fP للوحدة وأرجعت خطأ، فإن \fBinit_module\fP() أو \fBfinit_module\fP() تفشل ويُضبط \fIerrno\fP على القيمة التي أرجعتها دالة \fIinit\fP. .SH المعايير لينكس. .SH التاريخ .TP \fBfinit_module\fP() لينكس 3.8. .P استدعاء النظام \fBinit_module\fP() غير مدعوم من glibc. لا يُقدم أي تصريح في رؤوس glibc، ولكن، من خلال غرابة تاريخية، أصدرت إصدارات glibc قبل glibc 2.23 واجهة ABI لاستدعاء النظام هذا. لذلك، لاستخدام استدعاء النظام هذا، يكفي (قبل glibc 2.23) التصريح يدويًا بالواجهة في شفرتك؛ بدلاً من ذلك، يمكنك استدعاء استدعاء النظام باستخدام \fBsyscall\fP(2). .SS "لينكس 2.4 وما قبله" في لينكس 2.4 والإصدارات الأقدم، كان استدعاء النظام \fBinit_module\fP() مختلفًا تمامًا: .P \fB#include \fP .P \fB int init_module(const char *\fP\fIname\fP\fB, struct module *\fP\fIimage\fP\fB);\fP .P (يمكن لتطبيقات مساحة المستخدم اكتشاف أي إصدار من \fBinit_module\fP() متاح باستدعاء \fBquery_module\fP()؛ يفشل الاستدعاء الأخير مع الخطأ \fBENOSYS\fP على لينكس 2.6 والإصدارات الأحدث.) .P الإصدار الأقدم من استدعاء النظام يحمل صورة الوحدة المعاد توطينها المشار إليها بـ \fIimage\fP إلى مساحة النواة ويشغل دالة \fIinit\fP للوحدة. المتصل مسؤول عن توفير الصورة المعاد توطينها (منذ لينكس 2.6، يقوم استدعاء النظام \fBinit_module\fP() بإعادة التوطين). .P تبدأ صورة الوحدة ببنية وحدة ويتبعها كود وبيانات حسب الاقتضاء. منذ لينكس 2.2، تُعرف بنية الوحدة كما يلي: .P .in +4n .EX struct module { unsigned long size_of_struct; struct module *next; const char *name; unsigned long size; long usecount; unsigned long flags; unsigned int nsyms; unsigned int ndeps; struct module_symbol *syms; struct module_ref *deps; struct module_ref *refs; typeof(int (void)) *init; typeof(void (void)) *cleanup; const struct exception_table_entry *ex_table_start; const struct exception_table_entry *ex_table_end; #ifdef __alpha__ unsigned long gp; #endif }; .EE .in .P جميع حقول المؤشر، باستثناء \fInext\fP و \fIrefs\fP، يُتوقع أن تشير داخل جسم الوحدة وتُهيأ كما هو مناسب لمساحة النواة، أي معاد توطينها مع بقية الوحدة. .SH ملاحظات يمكن العثور على معلومات حول الوحدات المحملة حاليًا في \fI/proc/modules\fP وفي أشجار الملفات تحت الدلائل الفرعية لكل وحدة تحت \fI/sys/module\fP. .P انظر ملف مصدر نواة لينكس \fIinclude/linux/module.h\fP للحصول على بعض المعلومات الخلفية المفيدة. .SH "انظر أيضًا" \fBcreate_module\fP(2)، \fBdelete_module\fP(2)، \fBquery_module\fP(2)، \fBlsmod\fP(8)، \fBmodprobe\fP(8) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .