
كتاب برنامج تشغيل الأجهزة لنظام FreeBSD
من الخطوات الأولى إلى إتقان النواة (Kernel)
بقلم إدسون براندي · الإصدار 2.0 (أبريل 2026)
برامج تشغيل FreeBSD: من الخطوات الأولى إلى إتقان النواة هو كتاب مجاني ومفتوح المصدر يأخذك من "لم أكتب كود نواة من قبل" إلى "أستطيع كتابة وتصحيح وإرسال برامج تشغيل FreeBSD بجودة إنتاجية." إنه دورة موجهة وليس مرجعًا، منظمة حول 38 فصلًا و6 ملاحق وعشرات من التمارين العملية التي يتم تجميعها وتحميلها على نظام FreeBSD 14.x حقيقي.
الكتاب موجه للقراء الذين يرغبون في التعلم وليس بالضرورة المؤهلين مسبقًا. يبدأ بأساسيات UNIX ولغة C، ثم يسير خطوة بخطوة عبر كل مفهوم ستطلبه منك النواة، وعندها فقط يفتح الباب لتطوير برامج التشغيل. بحلول الوقت الذي تصل فيه إلى DMA والمقاطعات وعمل PCI، ستشعر بأن المفردات قد اكتسبتها عن جدارة وليس فرضًا عليك.
"برمجة النواة لا تزال برمجة، لكن بقواعد أكثر وضوحًا، ومسؤولية أكبر، وقوة أكبر قليلاً. بمجرد أن تفهم ذلك، يتحول الخوف إلى حماس." (من الفصل 1)
هناك مراجع ممتازة لنواة FreeBSD بالفعل، بما في ذلك man 9، ودليل الهندسة (Architecture Handbook)، وأوراق Newbus. ما كان مفقودًا هو نص واحد:
myfirst فصلًا تلو الآخر، ويكتسب التزامن، ثم الوصول إلى العتاد، ثم المقاطعات، ثم DMA. ترى نفس الكود ينضج بين يديك.الكتاب منظم في سبعة أجزاء تبني على بعضها البعض:
في النهاية، ستكون قد كتبت وقمت بتحميل وحدات النواة الخاصة بك، وبنيت برنامج تشغيل أحرف، وعالجت مقاطعات حقيقية و DMA، وصححت مشاكل النواة (kernel panics)، ونمّذت برنامج التشغيل تحت الحمل، وسرت في كل خطوة من خطوات مساهمة عملك في مشروع FreeBSD.
الوتيرة الموصى بها هي فصل واحد في الأسبوع بحوالي خمس ساعات من الدراسة الأسبوعية. هذا الجدول يجعل الكتاب بأكمله في متناول اليد خلال عام أكاديمي. بعض الفصول (خاصة الفصل 4 عن C، وفصول الجزء 4 عن العتاد) تمتد بشكل طبيعي لعدة أسابيع.
التمارين العملية موصى بها بشدة. تكافئ برمجة النواة الذاكرة العضلية بطريقة لا تفعلها سوى تخصصات قليلة. نفس نمط الربط، نفس سلسلة التنظيف، نفس شكل القفل تظهر فصلًا بعد فصل وبرنامج تشغيل بعد آخر. كتابة تلك الأنماط، تجميعها، تحميلها في نواة قيد التشغيل، ومشاهدتها تفشل عن قصد هو الطريقة الأكثر فعالية لاستيعابها.
إذا كنت تعرف بالفعل C وUNIX والشكل العام لنواة نظام التشغيل، فإن الملاحظات السريعة (fast-path notes) في جميع أنحاء الجزء 1 تخبرك بالأقسام التي يجب قراءتها بعناية والتي يمكنك تصفحها.
الإصدار 2.0 متوفر الآن على صفحة الإصدارات بثلاث لغات وثلاثة تنسيقات:
يمكنك أيضًا تصفح مصدر Markdown مباشرة في دليل content/، أو بناء الكتاب بنفسك باستخدام scripts/build-book.sh.
النسخة الإنجليزية هي النسخة الأصلية والموثوقة للكتاب. تمت ترجمة النسختين البرتغالية البرازيلية والإسبانية باستخدام الذكاء الاصطناعي ولم تخضعا بعد لمراجعة فنية بشرية كاملة. تم نشرهما لجعل المادة متاحة لعدد أكبر من القراء، لكنهما قد تحتويان على أخطاء في الترجمة، أو صياغة غير مناسبة، أو أخطاء فنية ناتجة عن الترجمة.
إذا كان هناك شيء غير واضح، أو غير متسق، أو مشكوك فيه من الناحية الفنية في أي نسخة مترجمة، فيرجى الرجوع إلى النسخة الإنجليزية كمصدر للحقيقة. المساعدة في مراجعة وتحسين الترجمات مرحب بها جدًا (انظر المساهمة أدناه).
هذه نسخة مسودة (draft release) من كتاب كبير جدًا. بعض الأشياء التي يجب الانتباه إليها:
content/ للحصول على نسخة نظيفة.FDD-book/ ├── content/ # Book content (Markdown) │ ├── chapters/ # Chapters by Part │ └── appendices/ # Appendices A-F ├── examples/ # Source code from the book ├── translations/ │ ├── pt_BR/ # Brazilian Portuguese (AI-translated) │ └── es_ES/ # Spanish (AI-translated) └── scripts/ # Build and utility scripts
## المساهمة
نرحب بجميع أنواع المساهمات، بما في ذلك التصحيحات، والتوضيحات، والأمثلة الجديدة، والترجمات، والمراجعات من مطوري ومتعلمي FreeBSD على حد سواء.
### طرق المساهمة
- **المحتوى:** إضافة فصول جديدة، تحسين المواد الموجودة
- **المراجعة الفنية:** مراجعة الفصول للتأكد من دقتها مقارنة بـ FreeBSD 14.x
- **مراجعة الترجمة:** المساعدة في مراجعة وتحسين النسختين المترجمتين بالذكاء الاصطناعي **pt_BR** و **es_ES**؛ المتحدثون الأصليون ذوو الخبرة في FreeBSD/Nucleus مرحب بهم بشكل خاص
- **ترجمات جديدة:** المساعدة في ترجمة الكتاب إلى لغة أخرى
- **الكود:** تحسين الأمثلة ونصوص البناء والأدوات
- **المشكلات:** الإبلاغ عن الأخطاء، والأخطاء الواقعية، والمقاطع غير الواضحة، أو مشكلات التنسيق
### الإبلاغ عن مشكلة
عند تقديم مشكلة، يرجى تضمين:
- إصدار اللغة الذي كنت تقرأه (`en_US`، `pt_BR`، `es_ES`)
- التنسيق المستخدم (PDF، EPUB، HTML، أو Markdown)
- الفصل أو القسم الذي تظهر فيه المشكلة
- شرح قصير للمشكلة، وتصحيح مقترح إذا كان لديك واحد
### سير العمل
1. انسخ المستودع (Fork)
2. أنشئ فرعًا: `git checkout -b feature/your-change`
3. قم بإجراء تغييراتك واختبر البناء باستخدام `scripts/build-book.sh`
4. قم بالالتزام برسالة واضحة: `git commit -m "Chapter 18: clarify BAR mapping"`
5. ادفع وافتح طلب سحب (Pull Request)
عندما تتعثر أثناء قراءة الكتاب، **يساعد تقديم مشكلة**. إذا بدا مقطع ما خاطئًا أو فشل مختبر بشكل غير متوقع، فإن كل تقرير يجعل طريق القارئ التالي أكثر سلاسة.
## الأسئلة الشائعة
### لماذا يوجد هذا الكتاب؟
الإجابة الصادقة هي أن مشروع FreeBSD يحتاج إلى مساهمين جدد، وكان الطريق إلى العمل في النواة (kernel) وبرامج التشغيل (drivers) دائمًا أكثر صعوبة مما ينبغي. معظم المواد الموجودة تفترض أنك تعرف UNIX بالفعل، وتجيد C جيدًا، وتعرف ما هو الناقل (bus)، وتعرف كيفية قراءة شفرة مصدر النواة. هذا يناسب الأشخاص الذين هم بالفعل في منتصف الطريق. لا يفعل الكثير للمطور الفضولي الذي يريد البدء.
الهدف من هذا الكتاب هو خفض تلك العقبة. إذا أكمل حتى عدد صغير من القراء الكتاب وشرعوا في تقديم التصحيحات (patches)، ومراجعة الكود، وكتابة برامج تشغيل جديدة، أو أصبحوا في النهاية مساهمين (committers) في FreeBSD، فقد أدى الكتاب مهمته. **تدريب الجيل القادم من مساهمي FreeBSD هو السبب وراء كتابة هذا العمل**.
### هل أحتاج إلى معرفة C قبل البدء؟
لا. الفصلان 4 و5 يعلمان C من الصفر، مع التركيز على أجزاء اللغة المهمة للعمل في النواة (المؤشرات، الهياكل، تخطيط الذاكرة، المعالج المسبق، واصطلاحات الاستدعاء). إذا كنت تعرف C جيدًا بالفعل، فإن الأشرطة الجانبية (sidebars) في تلك الفصول تخبرك بما يمكنك تصفحه وما يجب قراءته بعناية.
### هل أحتاج إلى معرفة UNIX أو FreeBSD؟
لا. الفصل 2 يرشدك خلال تثبيت FreeBSD في جهاز افتراضي (VM) أو على جهاز فعلي (bare metal)، والفصل 3 يقدم سطر أوامر UNIX، ونظام الملفات، والعمليات، والأذونات، والمحررات. بنهاية الجزء الأول سيكون لديك مختبر عملي والمفردات اللازمة لاستخدامه.
### هل أحتاج إلى أجهزة حقيقية؟
معظم الكتاب لا. يكفي جهاز افتراضي يعمل بنظام FreeBSD 14.x للأساسيات، وفصول برامج التشغيل الأولى، والتزامن والمزامنة، وجزء كبير من مادة التصحيح. تصبح الأجهزة الحقيقية مفيدة (ولكنها لا تزال غير مطلوبة بشكل صارم) عندما تصل إلى فصول PCI والمقاطعات (interrupts) و DMA في الجزء الرابع. تلك الفصول مكتوبة بحيث تكون المفاهيم منطقية حتى لو قمت بتشغيلها فقط في جهاز افتراضي.
### هل سيساعدني هذا في كتابة برامج تشغيل Linux؟
بشكل غير مباشر، نعم. إنضباط برمجة النواة ينتقل بشكل جيد جدًا: استراتيجية التأمين (locking)، إدارة الذاكرة، سياق المقاطعة، تعيين DMA، الفرق بين مسارات الكود النائمة (sleeping) وغير النائمة (non-sleeping)، ترتيب التنظيف الدفاعي (defensive cleanup ordering). واجهات برمجة التطبيقات المحددة مختلفة. بعد قراءة هذا الكتاب لن تعرف نموذج أجهزة Linux، لكنك ستتعرف على مشاكله وشكل حلوله، وستكون قادرًا على قراءة Linux Device Drivers (LDD) بسهولة أكبر.
### لماذا FreeBSD 14.x تحديدًا؟
تم التخطيط لكل واجهة برمجة تطبيقات (API)، وكل مثال، وكل مختبر لتنفيذها تحت شجرة المصدر FreeBSD 14.3 وصفحات `man 9` المقابلة. استهداف إصدار معين يسمح للكتاب أن يكون دقيقًا بشأن تواقيع الدوال، ومواقع الرؤوس (headers)، والسلوك. المفاهيم ستستمر بعد 14.x لسنوات عديدة؛ أرقام الأسطر الدقيقة وتفاصيل API الصغيرة لن تستمر، والكتاب صريح بشأن ذلك.
### هل هذا منشور رسمي لمشروع FreeBSD؟
لا. هذا كتاب تعليمي مستقل حول تطوير برامج تشغيل الأجهزة في FreeBSD. ليس منشورًا رسميًا لمشروع FreeBSD. المؤلف هو مساهم (committer) في FreeBSD وعضو في فريق هندسة التوثيق (DocEng)، لكن الكتاب يعكس عمله وآرائه، وليس موقفًا رسميًا للمشروع.
### كم من الوقت سيستغرقني هذا بالفعل؟
إذا قرأت بعناية وقمت بالمختبرات، خطط لحوالي 200 ساعة من العمل الإجمالي. هذا تقريبًا 100 ساعة قراءة و100 ساعة عمل عملي في المختبر. بمعدل خمس ساعات في الأسبوع، يكون مشروعًا مسائيًا لمدة ستة أشهر؛ بمعدل عشر ساعات في الأسبوع، سباق مركز لمدة شهرين. القراءة دون القيام بالمختبرات تقلل الوقت تقريبًا إلى النصف ولكنها تقلل أيضًا القيمة: برمجة النواة تكافئ الذاكرة العضلية (muscle memory) بطريقة لا تفعلها سوى القليل من التخصصات.
### هل يمكنني تخطي المختبرات؟
يمكنك، لكن ربما لا ينبغي. المختبرات هي المكان الذي يصبح فيه النص المنثور (prose) رد فعل. الأنماط مثل ترتيب التوصيل (attach ordering)، وفك التنظيف (cleanup unwinding)، وشكل اكتساب القفل (lock acquisition) تتكرر في كل فصل، والطريقة الوحيدة الموثوقة لاستيعابها هي كتابتها، وتجميعها، وتحميلها في نواة قيد التشغيل، ومشاهدتها تفشل عن قصد. القراء الذين يتخطون المختبرات يبلغون عن تقدم يبدو سلسًا في البداية ثم يتوقف بهدوء حول الجزء الثالث أو الرابع.
### كيف أساهم في FreeBSD بعد قراءة هذا؟
الفصل 37 يغطي سير عمل التقديم الكامل: كيفية إعداد تصحيح (patch)، وكيفية استخدام Phabricator (نظام مراجعة كود FreeBSD)، وكيفية العثور على مساهم (committer) لرعاية عملك، وكيفية الرد على ملاحظات المراجعة، وكيفية قيادة برنامج تشغيل إلى الشجرة (tree). الفصول السابقة تبني المهارة التقنية؛ الفصل 37 يبني سير العمل الاجتماعي. كلاهما مهم.
### الكتاب ضخم. من أين يجب أن أبدأ؟
ابدأ من الفصل الأول ما لم يكن لديك سبب لعدم ذلك. الكتاب تراكمي؛ الفصول اللاحقة تعتمد على المفردات والعادات التي تم تأسيسها سابقًا. إذا كنت تعرف بالفعل C و UNIX والشكل العام لنواة نظام التشغيل، فإن ملاحظات المسار السريع (fast-path notes) داخل الجزء الأول تخبرك بما يجب تصفحه. إذا كان نظام فرعي معين هو ما جاء بك إلى هنا (USB، الشبكات، التخزين، PCI)، فمن الجيد قراءة الجزأين 1 و 2 بعناية ثم القفز إلى الأمام، لكن توقع العودة عندما تظهر مصطلحات من الفصول السابقة مرة أخرى.
### وجدت خطأ. ماذا علي أن أفعل؟
افتح مشكلة على GitHub. قم بتضمين إصدار اللغة، والتنسيق الذي كنت تقرأه، والفصل أو القسم، ووصفًا قصيرًا للمشكلة، وتصحيحًا مقترحًا إذا كان لديك واحد. كل تقرير يجعل تجربة القارئ التالي أفضل. مشكلات الترجمة في إصدارات pt_BR و es_ES مرحب بها بشكل خاص، لأنها لم تخضع بعد لمراجعة فنية بشرية كاملة.
### هل الكتاب مجاني حقًا؟
نعم. تم إصداره بموجب ترخيص MIT. يمكنك قراءته، ومشاركته، وطباعته، والاقتباس منه، والبناء عليه، وترجمته. الإسناد (Attribution) موضع تقدير ولكنه غير مطلوب للاستخدام الشخصي. إذا كنت ترغب في دعم العمل، فإن أكثر الأشياء فائدة التي يمكنك القيام بها هي: إخبار الآخرين عن الكتاب، وتقديم مشكلات عندما تجد مشاكل، والمساهمة بمراجعات أو ترجمات، و (إذا قادك ذلك في النهاية) تقديم عملك الخاص إلى مشروع FreeBSD.
## عن المؤلف
أنا إدسون براندي. كان مساري إلى التكنولوجيا أي شيء غير تقليدي. بدأت كطالب كيمياء في Unicamp في البرازيل عام 1995، دون خطة للعمل مع أجهزة الكمبيوتر، ولكن مع سؤال واحد مستمر: *كيف يعمل هذا بالفعل؟* هذا السؤال قادني إلى FreeBSD، وشكلت FreeBSD مسيرتي المهنية منذ ذلك الحين.
في السنوات التي تلت ذلك، أسست **مجموعة مستخدمي FreeBSD البرازيلية (FUG-BR)**، وشاركت في إنشاء **مجموعة أدوات FreeBSD LiveCD**، وفي عام 2002 شاركت في تأسيس **FreeBSD Brasil**، وهي شركة تقدم تدريبًا واستشارات ودعمًا لـ FreeBSD ولا تزال تعمل حتى اليوم. أنا مساهم (committer) في FreeBSD وعضو حاليًا في **فريق هندسة التوثيق FreeBSD (DocEng)**، وأساعد في صيانة الأنظمة التي تحافظ على توثيق FreeBSD حيًا ومتاحًا في جميع أنحاء العالم.
مهنيًا، أمضيت مسيرتي المهنية في قيادة البنية التحتية والهندسة عبر العديد من الصناعات، وأعمل اليوم كمدير لتقنية المعلومات (IT Director) في شركة للتكنولوجيا المالية في لندن.
كتبت هذا الكتاب لأنني أريد أن يحصل الأشخاص الفضوليون الآخرون على الطريق السهل الذي لم أحصل عليه أبدًا. لا تحتاج إلى شهادة في علوم الكمبيوتر لكتابة كود النواة. ما تحتاجه هو الفضول، والمثابرة، والصبر، ودليل يلتقي بك أينما كنت.
إدسون براندي · [email protected]
## الترخيص
تم إصدار هذا الكتاب وشفرة المصدر المصاحبة له بموجب **رخصة MIT**. انظر [LICENSE](https://github.com/ebrandi/fdd-book/blob/HEAD/LICENSE) للنص الكامل. أنت حر في قراءة هذا العمل ومشاركته والبناء عليه؛ الإسناد موضع تقدير.
## الشكر والتقدير
- مجتمع تطوير FreeBSD
- جميع المساهمين والمراجعين والمترجمين
- كل من قدم مشكلة أو طرح سؤالاً أدى إلى تحسين فصل ما
## الروابط
- **المستودع:** https://github.com/ebrandi/FDD-book
- **المشكلات:** https://github.com/ebrandi/FDD-book/issues
- **المناقشات:** https://github.com/ebrandi/FDD-book/discussions
- **المؤلف:** Edson Brandi · [email protected]
---
<p align="center"><em>إذا ساعدك هذا الكتاب، يرجى وضع نجمة (star) على المستودع ومشاركته مع شخص آخر فضولي حول كيفية عمل أجهزة الكمبيوتر حقًا.</em></p>
| الجزء | العنوان | التركيز |
|---|
| 1 | الأسس: FreeBSD وC والنواة | إعداد المختبر، UNIX، C للعمل مع النواة، تشريح برنامج التشغيل |
| 2 | بناء أول برنامج تشغيل | برامج تشغيل الأحرف (character drivers)، ملفات الجهاز، القراءة/الكتابة، الإدخال/الإخراج |
| 3 | التزامن والمزامنة | الخيوط، الموتكسات (mutexes)، متغيرات الشرط (condvars)، المؤقتات، قوائم المهام (taskqueues)، الإشارات (semaphores) |
| 4 | تكامل العتاد ومستوى المنصة | PCI، المقاطعات، MSI/MSI-X، DMA، إدارة الطاقة |
| 5 | التصحيح، الأدوات، والممارسات الواقعية | التتبع (tracing)، KGDB، التصحيح المتقدم، ضبط الأداء |
| 6 | كتابة برامج تشغيل خاصة بالنقل | USB، المنفذ التسلسلي، التخزين/VFS، برامج تشغيل الشبكة |
| 7 | موضوعات الإتقان: سيناريوهات خاصة وحالات حافة | قابلية النقل، المحاكاة الافتراضية، الأمان، الأنظمة المضمنة، الهندسة العكسية، تقديم المساهمات |
| الصفحات | 4,500+ |
| الفصول | 38 |
| الملاحق | 6 |
| وقت القراءة | ~100 ساعة |
| وقت التمارين العملية | ~100 ساعة |
| إجمالي وقت الدراسة | ~200 ساعة (≈6 أشهر بمعدل 5 ساعات/أسبوع) |
| إصدار FreeBSD المستهدف | 14.3 |
| اللغات | الإنجليزية (الأصل) · البرتغالية البرازيلية (ترجمة بالذكاء الاصطناعي) · الإسبانية (ترجمة بالذكاء الاصطناعي) |
| التنسيقات | PDF · EPUB · HTML · مصدر Markdown |
| اللغة | EPUB | HTML |
|---|
| الإنجليزية (الأصل) | EPUB | HTML | |
| البرتغالية (البرازيل)، ترجمة بالذكاء الاصطناعي | EPUB | HTML | |
| الإسبانية، ترجمة بالذكاء الاصطناعي | EPUB | HTML |