table of contents
- unstable 4.31.0-1
| kexec_load(2) | System Calls Manual | kexec_load(2) |
الاسم¶
kexec_load, kexec_file_load - تحميل نواة جديدة للتنفيذ لاحقًا
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <linux/kexec.h> /* Definition of KEXEC_* constants */ #include <sys/syscall.h> /* Definition of SYS_* constants */ #include <unistd.h>
long syscall(SYS_kexec_load, unsigned long entry,
unsigned long nr_segments,
struct kexec_segment segments[nr_segments],
unsigned long flags);
long syscall(SYS_kexec_file_load, int kernel_fd, int initrd_fd,
unsigned long cmdline_len, const char cmdline[cmdline_len],
unsigned long flags);
ملاحظة: لا توفر glibc أغلفة لنداءات النظام هذه، مما يستلزم استخدام syscall(2).
الوصف¶
استدعاء النظام kexec_load() يحمل نواة جديدة يمكن تنفيذها لاحقًا بواسطة reboot(2).
الوسيطة flags هي قناع بت يتحكم في عملية الاستدعاء. يمكن تحديد القيم التالية في flags:
- KEXEC_ON_CRASH (منذ Linux 2.6.13)
- تنفيذ النواة الجديدة آليًا عند تعطل النظام. تُحمّل هذه "نواة التعطل" في منطقة من الذاكرة المحجوزة تُحدد عند الإقلاع باستخدام معلمة سطر أوامر النواة crashkernel. يتم تصدير موقع هذه الذاكرة المحجوزة إلى مساحة المستخدم عبر ملف /proc/iomem، في إدخال بعنوان "Crash kernel". يمكن لتطبيق في مساحة المستخدم تحليل هذا الملف وإعداد قائمة من المقاطع (انظر أدناه) تحدد هذه الذاكرة المحجوزة كوجهة. إذا تم تحديد هذه العلامة، تتحقق النواة من أن المقاطع الهدف المحددة في segments تقع ضمن المنطقة المحجوزة.
- KEXEC_PRESERVE_CONTEXT (منذ Linux 2.6.27)
- الحفاظ على حالات العتاد والبرمجيات للنظام قبل تنفيذ النواة الجديدة. يمكن استخدام هذا لتعليق النظام. هذه العلامة متاحة فقط إذا تم تكوين النواة مع CONFIG_KEXEC_JUMP، وتكون فعالة فقط إذا كان nr_segments أكبر من 0.
البتات العليا (المقابلة للقناع 0xffff0000) من flags تحتوي على بنية النواة المراد تنفيذها. حدد (أو) الثابت KEXEC_ARCH_DEFAULT لاستخدام البنية الحالية، أو أحد ثوابت البنية التالية KEXEC_ARCH_386، KEXEC_ARCH_68K، KEXEC_ARCH_X86_64، KEXEC_ARCH_PPC، KEXEC_ARCH_PPC64، KEXEC_ARCH_IA_64، KEXEC_ARCH_ARM، KEXEC_ARCH_S390، KEXEC_ARCH_SH، KEXEC_ARCH_MIPS، و KEXEC_ARCH_MIPS_LE. يجب أن تكون البنية قابلة للتنفيذ على وحدة المعالجة المركزية للنظام.
الوسيطة entry هي عنوان الدخول الفعلي في صورة النواة. الوسيطة nr_segments هي عدد المقاطع المشار إليها بواسطة المؤشر segments؛ تفرض النواة حدًا (اعتباطيًا) قدره 16 على عدد المقاطع. الوسيطة segments هي مصفوفة من بنى kexec_segment التي تحدد تخطيط النواة:
struct kexec_segment {
void *buf; /* Buffer in user space */
size_t bufsz; /* Buffer length in user space */
void *mem; /* Physical address of kernel */
size_t memsz; /* Physical address length */
};
تُنسخ صورة النواة المحددة بواسطة segments من العملية المستدعية إلى النواة إما في الذاكرة العادية أو في الذاكرة المحجوزة (إذا تم تعيين KEXEC_ON_CRASH). تقوم النواة أولاً بإجراء فحوصات سلامة متنوعة على المعلومات الممررة في segments. إذا نجحت هذه الفحوصات، تنسخ النواة بيانات المقطع إلى ذاكرة النواة. يُنسخ كل مقطع محدد في segments كما يلي:
- •
- buf و bufsz يحددان منطقة ذاكرة في مساحة العنوان الافتراضية للمستدعي التي هي مصدر النسخ. قد لا تتجاوز القيمة في bufsz القيمة في الحقل memsz.
- •
- mem و memsz يحددان نطاق عنوان فعلي هو هدف النسخ. يجب أن تكون القيم المحددة في كلا الحقلين مضاعفات لحجم صفحة النظام.
- •
- تُنسخ bufsz بايت من المخزن المؤقت المصدر إلى المخزن المؤقت الهدف للنواة. إذا كان bufsz أقل من memsz، فتُصفّر البايتات الزائدة في المخزن المؤقت للنواة.
في حالة kexec عادي (أي، عدم تعيين علامة KEXEC_ON_CRASH)، تُحمل بيانات المقطع في أي ذاكرة متاحة وتُنقل إلى الوجهة النهائية عند وقت إعادة تشغيل kexec (مثلًا، عند تنفيذ أمر kexec(8) مع الخيار -e).
في حالة kexec عند الذعر (أي، تعيين علامة KEXEC_ON_CRASH)، تُحمل بيانات المقطع إلى الذاكرة المحجوزة في وقت الاستدعاء، وبعد تعطل، تمرر آلية kexec التحكم ببساطة إلى تلك النواة.
استدعاء النظام kexec_load() متاح فقط إذا تم تكوين النواة مع CONFIG_KEXEC.
kexec_file_load()¶
استدعاء النظام kexec_file_load() مشابه لـ kexec_load()، لكنه يأخذ مجموعة مختلفة من الوسائط. يقرأ النواة المراد تحميلها من الملف المشار إليه بواسطة واصف الملف kernel_fd، و initrd (قرص RAM الأولي) المراد تحميله من الملف المشار إليه بواسطة واصف الملف initrd_fd. الوسيطة cmdline هي مؤشر إلى مخزن مؤقت يحتوي على سطر أوامر النواة الجديدة. الوسيطة cmdline_len تحدد حجم المخزن المؤقت. يجب أن تكون آخر بايت في المخزن المؤقت بايت فارغ ('\0').
الوسيطة flags هي قناع بت يعدل سلوك الاستدعاء. يمكن تحديد القيم التالية في flags:
- KEXEC_FILE_UNLOAD
- تفريغ النواة المحملة حاليًا.
- KEXEC_FILE_ON_CRASH
- تحميل النواة الجديدة في منطقة الذاكرة المحجوزة لنواة التعطل (كما في KEXEC_ON_CRASH). تُقلع هذه النواة إذا تعطلت النواة الجاري تشغيلها حاليًا.
- KEXEC_FILE_NO_INITRAMFS
- تحميل initrd/initramfs اختياري. حدد هذه العلامة إذا لم يتم تحميل أي initramfs. إذا تم تعيين هذه العلامة، يُتجاهل القيمة الممررة في initrd_fd.
أُضيف استدعاء النظام kexec_file_load() لتوفير دعم للأنظمة حيث يجب تقييد تحميل "kexec" فقط للنوى الموقعة. استدعاء النظام هذا متاح فقط إذا تم تكوين النواة مع CONFIG_KEXEC_FILE.
قيمة الإرجاع¶
عند النجاح، تُرجع استدعاءات النظام هذه 0. عند الخطأ، يُرجع -1 ويُضبط errno للإشارة إلى الخطأ.
الأخطاء¶
- EADDRNOTAVAIL
- تم تحديد علامة KEXEC_ON_CRASH، لكن المنطقة المحددة بواسطة حقلي mem وmemsz لأحد إدخالات segments تقع خارج نطاق الذاكرة المحجوزة لنواة التعطل.
- EADDRNOTAVAIL
- القيمة في حقل mem أو memsz في أحد إدخالات segments ليست مضاعفًا لحجم صفحة النظام.
- EBADF
- kernel_fd أو initrd_fd ليس واصف ملف صالحًا.
- EBUSY
- نواة تعطل أخرى قيد التحميل بالفعل أو نواة تعطل قيد الاستخدام بالفعل.
- EINVAL
- flags غير صالحة.
- EINVAL
- قيمة حقل bufsz في أحد إدخالات segments تتجاوز القيمة في حقل memsz المقابل.
- EINVAL
- nr_segments يتجاوز KEXEC_SEGMENT_MAX (16).
- EINVAL
- تتداخل مخازن الهدف النووية اثنان أو أكثر.
- EINVAL
- القيمة في cmdline[cmdline_len-1] ليست '\0'.
- EINVAL
- الملف المشار إليه بواسطة kernel_fd أو initrd_fd فارغ (طوله صفر).
- ENOEXEC
- kernel_fd لا يشير إلى ملف مفتوح، أو لا تستطيع النواة تحميل هذا الملف. حاليًا، يجب أن يكون الملف bzImage ويحتوي على نواة x86 قابلة للتحميل فوق 4 جيبي بايت في الذاكرة (انظر ملف مصدر النواة Documentation/arch/x86/boot.rst).
- ENOMEM
- تعذر تخصيص الذاكرة.
- EPERM
- لا يمتلك المتصل إمكانية CAP_SYS_BOOT.
المعايير¶
لينكس.
التاريخ¶
- kexec_load()
- لينكس 2.6.13.
- kexec_file_load()
- لينكس 3.17.
انظر أيضًا¶
reboot(2), syscall(2), kexec(8)
ملفات مصدر النواة Documentation/kdump/kdump.rst وDocumentation/admin-guide/kernel-parameters.txt
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |