قسمت سوم از دوره ورود به دنیای امبدد لینوکس که دوره مقدماتی آموزش امبدد لینوکس می باشد با ما همراه باشید.
(فصل اول – بخش اول )
سلام بر همراهان
در دو قسمت قبل، به عنوان مقدمه و پیشگفتار بحث امبدد لینوکس، به پیش نیازها، مسیر حرکت و فصلهای پیش رو در این دوره اشاره کردیم و به سؤالها و ابهاماتی که داشتید پاسخ داده شد. پس اگر اولین بار است که این مطلب را میخوانید، بهتر است از جلسه اول شروع کنید!
خیلیهاتون احتمالا 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 هم میشه انجام داد و کتاب هست تو این زمینه.
LOVE, ROBERT. LINUX SYSTEM PROGRAMMING: TALKING DIRECTLY TO THE KERNEL AND C LIBRARY. ” O’REILLY MEDIA, INC.”, 2013.
خوب این از پیشنیازها!!! چهار تا کتاب هم هست که موضوعشون Embedded Linux هست و نسبت به بقیه کتابها جامعیت بیشتری دارن.
کتاب کِریم رو اول به خونین بعدش کتاب کریس رو و بعد اگه حالش رو داشتین دو تا کتاب دیگه رو. البته با خوندن کتاب کِریم خود به خود کتابهای بعدی رو سریع و راحت میخونید. ولی اگه کتابهای بعدی رو اول شروع کنید به خوندن همه چی برعکس میشه!
یه سایت خوب هم هست که میتونه خیلی بتون کمک کنه elinux.org.
معرفی منبع مطالعه عمیق:
KARIM YAGHMOUR, JON MASTERS, GILAD BEN-YOSSEF, PHILIPPE GERUM. BUILDING EMBEDDED LINUX SYSTEMS. O’REILLY MEDIA, INC., 2008.
HALLINAN, CHRISTOPHER. EMBEDDED LINUX PRIMER: A PRACTICAL REAL-WORLD APPROACH. PEARSON EDUCATION INDIA, 2011.
SIMMONDS, CHRIS. MASTERING EMBEDDED LINUX PROGRAMMING. PACKT PUBLISHING LTD, 2017.
ABBOTT, DOUG. LINUX FOR EMBEDDED AND REAL-TIME APPLICATIONS. ELSEVIER, 2018.
سلام
با تشکر از زحمت گردآوری ارجاع به کتابها
اگر آدرس و لینک دانلود هم لیست بفرمائید ممنون خواهیم شد.
از سومین کتاب به بعد پیدا کردن و دانلود مشکل است
ممنون
انگار یه دریا پیدا کردم…. آقا خیلی مرسی….. زییییاد..
سلام بهزاد جان
با لذت شنا کنید
سلام. کتاب Linux Device Driver Development Cookbook رو از کجا می شه تهیه کرد؟ من سرچ کردم pdf پیدا نکردم.
سلام جناب ابریشمی عزیز
وقت بخیر
البته ما جستجو کردیم و در این سایت بود? LibGen
http://libgen.rs
موفق باشید
سلام و احترام، وقتتون بخیر. بسیار ممنونم از اینکه برای تهیه این مجموعه آموزش عالی وقت میذارین.
میخواستم بدونم من که در حال دنبال کردن این آموزش هستم، نیاز هست که ابتدا همه منابع معرفی شده در این قسمت رو مطالعه کنم بعد برم سراغ قسمت های بعدی یا با توجه به اینکه حجم این منابع زیاد هست و مطالعشون زمانبر، در کنار مطالعه این منابع میشه از بقیه قسمت ها استفاده کرد؟
با تشکر.
سلام بر آرمین عزیز
جواب شما <> است، یعنی نیازی نیست همه منابع را مطالعه کرده و سپس به قسمت بعدی بروید.
شما طبق روال با آموزش ها حرکت کنید و پس از اتمام مقاله ها، نیاز هست که حداقل یک بار دیگر کلیه آموزش ها را از ابتدا انجام داده و منابع معرفی شده را با دقت بیشتری مطالعه نمایید.
موفق باشید
سلام. ممنون از پاسختون. ممنون. متوجه شدم. فقط قسمت اول پاسخ منظورتون از “جواب شما است” رو نفهمیدم.
سلام بر آرمین
عبارت این بوده :
جواب شما خیر است
سلان و ارادت. سپاسگزارم.
همراهتونیم تا آخرش.
ممنون از شما.
بی صبرانه منتظر ادامه مطالبتون هستیم
سلام و تشکر
سلام و احترام، وقتتون بخیر. بسیار ممنونم از اینکه برای تهیه این مجموعه آموزش عالی وقت میذارین.
میخواستم بدونم من که در حال دنبال کردن این آموزش هستم، نیاز هست که ابتدا همه منابع معرفی شده در این قسمت رو مطالعه کنم بعد برم سراغ قسمت های بعدی یا با توجه به اینکه حجم این منابع زیاد هست و مطالعشون زمانبر، در کنار مطالعه این منابع میشه از بقیه قسمت ها استفاده کرد؟
با تشکر.
سلام وقتتون بخیر
عذرخواهی میکنم
مدت زیادی از پرسشتون گذتشه و احتمالا تا الان جواب سوال رو گرفته باشین
امیدوارم موفق باشین.
عالی و زیبا
همچنان منتظر ادامه آموزش هستیم.
و یک حرکت عملی عالی
سلام عباس جان
ممنون از پیگیری شما
البته حرکت عملی را خودتان باید بزنید و الان هم در راه باشید
موفق باشید
سلام جناب مهندس.
وقت بخیر. خدا قوت.
باز هم بسیار عالی و جالب بود. ولی اینبار با منابع سنگین تر. برای منابع کتابهای ترجمه شده فکر کنم نباشد. چون من مدتی دنبال این مبحث بودم. حتی استادی که درایور نویسی لینوکس یاد بدهد چند سال پیش در لایتک شریف بود که به خارج مهاجرت کردند. و در سال یک بار دوره درایور نویسی داشتند به مدت 6 ماه. البته یک جلسه بنده افتخار دیدار ایشان را داشتم. ولی در آن روزها من متوجه اهمیت دوره نشدم. چون نیازی هم به آن نداشتم. ولی بعدها که مورد نیاز شد دیگر استاد نبودند.
حال اگر منابع فارسی هم سراغ دارید -درباره کرنل و درایور نویسی-(وگرنه کتابهای لینوکس شبیه به هم و غیر تخصصی زیاد هستند) لطفا اعلام کنید.
منتظر خبر خوب شما هستم.
سلام بر شما
وقت بخیر
بله مطالب فارسی یا ترجمه شده ای به شکل پیوسته وجود ندارد و از طرفی ترجمه کاربردی امبدد لینوکس هم نیازمند تسلط مترجم بر بحث می باشد، بانضمام افرادی که در ویراستاری و نشر کتاب هم اهل فن باشند و همکاری نمایند.
موفق باشید