(فصل اول – بخش اول )
سلام بر همراهان
در دو قسمت قبل، به عنوان مقدمه و پیشگفتار بحث امبدد لینوکس، به پیش نیازها، مسیر حرکت و فصلهای پیش رو در این دوره اشاره کردیم و به سؤالها و ابهاماتی که داشتید پاسخ داده شد. پس اگر اولین بار است که این مطلب را میخوانید، بهتر است از جلسه اول شروع کنید!
خیلیهاتون احتمالا GNU/Linux رو شنیده باشین یا دیده باشین. حالا چی هستن اینا؟
لینوکس که یه هسته هست و گنو GNU هم اینه: GNU’s Not UNIX! از این مدل مخففها توی دنیای اپنسورس زیاد میبنید پس تعجب نکنید! ?
همه چیز از UNIX و C شروع میشه و از اونجایی که ما با تکنولوژی بزرگ نشدیم، یعنی چی این حرفم؟ شخصی رو در نظر بگیرید که از قبل از پیدایش C برنامه نویسی میکرده و تو حوزه کامپیوتر فرد فعالی بوده این آدم خیلی چیزها رو میدونه!
خیلی از نامگذاریها، استانداردها و بقیه موارد واسش خاطره ست!
متأسفانه من خودم اون آدم نیستم! و استادی هم نداشتم که از اون زمان باشه و باسواد باشه! منظورم از با سواد تعریف دکتر مصطفی جعفری از باسواد هست:
«در هزاره سوم باسواد کسی است که یاد بگیرد، فراموش کند و باز یاد بگیرد.»
واسه همین خوندن فصل اول کتاب زیر خیلی به من کمک کرد و اولین تمرین برای این بخش:
اینکه بخونیدش، تا بفهمید UNIX GNU Linux BSD GPL و … چی هستن.
معرفی منبع مطالعه عمیق:
KERRISK, MICHAEL. THE LINUX PROGRAMMING INTERFACE: A LINUX AND UNIX SYSTEM PROGRAMMING HANDBOOK. NO STARCH PRESS, 2010
به صورت خیلی خلاصه ولی علمی (این مطلب مستقیماً از سایت gnu.org ترجمه شده است)
گنو یک سیستم عامل هست و بر مبنای نرمافزار آزاد. این سیستم عامل از یک سری پکیجهای گنو تشکیل شده و یک سری نرمافزارهای رایگان که شرکای ثالث منتشر کردن.
گنو در کنار لینوکس، به عنوان هسته سیستم عامل، میشه GNU/Linux که یک سیستم عامل کامل و رایگان هست.
برای Embedded Linux چه دانشهایی لازم است؟
کِریم میگه برای اینکه بهترین استفاده رو از لینوکس توی یه سیستم امبدد داشته باشین باید توی زمینههای زیر دانش کافی رو داشته باشین:
سیستمهای امبدد
شما باید با توسعه، برنامه نویسی و عیب یابی یک سیستم امبدد چه در جنبه سختافزار چه در جنبه نرمافزار آشنا باشید. (خوشبختانه این دانش رو داریم عموماً ولی اگه کسی نداره و دوست داشت کتاب «میکروکنترلرهای AVR برنامه نویسی اسمبلی و C» از استاد مزیدی توصیه میشه.)
مدیریت سیستمهای یونیکسی
خودمونیش میشه کار کردن با لینوکس رو بلد باشین، حالا نه در حد خیلی پیشرفته، در حد کاربر معمولی هم کافیه.
با Shell و کدهایی که باش نوشته میشه آشنا باشین یعنی هم بتونین بخونین هم بنویسین.
تنظیمات سخت افزاری و نصبهای نرمافزاری رو بتونین انجام بدین و …
توی این زمینه کتابهای زیادی هست که من نخوندم و نمیدونم کدوم خوبه! فقط یک کتاب رو چند سال پیش ناقص خوندم و راضی بودم! منابع فارسی هم زیاد هست تو این زمینه که بگردین پیدا میشه و اگه خواستین دنبال منابع بهتر باشین این رو جستجو کنید Linux System Administration.
معرفی منبع مطالعه عمیق:
SHOTTS JR, WILLIAM E. THE LINUX COMMAND LINE: A COMPLETE INTRODUCTION. NO STARCH PRESS, 2012
غیر خودمونیش هم میشه در حد LPIC1 یکم کمتر و بیشتر بلد باشین که عمو جادی تو این زمینه ویدیو و کتاب خیلی خوبی داره.
درایور نویسی در لینوکس
باید بدونید چه جوری درایورهای مختلف رو توسعه بدین و خطایابی کنید.
این خیلی دانش خوبی هست ولی ما کمتر کاری میکنیم که لازممون بشه!
یعنی چی؟
ما معمولاً از سختافزارهای جانبیای استفاده میکنیم که روی خود SBC مون هست یا سازنده SOM درایور اون سخت افزار رو در اختیار ما گذاشته، ولی اگه یه روز خواستین مثلاً آیسی Wi-Fi یی رو استفاده کنید که هیچ کس اون را با SOC مورد نظر شما راه اندازی نکرده، به این موضوع دقت داشته باشید، می بایست خودتون بتونید این کار را انجام بدید و کار را پیش ببرید.
این مبحث در حد آشنایی توی خیلی از کتابهای Embedded Linux هست ولی خوب کِریم میگه باید خودتون بلد بوده باشین!
معرفی منبع مطالعه عمیق:
RODOLFO GIOMETTI. LINUX DEVICE DRIVER DEVELOPMENT COOKBOOK. PACKT PUBLISHING, 2019
ALBERTO LIBERAL DE LOS RÍOS. LINUX DRIVER DEVELOPMENT FOR EMBEDDED PROCESSORS. ALBERTO LIBERAL DE LOS RÍOS, 2018
نحوه عملکرد داخلی کرنل
هرچی بیشتر بدونید بهتره!
کتابهای قبلی و بعدی رو بخونید خود به خود یه سری چیزها رو یاد میگیرید توی این زمینه. ولی کتاب مستقل هم هست تو این زمینه که میتونید جست و جو کنید و پیدا کنید.
ابزارهای توسعه نرمافزار گنو
باید ابزارهای گنو رو بشناسید، کاربردهاشون رو بدونید، آپشنها و فلگهاشون رو بلد باشین و بتونین ازشون به بهترین شکل استفاده کنین.
اینها چیزهایی بود که کِریم گفت واسه بهترین استفاده از Embedded Linux باید بلد باشین ولی برای استفاده معمولی همون آشنا بودن با این موارد کافی هست.
یه مورد دیگه هم که کِریم نگفته چون کتابش کلاً تا بالا اومدن سیستم هست و بعدش رو کاری نداره! چون بعدش عملاً دیگه یه لینوکس داریم ما، ولی ما لازمش داریم چون اکثر پروژههامون فقط همین قسمت هست، یعنی یه برد آماده گرفتیم با همه امکانات و فقط میخوایم پروژه رو انجام بدیم، Linux System Programming هست.
اکثر پروژههای دنیای Embedded Linux ارتباطات مستقیم با سیستم عامل و سختافزارها دارن، مثلاً این که یه LED چشمک زن داشته باشیم که نمایشگر قلب سیستم هست توی پروژههای ما معموله، این میشه همون Linux System Programming.
دو تا کتاب تو این زمینه هست یکی خلاصهتر، یکی مفصلتر که پیشنهاد من اینه اول کتاب خلاصهتر رو بخونید تا کلیت بحث دستتون به یاد بعد از کتاب مفصلتر به عنوان رفرنس استفاده کنید.
البته Linux System Programming رو به زبونهای دیگه مثل Go هم میشه انجام داد و کتاب هست تو این زمینه.
خوب این از پیشنیازها!!! چهار تا کتاب هم هست که موضوعشون Embedded Linux هست و نسبت به بقیه کتابها جامعیت بیشتری دارن.
کتاب کِریم رو اول به خونین بعدش کتاب کریس رو و بعد اگه حالش رو داشتین دو تا کتاب دیگه رو. البته با خوندن کتاب کِریم خود به خود کتابهای بعدی رو سریع و راحت میخونید. ولی اگه کتابهای بعدی رو اول شروع کنید به خوندن همه چی برعکس میشه!
یه سایت خوب هم هست که میتونه خیلی بتون کمک کنه elinux.org.
معرفی منبع مطالعه عمیق:
KARIM YAGHMOUR, JON MASTERS, GILAD BEN-YOSSEF, PHILIPPE GERUM. BUILDING EMBEDDED LINUX SYSTEMS. O’REILLY MEDIA, INC., 2008
قسمت بعد رو (بخش دوم این فصل) از اینجا میتونید مطالعه کنید، اما بهتره قبلش یه سری هم به نظرات این پایین بندازید، نظرات رو بخونید و اگر شما هم نظری دارید، مشارکت کنید!
همه آموزش های امبدد لینوکس
منبع:سیسوگ