تعد إعادة بناء نواة Linux عملاً مثيرًا للاهتمام وغالبًا ما يخيف المبتدئين لسبب ما. ولكن لا يوجد شيء معقد في هذا الأمر، وتجميع نواة Linux ليس أكثر صعوبة من بناء (تجميع) أي برنامج آخر من المصدر. قد تكون إعادة بناء النواة ضرورية عندما تحتاج إلى بعض الميزات غير المضمنة في النواة الحالية، أو على العكس من ذلك، عندما تريد تعطيل شيء ما. سنقوم بتنفيذ جميع الإجراءات الإضافية في أوبونتو لينكس.
لتكوين نواة Linux وإنشائها، ستحتاج إلى تثبيت العديد من الحزم التي ستكون ضرورية لبناء وتكوين النواة: kernel-package، build-essential، libncurses-dev. يمكنك القيام بذلك باستخدام الأمر:
sudo apt-get install build-essential kernel-package libncurses-dev
أنت الآن بحاجة إلى تنزيل كود مصدر kernel. سنقوم بتنزيل النواة لأوبونتو. يمكنك تحميل نسخة معينةالنواة، على سبيل المثال، تلك التي أنت فيها هذه اللحظةاستخدم أو قم بتنزيل أحدث إصدار. لتحديد إصدار Linux kernel الذي تستخدمه، قم بتشغيل الأمر uname باستخدام الخيار -r:
اسم -r
سيكون إخراج الأمر شيئًا مثل هذا:
$uname -r 2.6.27-11-generic
عادةً ما يكون اسم الحزمة التي تحتوي على مصادر kernel العرض التالي: نسخة مصدر لينكس. على سبيل المثال، بالنسبة لإصدار النواة 2.6.24: linux-source-2.6.24. أكثر احدث اصدارالنواة في مستودعات أوبونتويطلق عليه ببساطة مصدر Linux، دون تحديد الإصدار في النهاية. لتثبيت أحدث مصادر Ubuntu Linux kernel، قم بتشغيل الأمر:
sudo apt-get install linux-source
يقوم هذا الأمر بتنزيل مصادر النواة ووضعها في الدليل /usr/src. وفي وقت كتابة هذا المقال، كان الإصدار الأخير من النواة الذي تم تنزيله هو 2.6.27، وهو ما سنستخدمه. إذا انتقلنا الآن إلى الدليل /usr/src وقمنا بتنفيذ الأمر ls، فسنرى أنه من بين الملفات يوجد ملف linux-source-2.6.27.tar.bz2. هذه هي أكواد مصدر Linux kernel (Ubuntu kernel).
دعنا نذهب إلى الدليل /usr/src ونقوم بفك ضغط النواة. للقيام بذلك، قم بتشغيل الأوامر التالية:
Cd /usr/src sudo tar xjf linux-source-2.6.27.tar.bz2 sudo ln -s linux-source-2.6.27 linux
الآن دعنا ننتقل إلى تكوين النواة. لكي لا نقوم بإنشاء تكوين من الصفر، سنتخذ كأساس تكوين النواة المستخدم حاليًا. يمكنك الحصول على التكوين الحالي عن طريق تشغيل الأمر make oldconfig. تشغيل في المحطة:
Cd /usr/src/linux Sudo يصنع oldconfig
سيؤدي تشغيل make oldconfig إلى إنشاء ملف .config يحتوي على خيارات تكوين kernel.
يمكنك الحصول على مساعدة بشأن كافة خيارات الإنشاء الخاصة بنواة Linux عن طريق تشغيل أمر make help.
لتغيير تكوين النواة، سوف نستخدم الأداة المساعدة لوحدة التحكم Menuconfig. لتشغيله، قم بتشغيل:
سودو يصنع القائمة
سترى واجهة يمكنك من خلالها تمكين أو تعطيل بعض خيارات kernel:
على سبيل المثال، سأقوم بتفعيل خيار "دعم كتابة NTFS". للقيام بذلك، بالضغط على الزر السفلي، ابحث عن العنصر "أنظمة الملفات" واضغط على Enter.
ستجد نفسك في قائمة إعدادات نظام الملفات. ابحث عن العنصر "أنظمة ملفات DOS/FAT/NT" في هذه القائمة واضغط على Enter.
انتقل إلى عنصر "دعم كتابة NTFS" واضغط على مسافة، ستظهر علامة النجمة بجوار العنصر، تشير إلى أنه سيتم تضمين هذا الخيار في النواة.
الآن حدد "خروج" (عن طريق الضغط على الزر الأيمن ثم أدخل) والخروج من الأداة المساعدة. قبل الخروج من الأداة المساعدة، ستظهر رسالة تطلب منك حفظ التغييرات التي تم إجراؤها، حدد نعم.
لقد حان الوقت لتجميع النواة بالتغييرات التي أجريناها في الخطوة السابقة. أولاً، لنقم بتشغيل أمر يحذف الملفات (إن وجدت) المتبقية من التجميع السابق:
Sudo make-kpkg نظيف
وأخيرًا، لبدء تجميع النواة، قم بتشغيل الأمر:
Sudo make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers
يتم استخدام رمز التبديل -append-to-version لإضافة السلسلة -mykernel إلى اسم ملف صورة النواة الذي سنحصل عليه بعد التجميع، بحيث يكون من الأسهل التعرف على النواة الخاصة بنا. بدلاً من -mykernel، يمكنك استخدام أي بادئة.
يستغرق تجميع النواة الكثير من الوقت ويمكن أن يستمر من عدة عشرات من الدقائق إلى عدة ساعات، اعتمادًا على قوة جهاز الكمبيوتر الخاص بك.
بعد تجميع النواة، تلقيت ملفي إخراج: linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb, linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00 Custom_i386.deb. سنستخدم الأمر dpkg -i، الذي سيقوم بتثبيت النواة تلقائيًا وكتابتها إلى أداة تحميل التمهيد GRUB (في الملف /boot/grub/menu.lst). ألاحظ أنه سيتم تثبيت النواة كنواة افتراضية، لذلك إذا لم يتم التمهيد لك، فستحتاج إلى التمهيد باستخدام النواة السابقة (يجب أن تكون في قائمة قائمة GRUB عند تشغيل الكمبيوتر) وتغيير الإعداد يدويًا ملف Menu.lst. لذلك، لتثبيت النواة، قم بتشغيل الأوامر:
Dpkg -i linux-image-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.27.18-mykernel_2.6.27.18-mykernel-10.00.Custom_i386.deb
دعونا نتحقق من وظائف النظام بالنواة الجديدة. قم بإعادة تشغيل جهاز الحاسوب الخاص بك. في قائمة أداة تحميل التشغيل GRUB، يجب أن ترى إدخالًا جديدًا يتوافق مع النواة الجديدة لديك، والتي يجب أن يتم تشغيلها افتراضيًا. إذا سارت الأمور على ما يرام، فسيبدأ النظام بالنواة الجديدة.
تحتوي نواة Linux على أكثر من 13 مليون سطر من التعليمات البرمجية وهي واحدة من أكبر المشاريع مفتوحة المصدر في العالم. إذن ما هي نواة لينكس وفيم يتم استخدامها؟
النواة هي أدنى مستوى من البرامج التي تتفاعل مع أجهزة الكمبيوتر. وهو مسؤول عن تفاعل جميع التطبيقات التي تعمل في مساحة المستخدم حتى المعدات المادية. كما يسمح للعمليات المعروفة بالخدمات بتلقي المعلومات من بعضها البعض باستخدام نظام IPC.
أنت تعرف بالفعل ما هي نواة Linux، ولكن ما هي أنواع النوى الموجودة؟ هناك طرق مختلفة واعتبارات معمارية عند إنشاء النواة من البداية. معظم النوى يمكن أن تكون واحدة من ثلاثة أنواع: نواة متجانسة، نواة صغيرة، وهجينة. نواة لينكس هي نواة متجانسة، في حين نواة ويندوزونظام التشغيل OS X الهجين. دعونا نلقي نظرة عامة على هذه الأنواع الثلاثة من الحبوب.
تنفذ Microkernels نهجًا تقوم فيه فقط بإدارة ما يفترض أن تقوم به: وحدة المعالجة المركزية والذاكرة وIPC. يتم التعامل مع كل شيء آخر موجود على الكمبيوتر تقريبًا كملحق ويتم التعامل معه في وضع المستخدم. تتمتع النوى الدقيقة بميزة قابلية النقل؛ حيث يمكن استخدامها على أجهزة أخرى، وحتى على نظام تشغيل آخر، طالما أن نظام التشغيل يحاول الوصول إليها المعداتبطريقة متوافقة.
تحتوي النوى الدقيقة أيضًا على حجم صغيروهي أكثر أمانًا لأن معظم العمليات تعمل في وضع المستخدم مع الحد الأدنى من الامتيازات.
الايجابيات
السلبيات
تعد النواة المتجانسة عكس النواة الدقيقة لأنها لا تغطي المعالج والذاكرة وIPC فحسب، بل تتضمن أيضًا أشياء مثل برامج تشغيل الأجهزة وإدارة نظام الملفات ونظام الإدخال / الإخراج. حبات متجانسة تعطي وصول أفضلإلى الأجهزة وتمكين تعدد المهام بشكل أفضل لأنه إذا كان البرنامج بحاجة إلى الحصول على معلومات من الذاكرة أو من عملية أخرى، فلن يحتاج إلى الانتظار في قائمة الانتظار. ولكن هذا يمكن أن يسبب بعض المشاكل، لأنه يتم تنفيذ العديد من الأشياء في وضع المستخدم المتميز. وهذا يمكن أن يضر النظام إذا تم بشكل غير صحيح.
الايجابيات:
السلبيات:
يمكن للنوى الهجينة اختيار ما يجب العمل به في وضع المستخدم وما في مساحة kernel. غالبًا ما تكون برامج تشغيل الأجهزة ونظام الملفات في مساحة المستخدم، بينما تكون IPC واستدعاءات النظام في مساحة kernel. يأخذ هذا الحل أفضل ما في كلا العالمين، ولكنه يتطلب المزيد من العمل من الشركات المصنعة للمعدات الأصلية. لأن المسؤولية الكاملة عن السائقين تقع الآن على عاتقهم.
الايجابيات
السلبيات
أين يقع نواة لينكس؟ توجد ملفات kernel الخاصة بـ Ubuntu أو أي توزيعة Linux أخرى في المجلد /boot وتسمى إصدار vmlinuz. يأتي اسم vmlinuz من عصر Unix. في الستينيات، كانت النوى تُسمى عادةً ببساطة Unix، في التسعينيات سنوات لينكسكانت النواة تسمى أيضًا Linux.
عندما تم تطوير الذاكرة الافتراضية لتسهيل تعدد المهام، ظهرت الحروف vm أمام اسم الملف للإشارة إلى أن النواة تدعم هذه التقنية. لبعض الوقت، كان يسمى النواة vmlinux، ولكن بعد ذلك لم تعد الصورة مناسبة للذاكرة bootstrap، وتم ضغطه. بعد ذلك، تم تغيير الحرف الأخير x إلى z للإشارة إلى استخدام ضغط zlib. لا يتم استخدام هذا الضغط دائمًا؛ في بعض الأحيان يمكنك العثور على LZMA أو BZIP2، لذلك تسمى بعض النوى ببساطة zImage.
يتكون رقم الإصدار من ثلاثة أرقام، ورقم إصدار Linux kernel، ورقم الإصدار الخاص بك والتصحيحات أو الإصلاحات.
لا تحتوي الحزمة /boot على نواة Linux فحسب، بل تحتوي أيضًا على ملفات مثل initrd.img وsystem.map. يتم استخدام Initrd كقرص افتراضي صغير يقوم بجلب ملف kernel الفعلي وتنفيذه. يتم استخدام ملف System.map لإدارة الذاكرة عندما لا يتم تحميل النواة بعد، ويمكن لملفات التكوين تحديد وحدات النواة التي سيتم تضمينها في صورة النواة عند بنائها.
نظرًا لأن نواة Linux عبارة عن بنية متجانسة، فهي أكبر حجمًا وأكثر تعقيدًا من الأنواع الأخرى من النوى. هذا ميزة التصميمأثارت الكثير من الجدل في الأيام الأولى لنظام Linux وما زالت تعاني من بعض عيوب التصميم المتأصلة في النوى المتجانسة.
ولكن للتغلب على أوجه القصور هذه، قام مطورو Linux kernel بشيء واحد - وحدات kernel التي يمكن تحميلها في وقت التشغيل. هذا يعني أنه يمكنك إضافة وإزالة مكونات النواة بسرعة. يمكن أن يتجاوز كل شيء إضافة وظائف الأجهزة، حيث يمكنك تشغيل عمليات الخادم وتمكين المحاكاة الافتراضية واستبدال النواة بالكامل دون إعادة التشغيل.
تخيل أنك قادر على تثبيت حزمة تحديثات ويندوزدون الحاجة إلى عمليات إعادة التشغيل المستمرة.
ماذا إذا ويندوز بالفعلكان لديه كل شيء السائقين الضروريةبشكل افتراضي، ولكن يمكنك فقط تمكين تلك التي تحتاج إليها؟ هذا هو بالضبط المبدأ الذي تطبقه وحدات Linux kernel. تحتوي وحدات Kernel، المعروفة أيضًا باسم الوحدات القابلة للتحميل (LKM)، على مهملدعم عمل النواة مع جميع الأجهزة دون استهلاك كل ذاكرة الوصول العشوائي.
تتوسع الوحدة وظائفالنواة الأساسية للأجهزة وأنظمة الملفات، مكالمات النظام. الوحدات القابلة للتحميل لها امتداد .ko وعادة ما يتم تخزينها في الدليل /lib/modules/. بفضل طبيعتها النمطية، يمكنك تخصيص النواة بسهولة شديدة عن طريق تثبيت الوحدات وتحميلها. يمكن تكوين التحميل أو التفريغ التلقائي للوحدات في ملفات التكوين أو تفريغها وتحميلها بسرعة باستخدام أوامر خاصة.
تتوفر الوحدات النمطية مغلقة المصدر المملوكة لجهات خارجية في بعض التوزيعات مثل Ubuntu، ولكن لا يتم شحنها افتراضيًا ويجب تثبيتها يدويًا. على سبيل المثال، المطورين برامج تشغيل الفيديو نفيديالا توفر كود المصدر، ولكن بدلاً من ذلك قاموا بتجميع الوحدات النمطية الخاصة بهم بتنسيق .ko. على الرغم من أن هذه الوحدات تبدو مجانية، إلا أنها ليست مجانية. ولهذا السبب لا يتم تضمينها في العديد من التوزيعات بشكل افتراضي. يعتقد المطورون أنه ليست هناك حاجة لتلويث النواة بالبرمجيات الاحتكارية.
أنت الآن أقرب إلى الإجابة على السؤال ما هي نواة لينكس. جوهر ليس السحر. إنه ضروري جدًا لتشغيل أي جهاز كمبيوتر. يختلف Linux kernel عن OS X وWindows لأنه يتضمن جميع برامج التشغيل ويقوم بالكثير من الأشياء المدعومة خارج الصندوق. الآن أنت تعرف المزيد عن كيفية برمجةوما هي الملفات المستخدمة لذلك.
التاريخ والتنظيم المعماري
نظرًا لأن الغرض من هذه المقالة هو تعريفك بنواة Linux وإعطائك نظرة عامة على بنيتها ومكوناتها الرئيسية، فلنبدأ بـ لمحة موجزةتاريخ نواة لينكس، ثم نظرة عامة على بنية نواة لينكس، وأخيرًا مناقشة لأنظمتها الفرعية الرئيسية. تحتوي نواة لينكس على أكثر من ستة ملايين سطر، لذا لا يمكن أن تكون هذه المقدمة شاملة. لمزيد من المعلومات التفصيلية، يرجى استخدام الروابط إلى موارد إضافية.
على الرغم من أن Linux يبدو أكثر أنظمة التشغيل مفتوحة المصدر شيوعًا، إلا أن تاريخه في الواقع قصير نسبيًا مقارنة بأنظمة التشغيل الأخرى. في فجر عصر الكمبيوتر، طور المبرمجون برامجهم للأجهزة العارية، باستخدام لغات يمكن للأجهزة فهمها. في حالة عدم وجود نظام تشغيل، استخدم كل ما هو كبير ومكلف حاسوبيمكن لتطبيق واحد فقط (ومستخدم واحد) القيام بذلك في أي وقت. تم تطوير أنظمة التشغيل الأولى في الخمسينيات من القرن الماضي لتسهيل الحياة على المطورين. تشمل الأمثلة نظام التشغيل جنرال موتورز (GMOS)، الذي تم تطويره لجهاز IBM 701، ونظام المراقبة FORTRAN (FMS)، الذي أنشأته شركة North American Aviation لجهاز IBM 709.
في ستينيات القرن العشرين، قام معهد ماساتشوستس للتكنولوجيا (MIT) وعدد من الشركات بتطوير نظام تشغيل تجريبي Multics (خدمة المعلومات والحوسبة المتعددة الإرسال) للآلة GE-645. أحد مطوري نظام التشغيل هذا، AT&T، ابتعد عن Multics وقام بتطوير نظام Unics الخاص به في عام 1970. تم تصميم لغة C المرفقة مع نظام التشغيل C هذا وكتابتها لجعل تطوير نظام التشغيل محمولاً.
وبعد عشرين عامًا، أنشأ أندرو تانينباوم نسخة ميكروكيرنل من UNIX® تسمى MINIX (Minimal UNIX) والتي يمكن تشغيلها على أجهزة الكمبيوتر الصغيرة. حواسيب شخصية. ألهم نظام التشغيل مفتوح المصدر هذا لينوس تورفالدس لتطوير الإصدار الأول من Linux في أوائل التسعينيات (انظر الشكل 1).
لقد نما Linux بسرعة من مبادرة متحمسة واحدة إلى مشروع عالمي يضم آلاف المطورين. أحد أهم القرارات في مصير Linux كان اعتماده تراخيص جنوالترخيص العام (GPL). قامت GPL بحماية نواة Linux من الاستغلال التجاري وفي الوقت نفسه فتحت الطريق لاستخدام مجتمع مستخدمي مشروع GNU، الذي أسسه ريتشارد ستالمان، والذي يتجاوز حجم أكواده بكثير نواة Linux. هذا جعل من الممكن استخدام مثل هذا تطبيقات مفيدة، مثل مجمع المترجمات GNU Compiler Collection (GCC) وقذائف الأوامر المختلفة.
دعنا ننتقل إلى نظرة عامة على بنية نظام التشغيل GNU/Linux. يمكن تقسيم نظام التشغيل إلى مستويين، كما هو موضح في الشكل. 2.
في المستوى الأعلى توجد مساحة المستخدم (مساحة التطبيق). هذا هو المكان الذي يتم فيه تنفيذ تطبيقات المستخدم. أسفل مساحة المستخدم توجد مساحة kernel. هذا هو المكان الذي تعمل فيه نواة Linux.
توجد أيضًا مكتبة GNU C (glibc). وهو يوفر واجهة استدعاء نظام تتواصل مع النواة وتوفر آلية للانتقال من تطبيق مساحة المستخدم إلى النواة. وهذا أمر مهم لأن النواة و تطبيق مخصصتقع في مساحات العناوين المحمية المختلفة. علاوة على ذلك، في حين أن كل عملية في مساحة المستخدم لها مساحة عنوان افتراضية خاصة بها، فإن النواة تشغل مساحة عنوان مشتركة واحدة. أكثر معلومات مفصلةيمكن العثور عليها في الأدبيات التي ترد مراجع لها في قسم "".
يمكن تقسيم نواة Linux بدورها إلى ثلاث طبقات كبيرة. في الجزء العلوي توجد واجهة استدعاء النظام، والتي يتم تنفيذها وظائف أساسية، مثل القراءة والكتابة. يوجد أسفل واجهة استدعاء النظام رمز kernel، أو بشكل أكثر دقة، رمز kernel المستقل عن البنية. هذا الرمز شائع في جميع بنيات المعالجات التي يدعمها Linux. والأقل من ذلك هو الكود المعتمد على الهندسة المعمارية، والذي يشكل ما يسمى. BSP (حزمة دعم اللوحة - حزمة دعم النظام الأساسي للأجهزة). هذا الرمز مخصص للمعالج والنظام الأساسي لبنية معينة.
مناقشة الهندسة المعمارية العظيمة و نظام معقد، يمكنك النظر إلى الأمر من وجهات نظر مختلفة. قد يكون أحد أهداف التحليل المعماري هو فهم الكود المصدري للنظام بشكل أفضل. وهذا ما سنفعله هنا.
تم تنفيذها في نواة لينكس خط كاملمهم العناصر المعمارية. على المستويين الأكثر عمومية والأكثر تفصيلاً، يمكن تقسيم النواة إلى عدة مستويات الأنظمة الفرعية المختلفة. من ناحية أخرى، يمكن النظر إلى Linux على أنه وحدة متجانسة، حيث أن كل شيء الخدمات الأساسيةتم جمعها في قلب النظام. يختلف هذا الأسلوب عن بنية النواة الدقيقة، حيث توفر النواة فقط خدمات شائعة جدًا، مثل تبادل المعلومات. يتم تنفيذ الإدخال/الإخراج وإدارة الذاكرة والعمليات وخدمات أكثر تحديدًا في وحدات متصلة بمستوى النواة الدقيقة. ولكل وجهة نظر من وجهات النظر هذه مزاياها، لكنني لن أخوض في هذه المناقشة هنا.
بمرور الوقت، أصبحت نواة Linux أكثر كفاءة من حيث استخدام الذاكرة ووحدة المعالجة المركزية وأصبحت مستقرة للغاية. ومع ذلك، فإن الجانب الأكثر إثارة للاهتمام في Linux، نظرًا لحجم النظام وتعقيده، هو قابليته للنقل. يمكن تجميع Linux لـ كمية ضخمة معالجات مختلفةوالمنصات ذات القيود والاحتياجات المعمارية المختلفة. على سبيل المثال، يمكن تشغيل Linux على معالج مزود بوحدة إدارة الذاكرة (MMU) أو بدون MMU. يتم تنفيذ دعم المعالجات التي لا تحتوي على MMU في إصدار uClinux kernel. لمزيد من المعلومات، راجع القسم " ".
دعونا نلقي نظرة على بعض المكونات الرئيسية لنواة لينكس، باتباع البنية الموضحة في الشكل. 3.
SCI عبارة عن طبقة رقيقة توفر وسيلة لاستدعاء وظائف kernel من مساحة المستخدم. كما ذكرنا سابقًا، يمكن أن تعتمد هذه الواجهة على البنية، حتى داخل نفس عائلة المعالج. SCI هي في الواقع خدمة تعدد الإرسال وإزالة تعدد الإرسال لاستدعاء الوظائف. يقع تطبيق SCI في ./linux/kernel، والجزء الخاص بالبنية موجود في ./linux/arch. يمكن العثور على مزيد من المعلومات التفصيلية حول هذا المكون في القسم.
تركز إدارة العمليات على تنفيذ العمليات. في النواة تسمى هذه العمليات تيارات(الخيوط)؛ أنها تتوافق مع كائنات المعالج الافتراضية الفردية (رمز الموضوع، البيانات، المكدس، سجلات المعالج). في مساحة المستخدم المصطلح شائع الاستخدام هو عمليةعلى الرغم من أن تطبيق Linux لا يميز بين هذين المفهومين (العمليات والخيوط). توفر النواة واجهة برمجة التطبيقات (API) عبر SCI لإنشاء عملية جديدة (إنشاء نسخة، بدء التنفيذ، استدعاء وظائف واجهة نظام التشغيل المحمولة)، إيقاف العملية (القتل، الخروج)، الاتصال والمزامنة بين العمليات (الإشارات أو آليات بوسيكس).
مهمة أخرى لإدارة العملية هي مشاركةالمعالج مع المواضيع النشطة. تطبق النواة خوارزمية جدولة مبتكرة، لا يعتمد وقت تشغيلها على عدد الخيوط المتنافسة على موارد المعالج. يؤكد اسم المجدول - O(1) - على أن الأمر يستغرق نفس القدر من الوقت لجدولة مؤشر ترابط واحد كما هو الحال لجدولة سلاسل رسائل متعددة. يدعم برنامج جدولة O(1) أيضًا تكوينات المعالجات المتعددة المتماثلة (SMP). توجد أكواد المصدر لنظام التحكم في العمليات في /linux/kernel، وأكواد الجزء المعتمد على البنية موجودة في /linux/arch). لمزيد من المعلومات حول هذه الخوارزمية، راجع القسم.
المورد المهم الآخر الذي تديره النواة هو الذاكرة. ولزيادة الكفاءة، مع مراعاة آلية عمل الأجهزة مع الذاكرة الافتراضية، يتم تنظيم الذاكرة على شكل ما يسمى. الصفحات(حجمه 4 كيلو بايت في معظم البنيات). يحتوي Linux على أدوات لإدارة الذاكرة المتوفرة، بالإضافة إلى آليات الأجهزة لتعيين الذاكرة الفعلية والافتراضية.
ومع ذلك، فإن إدارة الذاكرة هي أكثر بكثير من مجرد إدارة مخازن مؤقتة بسعة 4 كيلو بايت. يوفر Linux تجريدات لهذه المخازن المؤقتة التي يبلغ حجمها 4 كيلوبايت، مثل مُخصص اللوحة. تعتمد آلية التحكم هذه على مخازن مؤقتة تبلغ سعتها 4 كيلوبايت، ولكنها تقوم بعد ذلك بوضع الهياكل بداخلها، لتتبع الصفحات الممتلئة والصفحات الممتلئة جزئيًا والفارغة. يسمح ذلك بتوسيع الدائرة وتقليصها ديناميكيًا وفقًا لاحتياجات النظام الأساسي.
الموضوع متوفر عدد كبيرقد يواجه مستخدمو الذاكرة مواقف حيث يتم استنفاد كافة الذاكرة المتوفرة. وفي هذا الصدد، يمكن إزالة الصفحات من الذاكرة ونقلها إلى القرص. هذه عملية تبادل الصفحات بين كبشويسمى القرص الصلب مبادلة. توجد أكواد مصدر إدارة الذاكرة في ./linux/mm.
جانب آخر مثير للاهتمام في نواة Linux هو نظام الملفات الظاهري (VFS)، الذي يوفر فكرة عامة عن واجهة أنظمة الملفات. يوفر VFS طبقة تبديل بين SCI وأنظمة الملفات التي تدعمها النواة (انظر الشكل 4).
يوجد في المستوى الأعلى من VFS تجريد واحد لواجهة برمجة التطبيقات (API) لوظائف مثل فتح الملفات وإغلاقها وقراءتها وكتابتها. على المستويات الدنياتحتوي VFSs على تجريدات نظام الملفات التي تحدد كيفية تنفيذ وظائف المستوى الأعلى. إنها مكونات إضافية لأنظمة ملفات محددة (يوجد منها أكثر من 50). توجد أكواد المصدر لأنظمة الملفات في ./linux/fs.
أسفل مستوى نظام الملفات توجد ذاكرة التخزين المؤقت، والتي توفر مجموعة عامة من الوظائف لمستوى نظام الملفات (مستقلة عن نظام الملفات المحدد). تعمل طبقة التخزين المؤقت هذه على تحسين الوصول إلى الأجهزة الماديةمن خلال تخزين البيانات على المدى القصير (أو القراءة المسبقة، مما يضمن أن البيانات جاهزة عند الحاجة إليها). يوجد أسفل ذاكرة التخزين المؤقت برامج تشغيل الأجهزة التي تقوم بتنفيذ واجهات لأجهزة فعلية محددة.
حسب التصميم، تتمتع حزمة الشبكة ببنية متعددة المستويات تكرر بنية البروتوكولات نفسها. هل تتذكر أن البروتوكول بروتوكول إنترنت(IP) هو البروتوكول الأساسيطبقة الشبكة، الموجودة أسفل بروتوكول نقل الإرسال بروتوكول التحكم، برنامج التعاون الفني). فوق TCP توجد طبقة المقبس، التي يتم استدعاؤها عبر SCI.
طبقة المقبس هي واجهة برمجة تطبيقات قياسية للنظام الفرعي للشبكة. ويوفر واجهة مستخدم لبروتوكولات الشبكة المختلفة. تطبق طبقة المقبس طريقة موحدة لإدارة الاتصالات ونقل البيانات بين نقاط النهاية، بدءًا من الوصول إلى إطارات البيانات الواضحة ووحدات بيانات بروتوكول IP (PDUs) إلى بروتوكولات TCPو مخطط بيانات المستخدمالبروتوكول (UDP). يوجد الكود المصدري للنظام الفرعي لشبكة kernel في الدليل ./linux/net.
تتكون الغالبية العظمى من كود مصدر Linux kernel من برامج تشغيل الأجهزة، والتي توفر القدرة على العمل مع أجهزة محددة. تحتوي شجرة مصدر Linux على دليل فرعي لبرامج التشغيل، والذي بدوره يحتوي على أدلة فرعية لـ أنواع مختلفةالأجهزة المدعومة مثل Bluetooth، I2C، المنافذ التسلسليةإلخ. توجد رموز المصدر لبرامج تشغيل الأجهزة في ./linux/drivers.
على الرغم من أن الجزء الأكبر من Linux مستقل عن البنية التي يعمل عليها نظام التشغيل، إلا أن هناك بعض العناصر التي يجب أن تأخذ في الاعتبار البنية لضمان التشغيل والكفاءة بشكل سليم. يحتوي الدليل الفرعي ./linux/arch على الجزء الخاص بالبنية من كود مصدر kernel، مقسمًا إلى عدد من الدلائل الفرعية المقابلة لبنيات معينة. كل هذه الدلائل تشكل معًا BSP. في حالة الكمبيوتر المكتبي العادي، يتم استخدام الدليل i386. يحتوي الدليل الفرعي لكل بنية على عدد من الدلائل الفرعية المتعلقة بجوانب معينة من النواة، مثل التمهيد، والنواة، وإدارة الذاكرة، وما إلى ذلك. الكود المصدري للجزء الخاص بالبنية موجود في ./linux/arch.
إلى جانب قابلية النقل والكفاءة، تحتوي نواة Linux على عدد من الميزات الأخرى المثيرة للاهتمام التي لم يتم تناولها في المناقشة أعلاه.
يعد Linux، باعتباره نظام تشغيل مفتوح المصدر مستخدمًا على نطاق واسع في الممارسة العملية، بمثابة أرض اختبار ممتازة للبروتوكولات الجديدة وتحسيناتها. يدعم لينكس عدد كبير من بروتوكولات الشبكة، بما في ذلك TCP/IP التقليدي وامتداداته عالية السرعة (للشبكات الأسرع من Gigabit Ethernet و10 GbE). يدعم Linux أيضًا بروتوكولات مثل بروتوكول نقل التحكم في التدفق (SCTP)، الذي ينفذ العديد من البروتوكولات وظائف اضافيه، غائب في TCP (يستخدم كبروتوكول طبقة نقل بديل).
وتجدر الإشارة إلى أن نواة لينكس ديناميكية (تدعم إضافة وإزالة مكونات البرامج دون إيقاف النظام). تسمى هذه المكونات وحدات kernel المحملة ديناميكيًا. ويمكن إدخالها إلى النظام حسب الحاجة، كما هو الحال أثناء التمهيد (إذا وجدت جهاز معين، الأمر الذي يتطلب مثل هذه الوحدة)، وفي أي وقت بناءً على طلب المستخدم.
هناك تحسين آخر تم إجراؤه مؤخرًا في Linux وهو القدرة على استخدامه كنظام تشغيل لأنظمة تشغيل أخرى (يُسمى برنامج Hypervisor). في الآونة الأخيرة، تم إجراء تحسين على النواة، يسمى Kernel Based آلة افتراضية(KVM، الجهاز الظاهري القائم على Kernel). ونتيجة لهذا التعديل، تم تنفيذه في مساحة المستخدم واجهة جديدة، والذي يسمح لك بتشغيل أنظمة تشغيل أخرى أعلى نواة تدعم KVM. في هذا الوضع، لا يمكنك تشغيل مثيلات Linux الأخرى فحسب، بل يمكنك أيضًا إضفاء الطابع الافتراضي على Microsoft® Windows®. القيد الوحيد هو أن المعالج المستخدم يجب أن يدعم تعليمات المحاكاة الافتراضية الجديدة. لمزيد من المعلومات، راجع القسم.
في هذه المقالة نحن فقط في الأكثر المخطط العامتحدثت عن بنية نواة لينكس ومميزاتها وإمكانياتها. يمكن العثور على معلومات مفصلة حول محتويات النواة في دليل الوثائق، وهو متاح في أي توزيعة لينكس. تأكد من مراجعة القسم الموجود في نهاية هذه المقالة للحصول على روابط للحصول على معلومات أكثر تفصيلاً حول العديد من المواضيع التي تمت مناقشتها هنا.
في بعض الأحيان قد تحتاج إلى بناء بنفسك نواة لينكس. قد تكون أسباب ذلك ما يلي:
Sudo apt install تصحيح حزمة النواة الأساسية لدول مجلس التعاون الخليجي
sudo apt-get build-dep linux
بعد تثبيت كل شيء الأدوات اللازمة، قم بفك ضغط الأرشيف باستخدام رمز kernel في أي دليل مناسب. فليكن /الصفحة الرئيسية/المستخدم/KERNEL، أين "مستخدم"- اسم مستخدم النظام. بعد ذلك، افتح Terminal وانتقل إلى هناك:
cd /home/user/KERNEL
كل ما تبقى هو تجميع النواة:
fakeroot make-kpkg -j 3 --initrd --append-to-version=-custom kernel_image kernel_headers #-j 3
رقم 3 بعد ي- هذا هو عدد النوى للمعالج الخاص بك + 1. أي أنه بالنسبة للمعالج ثنائي النواة فهو 3، وللمعالج رباعي النواة هو 5 وهكذا.
-مخصص- هنا يمكنك تحديد اسم مناسب للنواة لتسهيل تمييزها عن التوزيعة.
kernel_imageو kernel_headers- هذه هي النواة نفسها وملفات رأسها على التوالي. الرؤوسضروري لتجميع برامج التشغيل ووحدات kernel، وكذلك لبعض الأغراض الأخرى. بعد تشغيل هذا الأمر، ستبدأ عدة أسئلة حول تكوين kernel في الظهور. وبما أننا نترك كل شيء كإعداد افتراضي، فما عليك سوى الضغط على Enter حتى يبدأ الإنشاء. اعتمادًا على قوة جهاز الكمبيوتر الخاص بك، قد يستغرق التجميع من 15 إلى 20 دقيقة إلى عدة ساعات. بعد التجميع، في الدليل /المستخدمين المنزليينسيظهر اثنان حزمة ديب: الأساسية والرؤوس. قم بتثبيتها باستخدام الأمر:
sudo dpkg -i linux-image-4.3*deb linux-headers-4.3*deb
سودو التحديث-جروب
وإعادة التشغيل. في قائمة GRUB يمكنك الآن تحديد نواة مختلفة لتشغيل النظام.
cd /home/user/KERNEL-CUSTOM
patch -p1 -i patch-4.1.13-rt15.patch --dry-run
جعل التكوين- سيتم عرض الأسئلة المتعلقة بتكوين نظام فرعي معين للنواة في الجهاز واحدًا تلو الآخر. عملية طويلة ومملة للغاية. دعنا ننسى الامر :)
جعل التكوين القديم- سيتم استخدام تكوين النواة قيد التشغيل حاليًا. نظرًا لأننا نقوم بتجميع منتجاتنا من الصفر، فهذه الطريقة أيضًا غير مجدية.
جعل إلغاء التكوين- على غرار السابق، فقط القيم ستكون افتراضية. الطريقة التي وضعها مطورو النواة. على غرار طريقة التجميع الأولى.
جعل القائمة التكوين- واجهة رسومية زائفة تعتمد على المكتبة نكورسيس. سيتم عرض واجهة بقائمة هرمية ملائمة على الشاشة. عناصر التحكم باستخدام مفاتيح الاتجاه ومفتاح المسافة ومفتاح TAB. يوصى به إذا كنت تقوم ببناء النواة على نظام لا يحتوي على غلاف رسومي.
جعل gconfig جتك، موصى به في GNOME وMate وXfce وCinnamon وUnity وغيرها من الأجهزة التي تستخدم GTK.
جعل xconfig- تعتمد على واجهة المستخدم الرسومية كيو تي. الموصى بها في كيدي. وبما أن نظامي يستخدم كيدي، سأستخدم هذه الطريقة. بالإضافة إلى ذلك، هناك طريقتان أخريان، لكن تطبيقهما لا يختلف. لذلك، بعد تطبيق التصحيحات، نبدأ جعل xconfigوهذا ما يظهر أمامنا:
هذا كل شئ. إذا كنت ترغب في ذلك (ودراسة الوثائق بعناية)، يمكنك إجراء تغييرات إضافية على التكوين (تعطيل برامج التشغيل غير الضرورية، واستخدام أنظمة فرعية إضافية، وما إلى ذلك). الآن نقوم بحفظ التكوين عبر حفظ الملف، أغلق المكوِّن وقم بتجميع النواة:
fakeroot make-kpkg -j 3 --initrd --append-to-version=-rt-custom kernel_image kernel_headers #-j 3
سودو التحديث-جروب
على جهاز الكمبيوتر الخاص بي المزود بمعالج Intel Core i3-550 (3.2 جيجا هرتز)، كانت الزيادة في الأداء ملحوظة تمامًا. ولكن الشيء الأكثر أهمية هو عند العمل LMMSو كدينليف، التأتأة الدورية، إلغاء تزامن مسارات الصوت والفيديو، وكذلك التجميد عندما حمل ثقيلعلى الأقراص الصلبة. الخلاصة - إنها تعمل! أخيرًا، سأصف نواتين معدلتين، واللتين تحظىان بشعبية كبيرة في دوائر Linux:
نواة PF- مجموعة الرقع الأكثر شعبية من الأوكراني ألكسندر ناتالينكو (المعروف أيضًا باسم ما بعد الحقيقة). هذه مجموعة من التصحيحات التي لم يتم تضمينها في النواة الرئيسية، ولكنها توفر استجابة متزايدة للنظام، وتوفر نظامًا فرعيًا للإسبات بديلًا أسرع من النظام الرئيسي، كما تقلل أيضًا من استخدام الذاكرة باستخدام تقنية التجميع صفحات متطابقة. تتضمن المجموعة:
نواة زين- المجموعة الثانية الأكثر شعبية، ولكن الأولى من حيث عدد البقع. يستخدم Zen Kernel مجموعة من العديد من المشاريع، ويقوم بتحديث التعليمات البرمجية عبر مستودع git، ويحتوي أيضًا على العديد من الأشياء الخاصة بـ Zen والتي تهدف إلى تلبية معظم احتياجات المستخدم في نواة واحدة. بعض ميزات التصحيح: drm-next، والاختبار اللاسلكي، واختيار برامج جدولة وحدة المعالجة المركزية (CFS/BFS)، وجدولة الإدخال/الإخراج BFQ، وaufs، وunionfs، وreiser4، وtuxonice، وPHC والعديد من الأشياء الأخرى التي تعتبر رائعة لتحسين أنظمة سطح المكتب أو أجهزة الكمبيوتر المحمولة. كل هذا متوفر على شكل رقعة واحدة لنواة الفانيليا. موقع رسمي . مستودع GIT. حزم لديبيان/أوبونتو.
ربما هذا كل شيء لهذا اليوم. يمكن العثور على مزيد من المعلومات في روابط المقالة. لقد قمت باختبار كل ما هو موضح في المقالة في العديد من التكوينات.
سأحاول اليوم أن أتحدث بأكبر قدر ممكن من الوضوح والإيجاز إدارة نواة Linux/UNIX.سأحاول في هذا الموضوع شرح كيفية: استخدام الصدفة للحصول على معلومات حول وحدات kernel ووحدات kernel، وتحميل وحدات kernel وإزالتها أثناء التشغيل، ومعرفة ما إذا كانت هناك حاجة إلى وحدة متصلة/معطلة على الإطلاق، وتكوين نظام التشغيللتنزيل الوحدات اللازمة.
يمكنك عرض قائمة الوحدات المتصلة حاليًا باستخدام فرق:
خادم الطباعة:/tmp/123# lsmod حجم الوحدة المستخدمة بواسطة ipv6 235396 10 حلقة 12748 0 parport_pc 22500 0 parport 31084 1 parport_pc snd_pcm 62660 0 snd_timer 17800 1 snd_pcm snd 45636 2 nd _timer soundcore 6368 1 snd snd_page_alloc 7816 1 snd_pcm psmouse 32336 0 serio_raw 4740 0 pcspkr 2432 0 i2c_piix4 7216 0 i2c_core 19828 1 i2c_piix4 ac 4196 0 زر 6096 0 evdev 8000 0 ext3 105576 5 jbd 39476 1 ext3 mbcache 7 108 1 ex t3 sd_mod 22200 7 ide_cd_mod 27684 0 cdrom 30176 1 ide_cd_mod ata_generic 4676 0 ahci 23596 6 libata 140448 2 ata_generic,ahci scsi_mod 129548 2 sd_mod,libata Dock 8304 1 libata e1000 102656 0 piix 6568 0 ide_pci_generic 3908 0 ide_core 96168 3 ide_cd_mod,piix ,ide_pci_generic حراري 1 5228 0 معالج 32576 1 مروحة حرارية 4196 0 Thermal_sys 10856 3 حراري المعالج، المروحة
في المثال أعلاه، يمكنك أن ترى أن هناك العديد من الوحدات المحملة في النظام. معظمها يأتي مع النواة ومرخصة بحرية. هناك أيضًا وحدات خاصة (على سبيل المثال، برامج تشغيل محول الفيديو NVIDIA). وفقًا لذلك، يسمح النهج المعياري بتضمين المكونات غير الحرة في النواة إذا كان ترخيص الملكية يسمح بذلك، مما يلغي الحاجة إلى الحصول على هذه الوحدات من الشركة المصنعة للأجهزة.
في المثال، يمكنك أيضًا أن ترى أن الوحدات المقابلة تدعم أجهزة مثل الفيديو، وSATA، وSCSI، والأقراص المرنة، وبطاقات الصوت، بالإضافة إلى أجهزة الشبكة، مثل IPV6، ودعم أنظمة الملفات مثل ext3، واستدعاء الإجراءات عن بعد من Sun (RPC).
بجانب اسم وحدة، يعرض الأمر lsmod أيضًا حجم الوحدة وعدد المستخدمين وأسماء المستخدمين.
أمر مودينفو يوفر معلومات حول وحدة واحدة أو أكثر.
Kernel-server:/tmp/123$ /sbin/modinfo ipv6 اسم الملف: /lib/modules/2.6.26-2-686/kernel/net/ipv6/ipv6.ko الاسم المستعار: ترخيص net-pf-10: وصف GPL: مكدس بروتوكول IPv6 لمؤلف Linux: مجموعة من العشرات تعتمد: vermagic: 2.6.26-2-686 SMP mod_unload modversions 686
في المثال أعلاه يمكنك أن ترى أن الأمر com.modinfoيعرض معلومات حول وحدة ipv6، والتي تتضمن معلمات مثل اسم الملف والمسار والترخيص والوصف ومؤلف الوحدة وما إلى ذلك. قد تختلف معلمات الوحدة وفقًا للوحدة.
أود بشكل خاص أن أتطرق إليها معلمة اسم الملفيحتوي على المسار إلى ملف الوحدة النمطية واسم الملف. ينتهي اسم ملف وحدة ipv6 بـ .كو، وهذا يخبرنا بذلك هذه الوحدةيعود الى إصدار النواة 2.6. في وقت سابق نسخة النواة - 2.4، تنتهي أسماء الوحدات بـ .o). كما ترى، توجد الوحدة في الدلائل الفرعية للدليل /lib/modules/2.6.26-2-686/، وفي هذا المسار، يتوافق الدليل 2.6.26-2-686 مع إصدار النواة (وكذلك إخراج الأمر uname -r، والذي يُستخدم بشكل نشط في كتابة البرامج النصية). تعكس بنية الدلائل الفرعية للدليل المحدد العلاقة بين وحدات kernel والغرض من الوحدات، وأعتقد أن المثال أدناه سيوضح ذلك بوضوح:
Kernel-server:/tmp/123# ls -l /lib/modules/2.6.26-2-686/kernel/ Total 12 drwxr-xr-x 3 جذر الجذر 1024 1 أكتوبر 15:40 قوس drwxr-xr-x 3 الجذر الجذر 4096 1 أكتوبر 18:02 التشفير drwxr-xr-x 54 الجذر الجذر 1024 أكتوبر 1 15:40 السائقين drwxr-xr-x 51 الجذر الجذر 3072 أكتوبر 1 18:02 fs drwxr-xr-x 6 الجذر الجذر 1024 أكتوبر 1 18:02 lib drwxr-xr-x 37 root root 1024 1 أكتوبر 15:40 net drwxr-xr-x 11 root root 1024 1 أكتوبر 18:02 صوت
في المثال يمكنك أن ترى أن وحدات النواة موجودة في الدلائل الفرعية: خ، مما يشير إلى وجود وحدات نظام الملفات هنا، صوت- وحدات بطاقات الصوتوما إلى ذلك وهلم جرا.
انها بسيطة: إذا كان العداد استعمل من قبل يساوي الصفر، فلا يتم استخدام وحدة kernel من قبل أي شخص أو أي شيء. وبناء على ذلك يمكن حذفه.
إزالة وحدة النواةيحدث كفريق com.rmmodاسم وحدة.
قد تكون هناك حاجة إلى وحدة عن بعد أثناء التشغيل؛ لتحميل الوحدة، يجب عليك تشغيل الأمر: com.insmod/path/to/module.ko
مثال مثير للاهتمام لاستخدام insmod مع أوامر أخرى:
# uname -r 2.6.27-ovz-smp-alt9 # insmod /lib/modules/`uname -r`/kernel/drivers/block/floppy.ko # rmmod floppy # modinfo -F filename floppy /lib/modules/2.6 .27-ovz-smp-alt9/kernel/drivers/block/floppy.ko # insmod $(modinfo -F filename floppy) # lsmod | grep القرص المرن 58244 0
هناك أيضا آخر فريقل إدارة الوحدة: . تكمن خصوصية هذا الأمر في أنه يزيل/يضيف وحدات مع مراعاة التبعيات بين الوحدات (يتم كتابة التبعيات بين الوحدات في الملف /lib/modules/version/modules.dep). مثال الاستخدام:
# modprobe -r vfat vfat: الجهاز أو المورد مشغول # lsmod | grep Fat vfat 13132 1 Fat 38744 1 # umount /windows/D # modprobe -r vfat # modprobe -v --show vfat /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/ Fat/fat.o /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o # lsmod | grep Fat # modprobe -v vfat /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o باستخدام /lib/modules/2.4.21-37.0.1.EL /kernel/fs/fat/fat.o بادئة إصدار الرمز "" /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o باستخدام /lib/modules/2.4 .21-37.0.1.EL/kernel/fs/vfat/vfat.o # lsmod | دهون grep vfat 13132 0 (غير مستخدمة) دهون 38744 0
كما ذكر أعلاه، وحدات النواة لها تبعيات على بعضها البعض، والتي يتم كتابتها في الملف /lib/modules/version/modules.dep. هذا الملفتم إنشاؤه بواسطة الأمر depmod، والذي عند تنفيذه يبحث في بنية الدليل /lib/modules/current_kernel_version/ويولد معلومات حول التبعيات.
أريد أيضًا أن أشير إلى أنه يوجد في Linux ملف تكوين /etc/modules.conf,الذي يخاطبه com.modprobeو com.debmod. يستخدم هذا الملف في الغالب لضبط الأسماء المستعارة للوحدة النمطية. تستخدم بعض أنظمة التشغيل ملفات تكوين مختلفة، مثل /etc/modprobe.confأو الدليل مع ملفات التكوين - /etc/modprobe.d/.
يوجد مصدر ممتاز آخر للمعلومات حول نواة Linux الحالية على /التمهيد/التكوين-2.6....باستخدامه، يمكنك الحصول على معلومات كافية (على سبيل المثال، ما إذا كانت النواة تدعم نظام الملفات cifs):
خادم Samba:~# grep CONFIG_SMB_FS /boot/config-2.6.32-5-686 # لم يتم تعيين CONFIG_SMB_FS خادم samba:~# grep CONFIG_CIFS /boot/config-2.6.32-5-686 CONFIG_CIFS=m # CONFIG_CIFS_STATS لم يتم تعيين CONFIG_CIFS_WEAK_PW_HASH=y CONFIG_CIFS_UPCALL=y CONFIG_CIFS_XATTR=y CONFIG_CIFS_POSIX=y # CONFIG_CIFS_DEBUG2 لم يتم تعيينه CONFIG_CIFS_DFS_UPCALL=y CONFIG_CIFS_EXPERIMENTAL=y
هذا كل شيء لهذا اليوم. كما هو الحال دائمًا، سأكون سعيدًا جدًا برؤية تعليقاتك! في سوف نتعلم كيفية تجميع جوهرنا.
مع أطيب التحيات، مكسيم!