بررسی اجمالی:

  • مقدمه ای بر لینوکس کرنل
  • سورس های کرنل
  • پیکربندی، کامپایل و بوت کردن کرنل
  • بوت کردن NFS و کراس کامپایل
  • پیکربندی کرنل، کراس کامپایل و بوت در NFS
  • ماژول های کرنل لینوکس
  • نوشتن ماژول ها
  • مدیریت حافظه
  • پورت و حافظه I / O
  • کاراکتر درایورها
  • فرآیندها (Processes)، برنامه ریزی (Scheduling)، خواب (Sleeping) و وقفه ها
  • خواب (Sleeping) و مدیریت وقفه ها در یک دیوایس درایور
  • تکنیک های اشکال زدایی درایور
  • بررسی نقص های (Fault) هسته
  • جزئیات بوت کردن هسته سیستم
  • ارتباط با جوامع کاربری (community)
  • مدیریت سورس کرنل با Git
  • استفاده از Git

 

مدت زمان دوره:  30 ساعت

 مخاطبین:

  • توسعه دهندگان  سخت افزارها با استفاده از هسته لینوکس
  • متخصصانی که از توسعه دهندگان سیستم های تعبیه شده لینوکسی پشتیبانی می کنند

 

پیش نیازها :  دوره لینوکس توکار یا تعبیه شده - Embedded Linux-APEX-V210 (سطح1)

تجهیزات مورد نیاز :

  • کامپیوتر با حداقل 1 گیگابایت رم، و لینوکس اوبونتو نصب شده در یک پارتیشن  حداقل 10 گیگابایتی
  • استفاده از لینوکس در ماشین مجازی به دلیل مسائل مربوط به اتصال واقعی سخت افزارها توصیه نمی شود.
  • نسخه اوبونتو دسکتاپ 14.04 (32 بیتی) – توزیع های دیگر پشتیبانی نمی شوند
  • از اطلاعات مهم کامپیوتر نسخه پشتیبان تهیه شود. ممکن است اطلاعات با ارزش در طول این جلسات آسیب ببیند.
  • داشتن پورت سریال بر روی کامپیوتر و یا مبدل USB به ماژول سریال

 

سخت افزار: SST-APEX-V210

 

مقدمه ای بر لینوکس کرنل

  • خصوصیات کرنل
  • مفاهیم توسعه فرآیند
  • محدودیت های حقوقی با دیوایس درایور ها
  • رابط کاربری کرنل (/proc و /sys)
  • دیوایس درایور های فضای کاربر

 

سورس های کرنل

  • ویژگی های توسعه کرنل لینوکس
  • استانداردهای کدینگ (Coding)
  • بازیابی سورس کرنل لینوکس
  • سیری در سورس کرنل لینوکس
  • مرورگرهای سورس کد کرنل: cscope و Linux Cross Reference (LXR)
  • جستجو در سورس کد کرنل لینوکس: تعاریف C، تعاریف پارامترهای پیکربندی کرنل، و انواع دیگری از اطلاعات
  • استفاده از خط فرمان یونیکس و سپس مرورگرهای سورس کد کرنل

پیکربندی، کامپایل و بوت کردن کرنل

  • پیکربندی کرنل
  • کامپایل بومی. فایل های تولید شده
  • بوت کردن کرنل. پارامترهای بوت شدن کرنل

 

بوت کردن NFS و کراس کامپایل

  • بوت بر روی یک دایرکتوری در ایستگاه های کاری گنو / لینوکسی از طریق NFS
  • کرنل کراس کامپایل

 

پیکربندی کرنل، کراس کامپایل و بوت در NFS

  • استفاده از برد ARM
  • پیکربندی، کراس کامپایل و بوت شدن کرنل لینوکس با پشتیبانی از بوت NFS

 

ماژول های کرنل لینوکس

  • دیوایس درایور های لینوکس
  • یک ماژول ساده
  • محدودیت های برنامه نویسی
  • بارگذاری (Load) و تخلیه (Unload) ماژول
  • پارامترهای ماژول ها
  • وابستگی های ماژول ها
  • اضافه کردن سورس به درخت کرنل
  • تولید پچ ها و به اشتراک گذاشتن آنها با دیگران

 

نوشتن ماژول ها

  • نوشتن یک ماژول کرنل با قابلیت های مختلف، از جمله پارامترهای ماژول.
  • دسترسی به داخل کرنل از طریق ماژول
  • راه اندازی محیط برای کامپایل آن

مدیریت حافظه

  • لینوکس: مدیریت حافظه - فضاهای آدرس دهی فیزیکی و مجازی (هسته و کاربر)
  • پیاده سازی مدیریت حافظه لینوکس
  • تخصیص حافظه با ()kmalloc
  • تخصیص حافظه با صفحات (Pages)
  • تخصیص حافظه با ()vmalloc

 

پورت و حافظه I / O

  • I / O رجیستر و رنج رجیستر در حافظه
  • I / O رجیستر و دسترسی به حافظه
  • موانع خواندن / نوشتن درحافظه

 

پورت و حافظه I / O

  • اتصال از راه دور به برد از طریق SSH
  • دسترسی به کنسول سیستم از طریق شبکه
  • رزرو آدرس های حافظه I / O استفاده شده توسط پورت سریال
  • خواندن رجیستر دیوایس و نوشتن داده ها در آنها، برای ارسال کاراکترها به پورت سریال

 

کاراکتر درایورها

  • شماره دیوایس ها
  • کسب شماره های آزاد (Free Number) دیوایس
  • پیاده سازی عملیات فایل: خواندن، نوشتن، بازکردن، بستن، IOCTL ...
  • تبادل داده ها بین فضای کرنل و فضای کاربر
  • ثبت کاراکتر درایور
  • استفاده از برد ARM
  • نوشتن یک کاراکتر درایور ساده، برای نوشتن داده ها روی پورت سریال
  • چک کردن صحت دریافت داده های انتقال یافته بر روی ایستگاه های کاری
  • تبادل داده ها بین فضای کاربر و فضای کرنل
  • تمرین با خصوصیات دیوایس درایور API
  • استفاده از کدهای خطا استاندارد کرنل

 

فرآیندها (Processes)، برنامه ریزی (Scheduling)، خواب (Sleeping) و وقفه ها

  • مدیریت فرایندها در کرنل لینوکس
  • زمانبندی کرنل لینوکس و چگونگی خواب فرایندها
  • مدیریت وقفه ها در دیوایس درایور ها: مدیریت ثبت وقفه ها و برنامه نویسی
  • برنامه ریزی کارهای به تعویق افتاده

 

خواب (Sleeping) و مدیریت وقفه ها در یک دیوایس درایور

  • استفاده از برد ARM
  • اضافه کردن قابلیت خواندن به کاراکتر درایور توسعه یافته
  • ثبت یک interrupt handler
  • انتظار برای داده های موجود در فایل خواندنی عملیات
  • بیدار کردن کد از خواب (Waking up the code) زمانی که داده های دستگاه موجود است.

 

تکنیک های اشکال زدایی درایور

  • اشکال زدایی با printk
  • ورودی های debugfs و proc
  • تجزیه و تحلیل نقایص (oops) هسته
  • استفاده از kgdb، دیباگر کرنل
  • استفاده از دستورات جادویی SysRq
  • اشکال زدایی از طریق یک JTAG probe
  • Demonstration و SystemTap

 

بررسی نقص های (Fault) هسته

  • استفاده از بردARM
  • مطالعه Broken Driver
  • تجزیه و تحلیل نقایص کرنل و حل مشکل در سورس کد

 

جزئیات بوت کردن هسته سیستم

  • شرح مفصلی از فرایند بوت شدن کرنل، از اجرا با بوت لودر تا اجرای اولین برنامه فضای کاربر
  • Initcalls: نحوه ثبت initialization routines

 

ارتباط با جوامع کاربری (community)

  • چگونگی کمک گرفتن از جوامع کاربری
  • گزارش اشکالات و خطاها
  • تولید و ارسال پچ ها
  • منابع مطالعاتی مفید در مورد کرنل

 

مدیریت سورس کرنل با Git

  • مدیریت تغییرات در هسته لینوکس (درایورها، کدهای پشتیبانی از برد)، همگام شدن با روز رسانی جریان اصلی
  • شبیه سازی یک درخت Git موجود
  • ایجاد Branch خود با تغییرات دلخواه
  • تولید پچ ها در reference tree
  • مروری بر دستورات مفید git
  • مفاهیم جریان کاری (work flow) استفاده شده توسط توسعه دهندگان کرنل

 

استفاده از Git

  • ایجاد کردن Branch Git خود از درخت اصلی (Mainline Tree)
  • ایجاد تغییرات در منبع کد و تولید پچ ها

به روز نگاه داشتن Branch خود، با ایجاد تغییر در درخت مرجع