(فصل اول – بخش دوم )
سلام بر دوستان بخش آخر از فصل اول را ادامه میدهیم. قسمت قبل رو میتونید از اینجا مطالعه کنید.
در قسمتهای قبلی آموزش، مسیر حرکت و فصلهای پیش رو، بسیاری از مفاهیم مورد نیاز و سؤالها و ابهامات شما در این دوره پاسخ داده شده است.
پس اگر اولین بار است که این آموزش را شروع میکنید، با توجه به سلسله مراتب پیش بینی شده برای آموزشها، بهتر است از جلسه اول شروع کنید!
جلسه اول آموزش، ورود به دنیای امبدد لینوکس
همه آموزشهای امبدد لینوکس
اجزای یک Embedded Linux
کار ما چهارتا بخش داره:
اولین چیزها یه سری ابزارها هستن که بتونیم به کمکشون کدها رو تبدیل به برنامههای اجرایی کنیم که بهشون میگیم Toolchain.
وقتی برق به SoC میرسه باید یه برنامه رو از یه جای مشخص از یک حافظه خارجی مشخص لود کنه و بریزه توی رم داخلی خودش، که بعد اون برنامه بره بقیه کارها مثل راه اندازی RAM DDR, SDIO, SPI, UART, USART, USB, USB3, Ethernet و … رو انجام بده و سیستم عامل رو اجرا کنه به این برنامه میگیم بوت لودر که یه برنامه هم نیست البته!
بعد از بوت لودر نوبت به کرنل میرسه که باید اجرا بشه.
کرنل پس از اجرا شدن معمولاً باید یه سری برنامهها رو اجرا کنه که اونا توی فایل سیستم روت هستن.
پس چهارتا جزء داریم: Toolchain، Bootloader، Kernel، Rootfs.
کجاها میکروکنترلر، کجاها لینوکس؟
لینوکس یک سیستم عامل Real Time یا همون RTOS نیست. پس در جاهایی که نیاز به کارهای بلادرنگ هست باید رفت سراغ همون میکروکنترلر خودمون.
مثلاً جاهایی که قراره یه پالس ورودی با عرض چند میکرو ثانیه کپچر بشه، یا یه وقفه خارجی که اگه اتفاق بیوفته حداکثر چند میکرو ثانیه بعدش باید یه سری کارها انجام بشه.
معرفی منبع (مقاله) مطالعه عمیق:
FENG, SHEN, ET AL. “EEGU2: AN EMBEDDED DEVICE FOR BRAIN/BODY SIGNAL ACQUISITION AND PROCESSING.” PROCEEDINGS OF THE 27TH INTERNATIONAL SYMPOSIUM ON RAPID SYSTEM PROTOTYPING: SHORTENING THE PATH FROM SPECIFICATION TO PROTOTYPE. 2016.
به صورت خیلی خلاصه و غیر علمی
هر جا زمانبندی میکروثانیهای لازم باشه لینوکس گزینه مناسبی نیست.
هممون میدونیم که Embedded Linux خیلی جاها داره استفاده میشه، دوربینهای مداربسته، انواع مودمها، تلویزیونهای هوشمند، TV Box ها، آیفونهای تصویری هوشمند، پرینترها، تجهیزات اندازه گیری مانند اسیلوسکوپ های جدید و … ولی خوب کجاها بهتره (دقت کنید من نگفتم باید، گفتم بهتره!)، که ما توی پروژه به جای میکروکنترلر از یه SoC و لینوکس استفاده کنیم؟
به صورت خیلی خلاصه و غیر علمی
جاهایی که یک رابط کاربری خیلی جذاب لازم هست و قراره بعداً هم آپدیت بشه،
جاهایی که رابط کاربری چند زبانه لازم هست،
جاهایی که کارهای مولتیمدیا مثل پخش فیلم و آهنگ و نشون دادن تصویر دوربین و … لازم هست،
جاهایی که قراره خیلی چیزهای خارجی به برد وصل بشن مثل موس، کیبورد، پرینتر، فلش، مودم، بارکد خوان و این جور چیزها،
جاهایی که قراره برد بتونه با روشهای مختلف به کامپیوتر وصل بشه مثلاً هم USB هم اترنت و هم Wi-Fi،
جاهایی که نیاز به دیتابیس و نگهداری حساب شده حجم زیادی از اطلاعات مختلف هست،
به عبارتی هر جا اسم شبکه اومد! (البته این ترجیح خودم هست، من اصلاً حوصله FreeRTOS و LWIP رو ندارم، مخصوصاً از وقتی که توی یه پروژه دیدم ThreadX و NetX Duo راندمان خیلی بهتری دارن.)
حالا کجاها ترکیبی؟
خوب جاهایی که هم کار بلادرنگ لازمه هم یکی از موارد بالا، مثلاً:
اگه یه روزی خواستین یه DAQ بسازین که هم با Wi-Fi هم USB و یا اترنت دیتا رو بفرسته به کامپیوتر یا یک سرور و بسته به فرکانس نمونه برداری از سیگنال آنالوگ و حجم اطلاعات بهتره یه میکروکنترلر یا یک FPGA برای ارتباط با ADC بگذارید که دیتا رو بگیره و بده به برد لینوکسی که اون تحویل کامپیوتر یا شبکه بده.
حداقل سختافزار لازم برای اجرای لینوکس
لینوکس معماریهای زیادی رو ساپورت میکنه و البته میتونید معماری جدید هم خودتون بهش اضافه کنید.
برای اجرا شدن هم به حداقل 16 مبیبایت رم و 8 مبیبایت حافظه غیرفرار که لینوکس ساپورتش کنه نیاز هست، البته با سیستمی کمتر از این هم میشه ولی ماها که تازه کاریم از اینکارا بهتره انجام ندیم!
به صورت خیلی خلاصه و غیر علمی
هر پردازنده 32 بیتی که واحد مدیریت حافظه یا Memory Management Unit (MMU) داشته باشه، شما میتونید روش واسه لینوکس حساب کنید.
قبلاً uCLinux وجود داشت که نسخه تغییر یافته لینوکس برای میکروکنترلرها و پردازندههای بدون MMU بود ولی الآن دیگه این پروژه زنده نیست.
البته هنوز هم از لینوکس روی پردازندههای بدون MMU با یه سری محدودیتها میشه استفاده کرد. مثلاً اینجا یک سری بردهای میکروکنترلری شرکت ST رو لیست کرده که لینوکس واسشون هست یا اینجا داکیومنت خود کرنل برای STM32 هست.
باز هم بهتره ماها که تازه کاریم سراغ لینوکس واسه پردازندههای بدون MMU نریم!
خودمون برد بزنیم یا SoM و یا SBC بخریم؟
توی دنیای امروز ما بیشتر با SoC (System on Chip) ها روبرو هستیم یعنی چیپهایی که دیگه فقط یه پردازنده نیستن، در کنار اون پردازنده ممکنه خیلی چیزهای دیگه هم باشه مخصوصاً توی مدلهای چینی که حتی رم DDR2 هم توی خود چیپ هست!
طراحی برد برای این SoC ها نیاز به دانش و سرمایه بسیار زیادی داره مگر در مورد برخی مدلهای چینی مانند F1C100S یا V3S که رم داخل SoC هست و فوت پرینتش هم BGA نیست و میشه روی برد دولایه مونتاژش کرد و مورد استفاده قرار داد.
یه مسئله مهمی که در مورد این SoC های چینی هست، علاوه بر مورد اطلاعات و منابع، محدودیت در استفاده از اونها در کارهای نظامی، پزشکی، خودرویی و کلاً کارهای حساس هست. معمولاً توی دیتاشیتشون گفته شده که این SoC مناسب کارهای حساس نیست و اگه استفاده کردین و جان کسی به خطر افتاد پای خودتونه
قبلی
بعدی
مورد دوم SBC ها هستن مثل رسپبریپای و انواع پایهای دیگه!
این SBC (Single Board Computer) ها معمولاً برای مقاصد آموزشی طراحی میشن و استفاده ازشون نیاز به برد جانبی نداره. خیلی راحت میشه به کانکتور تغذیهشون ولتاژ و جریان مناسب رو داد و با استفاده از کانکتورهای ارتباطی که دارن بهشون وصل شد یا کد ریخت روشون و هر کار دیگهای کرد.
چندتا نکته این SBC ها دارن که ممکنه در آینده برای پروژه ما مشکل ساز بشه البته ممکن هم هست که نشه و بتونیم با خیال راحت استفاده کنیم.
برای مثال، همه امکانات SoC ممکنه در دسترس نباشه و ما فقط میتونیم از امکاناتی که طراح برد در اختیارمون گذاشته استفاده کنیم.
مثلاً اگه SoC اصلی SDIO داره و میشه بهش آیسی Wi-Fi وصل کرد ولی طراح برد این کار رو نکرده ما هم دیگه نمیتونیم چون پایهها در دسترس نیستند.
یا اینکه، همیشه تولید نمیشن یا هیچ تضمینی وجود نداره که تا کی تولید میشن و این ممکنه پشتیبانی محصول رو در آینده واسه ما سخت کنه.
چون محل کانکتورها ثابت هست خود به خود ظاهر دستگاه و جعبه ما متأثر از SBC هست که انتخاب کردیم.
مورد آخر، بعضی از این بردها استانداردهای لازم برای برخی موارد رو ندارن و شاید بهینه نباشن برای چند ماه روشن بودن و کار مداوم داشتن. که معمولاً خود شرکت سازنده اینها رو در اختیار میذاره ولی ما معمولاً توجهی نداریم!
قبلی
بعدی
مورد آخر که بیشتر از همه مورد علاقه من هست SoM ها هستن.
SoM (System on Module) ها معمولاً نیاز به یک Main Board، Mother Board، Carrier Board، یا هر چیزی که اسمش رو بگذارید دارن. یعنی به تنهایی قابل استفاده نیستن و اینجوری طراحی شدن که جزئی از یک محصول باشن و خودشون محصول مستقلی نیستن.
مدلهای مختلفی دارن، بعضیهاشون حالت BGA دارن و پدها زیر ماژول هست و روی برد مونتاژ میشن، بعضیهاشون مثل ماژول HC05 هستن و پدهاشون دورو تا دور ماژول هست و روی برد مونتاژ میشن، بعضیهاشون مثل رم لپ تاپ هستن و روی کانکتورهای SO-DIMM سوار میشن،
بعضیهاشون روی کانکتورهای M.2 سوار میشن، بعضیهاشون از پین هدرهایی با فاصله پایه 2 میلیمتر برای ارتباط با برد اصلی استفاده کردن و …
SoM ها گرونن! مخصوصاً مدلهای اروپایی و امریکایی اونها، ولی به چند تا دلیل معمولاً بهترین گزینه هستن:
اول شرکت سازنده به شما تضمین میده که تا فلان سال این SoM رو تولید و پشتیبانی خواهند کرد.
دوم شرکت سازنده اطلاعات خوبی در اختیار شما میگذاره و کار شما رو برای راه اندازی لینوکس راحت میکنه.
سوم اگه یکی در دستگاه رو باز کرد، حداقل لذت می بره!!!
و خیلی مزایای دیگه.
قبلی
بعدی
به صورت خیلی خلاصه و غیر علمی
اگر SoC های چینی ارزان قیمت جوابگوی نیاز شماست و میتوانید بدون گوگل باهاش کار کنید و طراحی سخت افزاریش را انجام بدید، از آنها استفاده کنید.
اگر به هر دلیلی سراغ گزینه دیگری باید بروید:
برای مثال: ظاهر محصول و باطن آن مهم است یا قرار است در آینده محصول باز تولید شود سراغ SoM بروید، برای هزینه کمتر میتونید برید سراغ شرکتهای چینی تولید کننده SoM مثل www.friendlyarm.com.
در غیر این صورت از یک SBC که از پس نیازتون بر میاد استفاده کنید.
به SoM ها اصطلاحاً CoM (Computer on Module) هم گفته میشود.
پایان فصل اول
قسمت بعد (فصل دوم) رو از اینجا میتونید مطالعه کنید، اما بهتره قبلش یه سری هم به نظرات این پایین بندازید، نظرات رو بخونید و اگر شما هم نظری دارید، مشارکت کنید!
همه آموزش های امبدد لینوکس
منبع:سیسوگ