دعم مكتبة Picolibc في GCC 16 للأنظمة المدمجة

آخر تحديث: 19 يناير 2026
نبذة عن الكاتب: تكنوديجيتال
  • يدمج GCC 16 دعمًا أصليًا لـ Picolibc، وهي مكتبة libc C خفيفة الوزن للغاية موجهة نحو الأنظمة المدمجة.
  • يُضيف التكامل أهدافًا *-picolibc-* وخيارات جديدة مثل --oslib=, --crt0= y --printf=.
  • يقلل Picolibc بشكل كبير من حجم البرامج الثابتة مقارنة بـ Newlib و Newlib-nano، وهو أمر أساسي لتطبيقات إنترنت الأشياء والحافة.
  • يجمع GCC 16 هذا الدعم مع التحسينات في البنى الحديثة و C++20 بشكل افتراضي، مما يعزز دوره في النظام البيئي المدمج.

دعم مكتبة Picolibc في GCC 16 للأنظمة المدمجة

وصول GCC 16 مع دعم أصلي لـ Picolibc إنه يثير الكثير من الحماس في عالم تطوير الأنظمة المدمجةإنها ليست مجرد "نسخة أخرى" من نفس المترجم القديم، بل خطوة مهمة نحو سلاسل أدوات أخف وزنًا وأكثر دقة بالنسبة لوحدات التحكم الدقيقة، وأجهزة إنترنت الأشياء، وأنظمة الحافة حيث كل بايت مهم.

يقف وراء هذه الخطوة المطور المخضرم كيث باكارد، المعروف بعمله على X.Orgلطالما روّجت شركة GCC لمكتبة Picolibc باعتبارها مكتبة C قياسية بسيطة للأنظمة المدمجة. ومع دمجها في GCC 16، انتهت الحاجة إلى التعديلات المخصصة والتكوينات المعقدة والحلول غير التقليدية لربط هذه المكتبة. يصبح تطبيق Picolibc مواطناً من الدرجة الأولى ضمن النظام البيئي لدول مجلس التعاون الخليجي.

ما هو Picolibc ولماذا تم دمجه في GCC 16؟

Picolibc هي مكتبة C قياسية خفيفة الوزن للغاية تم تصميمها خصيصًا للأنظمة المدمجة 32 بت و 64 بت، وقد نشأت من تقارب وإعادة هيكلة Newlib و AVR Libc، بهدف واضح: تقليل استهلاك الموارد. ذاكرة القراءة فقط (ROM) وذاكرة الوصول العشوائي (RAM) دون التخلي عن الوظائف الأساسية للغة C.

على عكس البدائل الأخرى الأثقل وزنًا، تم تصميم Picolibc بحيث يمكن لبرنامج الربط التخلص بسهولة من التعليمات البرمجية غير المستخدمة.يُتيح هذا النظام تحكمًا دقيقًا للغاية في تحديد أجزاء المكتبة التي تُضمّن فعليًا في الملف التنفيذي النهائي. يُعدّ هذا مثاليًا لوحدات التحكم الدقيقة حيث تُقاس سعة التخزين ببضعة كيلوبايتات، ويمثل كل قسم إضافي من التعليمات البرمجية استثمارًا كبيرًا. تكلفة إضافية، واستهلاك، وتعقيد.

حتى الآن، كان استخدام مكتبة Picolibc مع GCC متضمنًا. لبناء سلسلة أدوات يدوياً تقريباًأدى تجميع المكتبة، وتعديل نظام التشغيل الأساسي، وتغيير نصوص الإقلاع، وتطبيق التصحيحات، وما إلى ذلك، إلى نتائج قوية، لكن الصعوبات أعاقت العديد من الفرق. مع GCC 16، يتغير هذا السيناريو جذريًا، حيث يتضمن المترجم دعمًا مباشرًا ورسميًا. لهذا المكتبة المدمجة libc.

يكمن المفتاح في أن شجرة كود GCC 16 تتضمن التغييرات اللازمة للتعرف عليها أهداف من النوع *-picolibc-* وخيار التكوين --with-picolibcوبالتالي، عند بناء المترجم أو استخدام سلسلة أدوات جاهزة، يصبح Picolibc خيارًا مدعومًا من المصنعبدون أي أعمال يدوية في الجوار.

تكامل مكتبة Picolibc في GCC 16: التفاصيل والخيارات الجديدة

لا يقتصر دور التصحيح الذي تم دمجه في مستودع GCC 16 على إضافة الاعتراف بـ Picolibc كبديل لـ libc فحسب: كما أنه يقدم خيارات خاصة بالمترجم صُممت للاستفادة من هذه البيئة خفيفة الوزن في الأنظمة المدمجة.

من ناحية أخرى، يمكن الآن لـ GCC العمل بسلاسة مع أهداف هذا النمط *-picolibc-* (على سبيل المثال ، arm-none-picolibc-eabiعلاوة على ذلك، عند تجميع GCC، من الممكن تمرير --with-picolibc بحيث يقوم برنامج التهيئة بإعداد البيئة باستخدام هذه المكتبة كهدف رئيسي، وإدارتها ملفات النظام الجذرية، وملفات الرأس، وملفات التمهيد أوتار أغنية Picolibc.

إلى جانب هذا التكامل الأساسي، تكشف الرقعة عن سلسلة من خيارات إضافية مثيرة للاهتمام للغاية عند تجميعها لـ Picolibc:

  • --oslib=يُتيح لك ذلك اختيار وحدات مختلفة تُنفذ واجهة مع نظام التشغيل أو بيئة التشغيل، وهو أمر أساسي إذا كنت تعمل على نظام تشغيل أساسي (Bare Metal). نظام تشغيل خفيف في الوقت الحقيقي أو في أجهزة المحاكاة.
  • --crt0=: يحدد ملف الإقلاع C (crt0) لاستخدامه، مما يتيح مساحة لـ قم بتكييف تسلسل الإقلاع لكل لوحة، أو برنامج تحميل الإقلاع، أو متطلبات التهيئة.
  • --printf=: يوفر خيارًا بين التنفيذ الكامل لـ printf أو نسخ مختصرة، على سبيل المثال نسخ مبسطة تركز على الأعداد الصحيحة مما يوفر كمية كبيرة من ذاكرة البرنامج.
  كيفية تحويل قرص MBR إلى GPT دون فقدان البيانات

غالباً ما يُحدث هذا الخيار الأخير فرقاً كبيراً في المشاريع الحقيقية: عائلة الدوال printf عادة ما يكون الجزء الأثقل من مكتبة libc. إن القدرة على اختيار نسخة مصغرة، ربما الاحتفاظ فقط بما هو ضروري لسجلات UART الأساسية، تسمح بأن يكون الملف الثنائي النهائي أكثر إحكاما، وهو أمر حيوي في الأجهزة منخفضة التكلفة للغاية.

تستخدم بعض التدفقات أيضًا وحدات الماكرو والعلامات مثل -Dsystem-libc وتكوينات جذر النظام المرتبطة بـ Picolibc، بحيث يعتبر المترجم هذه المكتبة بمثابة التنفيذ الافتراضي لمكتبة libc دون الحاجة إلى إضافة عشرات العلامات إلى كل استدعاء لـ GCC.

المسار نحو "تنوع المكتبات" في دول مجلس التعاون الخليجي

لم يأتِ إدراج بيكوليبك في مؤتمر مجلس التعاون الخليجي 16 من فراغ؛ بل سبقه نقاش داخل مشروع مجلس التعاون الخليجي نفسه حول الحاجة إلى تعزيز التنوع في المكتبات (ج) مدعوم رسميًا. قبل حوالي عام، كان هناك حديث بالفعل على قوائم البريد الإلكتروني حول تمكين مكتبات libc المختلفة المُكيَّفة مع سياقات محددة، وظهرت مكتبة Picolibc كمرشح واضح للعالم المُدمج.

خلال هذه الفترة، ذهب كيث باكارد قم بصقل وتقديم نسخ متتالية من التصحيح إلى القائمة gcc-patchesتم تعديل التكامل ليتوافق مع معايير الجودة وسهولة الصيانة الخاصة بالمترجم. وقد ساهمت المناقشات مع القائمين على صيانة GCC في تحسين تفاصيل مثل اختيار الهدف، وتنظيم ملفات الدعم، واستخدام الخيارات المخصصة.

نتيجة هذه العملية التعاونية هي عملية تكامل ليست مجرد ترقيع بسيط، بل امتداد متوافق تمامًا مع البنية الداخلية لـ GCCوهذا يعزز فكرة "تنوع مكتبة libc": الآن، بالإضافة إلى التركيبات المعتادة مع glibc أو Newlib أو uClibc في بيئات معينة، ينضم بيكوليبك إلى القائمة كبديل خفيف الوزن ومستدام داخل شجرة GCC نفسها.

يتماشى هذا النهج بشكل جيد للغاية مع اتجاهات الصناعة الحالية، حيث تُستخدم بنى معمارية مثل RISC-V، وملفات تعريف ARMv9 الجديدة، وأنظمة SoC المتخصصة لتطبيقات محددة. إن وجود مكتبة libc معيارية وبسيطة يجعل من السهل على نفس المترجم التكيف مع كل من خادم قوي وعقدة استشعار بذاكرة فلاش لا تتجاوز بضعة كيلوبايتات.

العلاقة مع Newlib و Newlib-nano ومكتبات libcs ​​الخفيفة الأخرى

لفهم ما يقدمه Picolibc، من المفيد مقارنته بالخيارات الكلاسيكية الأخرى. أما Newlib فهو موجود منذ سنوات عديدة. مرجع مكتبة libc للبيئات المدمجة استنادًا إلى GCC، ومنه تم اشتقاق متغيرات مثل Newlib-nano، والتي تهدف إلى تقليل الحجم إلى حد ما على حساب تقليل الوظائف.

يشترك برنامج Picolibc في نفس الأصول، ولكنه يطبق... إعادة تصميم أكثر جرأة تركز على النمطيةالفكرة ليست مجرد جعل Newlib "أصغر قليلاً"، ولكن إعادة هيكلتها بحيث يمكن للروابط الحديثة إزالة التعليمات البرمجية غير المستخدمة بدقة أكبر، مما يزيد من النسبة بين الوظائف المضمنة والمساحة المشغولة.

وفقًا لتحليلات المجتمع (مثل المقارنات المنشورة على مدونات تطوير الأنظمة المدمجة)، فإن التحول إلى مكتبة Picolibc قد يعني انخفاضات كبيرة في استخدام الذاكرة الفلاشية، وحجم الملفات الثنائية، والمكدس، والكومة بالمقارنة مع مكتبة نيوليب ونسختها النانوية. عمليًا، يُترجم هذا إلى إمكانية تضمين المزيد من منطق التطبيق في نفس وحدة التحكم الدقيقة، أو استخدام وحدة تحكم دقيقة ذات ذاكرة أقل، مما يقلل من تكاليف الأجهزة.

في الوقت نفسه، لا يقتصر مشروع Picolibc على الأساسيات فقط: إذ يُظهر مستودعه كيفية إضافة الدعم إلى أهداف 16 بت، تحسينات في توافق POSIX والتحسينات المختلفة التي تجعله جذابًا أيضًا للهياكل الأقل غرابة: ARM Cortex-M و RISC-V و MIPS المدمجة وغيرها الكثير.

بالمقارنة مع البدائل الخفيفة الأخرى مثل dietlibc أو nanolib المختلفة، يختار Picolibc الموازنة بين الحجم والامتثال للمعايير وهذا يناسب بشكل خاص المشاريع التي تتطلب واجهات برمجة تطبيقات متسقة، واختبارات مكثفة، وفي الوقت نفسه، بصمة محدودة للغاية.

  ما هو Composer؟ كل ما تحتاج إلى معرفته حول مدير التبعيات PHP هذا

كيفية الاستفادة من مكتبة Picolibc في سير عمل مضمن

يُترجم التكامل في GCC 16 إلى تغييرات ملموسة للغاية في العمل اليومي لمطور البرامج الثابتة. ولتوضيح ذلك، دعونا نتخيل مشروعًا نموذجيًا لـ معالج ARM Cortex-M مع الترجمة المتقاطعة من جهاز كمبيوتر مخصص للتطوير. تقليديًا، سلاسل الأدوات مثل arm-none-eabi يعتمد على مكتبة Newlib أو مجموعات تطوير البرامج (SDKs) الخاصة بالشركة المصنعة للمعالج الدقيق.

باستخدام GCC 16، يمكنك إنشاء أو تنزيل سلسلة أدوات تتضمن بالفعل هدف arm-none-picolibc-eabiعند تهيئة المُصرّف باستخدام الخيار --with-picolibcأصبحت البيئة الآن جاهزة لاستخدام مكتبة libc هذه كمعيار، مع ملفات الرأس الخاصة بها، ونظام الجذر، وملفات التمهيد المناسبة.

ومن ثم، تتم عملية التجميع باستخدام البادئة الجديدة، على سبيل المثال arm-none-picolibc-eabi-gccإلى جانب علامات التحسين والتصحيح المعتادة. إذا كنت ترغب في ضبط الحجم بدقة أكبر، يمكنك استخدام الخيار --printf= لاختيار نوع printf أخف مما يلبي احتياجات المشروع.

في البيئات التي تستخدم Make أو CMake أو أنظمة بناء أخرى، يقتصر التغيير عادةً على اضبط تعريف سلسلة الأدواتحدد البادئة الجديدة، وربما قم بتعديل بعض خيارات الربط، وتحقق من أن نصوص بدء التشغيل (crt0وتتوافق ملفات برنامج الربط مع بنية مكتبة Picolibc. في كثير من الحالات، يكون هذا التعديل أقل بكثير مما هو مطلوب بالفعل عند الانتقال من حزمة تطوير برمجية (SDK) خاصة بمورد إلى مجموعة أدوات GCC "الخالصة".

يمهد هذا التدفق الطريق للتخلي عن البيئات الاحتكارية أو المغلقة، واكتساب قابلية النقل بين عائلات المتحكمات الدقيقة المختلفة، والحفاظ على سلسلة أدوات مفتوحة وقابلة للتدقيق بنسبة 100%، وهو أمر يحظى بتقدير متزايد في قطاعات مثل الصناعة والطب والسيارات.

التأثير على إنترنت الأشياء والحوسبة الطرفية والقطاعات الخاضعة للتنظيم

إن توقيت هذا الاندماج ليس من قبيل الصدفة: فهو يتزامن مع توسع وحشي لـ أجهزة إنترنت الأشياء وأنظمة الحافة تلك التي تعمل بموارد محدودة للغاية، وغالبًا ما تعمل بالبطاريات وتُنشر على نطاق واسع. في مثل هذه السيناريوهات، يسمح توفير ذاكرة البرنامج ببساطة بما يلي: استخدم وحدات تحكم دقيقة أرخص وخفض تكاليف الوحدة بشكل كبير.

يساهم تقليل حجم البرامج الثابتة أيضًا في تبسيط مسائل مثل تحديثات OTAحيث يعني كل كيلوبايت أقل سرعة نقل بيانات أعلى، واستهلاكًا أقل للطاقة، واحتمالية أقل لحدوث أخطاء على الشبكات غير المستقرة. يُحدث Picolibc، من خلال تمكينه من إنشاء ملفات ثنائية أكثر إحكامًا عند دمجه مع GCC 16، تأثيرًا مباشرًا على هذا النوع من العمليات.

في القطاعات الخاضعة للتنظيم (الرعاية الصحية، السيارات، السكك الحديدية، إلخ)، تكون المزايا ملحوظة أيضاً. فبينما يتطلب الحصول على شهادة رسمية لمركز الأعمال المحلي أدوات وعمليات محددة، فإن إمكانية الوصول إلى مكتبة صغيرة، معيارية، وسهلة التدقيق نسبياً يمهد ذلك الطريق لتقديم سلاسل أدوات معتمدة أو تلك التي تخضع لمراجعات أمنية شاملة.

في الوقت نفسه، يتناسب هذا الرهان على بيكوليب مع الاتجاه نحو سلاسل أدوات سيليكون مفتوحةكما هو الحال في بيئة RISC-V. في هذه البيئات، لا تقتصر الانفتاحية على بنية مجموعة التعليمات فحسب، بل تشمل أيضاً شفافية المترجم ومكتبة libc وبقية سلسلة الأدوات، والتي تتم صيانتها من قبل المجتمع.

إن الجمع بين GCC 16، ودعم البنى الحديثة (ARMv9.6-A، وRISC-V، والأجيال الجديدة من x86 مثل AMD Zen 6 أو معالجات Intel الجديدة)، وPicolibc كمكتبة libc خفيفة الوزن، يعزز من قوة مُصرّف GNU. ركيزة أساسية لموجة جديدة من الأجهزة الذكية، بدءًا من الأجهزة القابلة للارتداء وصولًا إلى أجهزة الاستشعار الصناعية ذات قدرات التحليل المحلي.

حالة GCC 16، والميزات الجديدة الأخرى، ومدى نضج الدعم

من المقرر عقد مؤتمر دول مجلس التعاون الخليجي السادس عشر كـ الإصدار الرئيسي للمترجم في دورة إصداره المعتادةمع نافذة إصدار تقريبية بين مارس وأبريل إذا سارت الأمور وفقًا للخطة الموضوعة من قبل القائمين على الصيانة. بمجرد تأكيد الدخول في المرحلة النهائية من التطوير (المرحلة 4)، تحول التركيز بالكامل إلى التوثيق وتصحيح الانحدار، دون السماح بإضافة ميزات جديدة إلا في حالات مبررة للغاية.

  ما هي أنظمة التشغيل الافتراضية؟

أشار التقرير الأخير إلى أن العديد من القضايا لا تزال بحاجة إلى حل. انحدارات الأولوية P1هذه هي أخطر الأخطاء البرمجية. ولن يتم إصدار النسخ التجريبية الأولى من GCC 16.1 إلا بعد أن يصل عدد هذه الأخطاء إلى الصفر أو إلى مستوى مقبول. يضمن هذا الإجراء أن يصل دعم مكتبة Picolibc إلى حالة ناضجة بما فيه الكفاية للبدء في استخدامه في مشاريع حقيقية.

بالإضافة إلى دعم مكتبة Picolibc، يتضمن GCC 16 عددًا كبيرًا من الميزات الجديدة: دعم الهدف Armv9.6-A، التنفيذ الأولي لبنية AMD Zen 6 (المعروفة باسم Znver6) مع قدراتها الجديدة في مجال ISA، والتحسينات في إدارة الذاكرة المُدارة في وحدات معالجة الرسومات من AMD، ودعم معالجات Intel من الجيل التالي مثل Nova Lake و Wildcat Lake، وزيادة في عدد الأقسام الافتراضية في LTO (تحسين وقت الارتباط)، من بين تحسينات أخرى.

أما فيما يتعلق باللغة، فإن أحد أبرز القرارات هو أن يصبح C++20 المعيار الافتراضي عند عدم تحديد لغة أخرى. كما تمت إضافة واجهة أمامية جديدة للغة Algol 68، مما يوسع قائمة اللغات التي يدعمها GCC. كل هذا يتم دمجه مع إصلاحات للأخطاء وتحسينات طفيفة موزعة عبر مختلف الأنظمة الخلفية.

بشكل عام، فإن GCC 16 ليس مجرد "الإصدار الذي تم تضمين Picolibc فيه". إنه إصدار قوي من حيث الدعم المعماري، وتحديث C++، والقدرات للأجهزة الحالية، حيث تعد إضافة مكتبة libc خفيفة الوزن جزءًا من جهد أوسع. استراتيجية أوسع للتكيف مع الاحتياجات الحديثة من التطوير، سواء على أجهزة الكمبيوتر المكتبية أو، قبل كل شيء، في الأنظمة المدمجة.

وقد غطت المجتمعات التقنية ووسائل الإعلام المتخصصة هذه التطورات: من مقالات تركز على دعم مكتبة Picolibc وفكرة "تنوع مكتبة libc" إلى تحليلات لآثار البنى الجديدة مثل AMD Zen 6، بالإضافة إلى مناقشات على وسائل التواصل الاجتماعي حول كيفية الاستفادة من GCC 16 في مشاريع تتراوح من وحدات التحكم القديمة إلى أنظمة التحكم الصناعية.

تشير كل الدلائل إلى أنه مع اقتراب الإصدار النهائي من GCC 16.1 واستقرار أولى مجموعات الأدوات التي تتضمن مكتبة Picolibc المدمجة، سنشهد المزيد من حالات الاستخدام الواقعية، واختبارات مقارنة للحجم والأداء، وأدلة عملية حول نظام التشغيل الأساسي، ونصوص الربط، وتسلسلات الإقلاع المحددة باستخدام هذه التركيبة الجديدة.

يمثل دعم مكتبة Picolibc في GCC 16 نقطة تحول للنظام البيئي للأنظمة المدمجة: يقلل ذلك بشكل كبير من الاحتكاك من خلال اعتماد LIBC خفيف الوزن للغاية، مما يفتح الباب أمام برامج ثابتة أصغر حجماً وأكثر قابلية للصيانة. يتماشى هذا مع التوجه العام نحو سلاسل الأدوات المفتوحة والقابلة للتخصيص والمُكيّفة مع مختلف البنى. بالنسبة للعديد من فرق التطوير، من المفيد البدء باختبار فروع GCC 16 مع مكتبة Picolibc الآن، وقياس تأثيرها على الحجم والأداء وسهولة الصيانة، وتقييم تكاملها في المنتجات القادمة.

الميكاترونيات والإلكترونيات الصناعية
المادة ذات الصلة:
هندسة الميكاترونيات والهندسة الإلكترونية الصناعية: الدراسات والمسارات المهنية والشهادات المزدوجة