امروزه با پیشرفت تکنولوژي همه چیز یا هوشمند شده یا به سمت هوشمند شدن پیش میرود. این پیشرفت توسط دستگاههایی امکان پذیرشد که به آنها امبدد سیستم (Embedded Systems) یا سیستم نهفته گفته میشود و در قلب بسیاری از پیشرفتهترین و پیچیدهترین این سیستمها، یک قدرت مرکزی امبدد است که به آن امبدد لینوکس (Embedded Linux) یا لینوکس نهفته گفته میشود.
امبدد لینوکس، اساساً یک سیستم عامل لینوکس است که برای کار در دستگاههای الکترونیکی خاص ساخته شده و برخلاف رایانههای همهمنظوره که کاربردهای عمومی دارند (مانند لپتاپ یا سرورها)، فقط برای یک یا چند هدف مشخص مهندسی و بهینهسازی شده است. اما این تعریف ساده، گویای عمق، پیچیدگی و اهمیت این فناوری نیست. برای درک واقعی آن، باید به ماهیت سیستمهای امبدد و سپس انقلابی که لینوکس در این عرصه به پا کرد، بپردازیم.
یک سیستم نهفته معمولی (مانند یک ترموستات ساده یا کنترل از راه دور) معمولاً بر پایه یک ریزکنترلگر (Microcontroller) ساخته میشود. این ریزکنترلگرها قطعاتی قدرتمند اما محدود هستند که از پردازنده (CPU)، حافظه (RAM)، حافظهٔ برنامه (Flash) و واحدهای ورودی/خروجی (I/O) ساخته شده اند و برنامه این سیستمها، که اغلب “فریمور” (Firmware) نامیده میشود که معمولاً از یک حلقه بیپایان (Super Loop) ساده یا از یک سیستم عامل بلادرنگ (RTOS) استفاده میکند. این معماری برای کارهایی با منابع سختافزاری محدود (حافظه و قدرت پردازش) و وظایف کاملاً مشخص و ثابت، عالی هستند اما با پیشرفت فناوری، انتظارات از دستگاههای الکترونیکی نیز متحول شد. دیگر یک صفحه نمایش ساده و چند دکمه کافی نبود. کاربران به رابطهای کاربری گرافیکی (GUI) پیشرفته، قابلیت اتصال به اینترنت (اتصال شبکه)، قابلیت بهروزرسانی نرمافزار، اجرای برنامههای پیچیده و تعامل با سایر دستگاهها عادت کردند.
اینجاست که سیستمهای امبدد معمولی به محدودیتهای خود رسیدند و نیاز به یک سیستم عامل کامل و قدرتمند احساس شد. برای این منظور از تراشههای دیگری به نام ریزپرداز (Microprocessor) استفاده میشود که در قلب آن لینوکس امبدد در حال انجام تمام وظایف است. این تراشهها نیاز به RAM و Flash خارجی دارند و سرعت و قدرت پردازشی بسیار بالاتری نسبت به خیشاوندان خود (MCU) دارند. برای اینکه این پیچیدگی در ادامه همراه من باشید.
لینوکس با قابلیتهای فراوان خود بهترین گزینه برای برآورد کردن نیازهای پیچیده کاربران بود اما آنچه این گزینه را برای مهندسان جذاب میکرد مزایای زیر است.
قدرت بالا و وجود هرآنچه نیاز است: لینوکس یک سیستم عامل کامل با مدیریت حافظه پیشرفته، زمانبندی چندوظیفگی واقعی، پشته شبکه ( Protocol stack) قوی، درایورهای سختافزاری گسترده و پشتیبانی از هزاران کتابخانه و برنامه کاربردی است.
انعطافپذیری و سفارشیسازی: هسته لینوکس (Linux Kernel) و فضای کاربری (User Space) آن ماژولار و قابل تنظیم هستند به طوری که میتوان تنها مؤلفههای مورد نیاز برای یک دستگاه خاص را انتخاب، کامپایل و مونتاژ کرد.
متنباز (Open Source) و جامعه عظیم: مدل متنباز بودن لینوکس به این معنی است که هیچ هزینهٔ لیسانسی برای استفاده از آن وجود ندارد. همچنین، یک جامعه جهانی از توسعهدهندگان به طور مستمر آن را بهبود میبخشند، امنیتش را افزایش میدهند و برای سختافزارهای جدید بهینه میکنند.
پشتیبانی سختافزاری بینظیر: لینوکس از معماریهای پردازنده مختلف (ARM, MIPS, x86, RISC-V و …) و هزاران قطعه جانبی (Peripheral) پشتیبانی میکند.
ثبات و قابلیت اطمینان: لینوکس به دلیل پایداری و عملکرد قابل اعتمادش در محیطهای بحرانی (Critical section) شناخته شده است.
یک سیستم لینوکس نهفته معمولاً از چهار لایه اصلی تشکیل شده است:
1. لایه سختافزار (Hardware Layer): پردازنده (SoC)، حافظه، فلش، و تمامی قطعات جانبی (مانند درایورهای نمایشگر، وایفای، بلوتوث، سنسورها و …) در این لایه قرار دارند.
2. لایه هسته (Bootloader & Kernel Layer): این لایه خود شامل دو لایه دیگر به شرح زیر است:
بوتلودر (Bootloader): اولین نرمافزاری که پس از روشن شدن دستگاه اجرا میشود. وظیفه آن مقداردهی اولیه سختافزار و بارگذاری هسته لینوکس در حافظه است (مانند U-Boot).
هسته لینوکس (Linux Kernel): قلب سیستم. مدیریت سختافزار، حافظه، پردازشها، شبکه و امنیت را بر عهده دارد. برای سیستم نهفته، هسته به دقت پیکربندی و کامپایل میشود تا تنها شامل درایورها و ویژگیهای مورد نیاز باشد.
3. لایه فضای کاربر (User Space Layer): این لایه شامل تما کتابخانه ها و ابزاری است که کاربر استفاده میکند.
کتابخانههای سیستمی (System Libraries): مانند کتابخانه C (glibc, musl و …) که رابط بین برنامههای کاربردی و هسته را فراهم میکنند.
ابزارهای سیستمی (System Tools): مجموعهای از برنامههای ضروری برای مدیریت سیستم (اغلب از پروژه BusyBox که یک نسخه فشرده از ابزارهای یونیکس است).
چارچوبها و میان افزارها (Frameworks & Middleware): نرمافزارهایی که عملکردهای پیچیده را ارائه میدهند، مانند چارچوبهای رابط کاربری گرافیکی (Qt, GTK+)، پایگاههای داده سبک (SQLite) یا پروتکلهای ارتباطی (DBus).
4.لایه برنامه کاربردی (Application Layer): این لایه شامل نرمافزار اختصاصی و خاصی است که عملکرد اصلی دستگاه را تعریف میکند. برای مثال، برنامه کنترل یک دوربین امنیتی، رابط کاربری یک سیستم اطلاعات-سرگرمی خودرو، یا منطق کنترل یک دستگاه صنعتی.
همانطور که مشاهده کردید یک سیستم لینوکسی لایههای زیادی دارد که کار را برای توسعه دهنده سخت میکند. برای برداشت موانع و کم کردن از پیچیدگیها ابزارهایی مانند Buildroot یا Yocto Project برای مدیریت این پیچیدگیها ایجاد شدهاند که به توسعهدهندگان اجازه میدهند با تعریف پیکربندی، به راحتی یک سیستم عامل لینوکس کاملاً سفارشی، یکپارچه و بهینهشده برای پلتفرم سختافزاری خاص خود بسازند. این لینوکس تنها برای کاری که نیاز است ساخته شده و فاقد تمام برنامه ها و کتابخانه هایی است که کاربر یا توسعه دهنده به آنها نیاز پیدا نخواهد کرد لذا بسیار کم حجم و سریع است و مستعد باگ نیست. به عنوان مثال یک لینوکس نهفته برای یک مودم احتمالا حجمی کمتر از بیست مگابایت دارد درحالی که یک لینوکس با کاربردهای عمومی (مثلا اوبونتو) به چند گیگابایت فضا نیاز دارد. برای اینکه بدانید با این ابزاری که در دست داریم چه چیزهایی میتوان ساخت خوب است که در ادامه برخی از تولیداتی در آن از لینوکس نهفته استفاده شده را بررسی کنیم.
کاربردهای لینوکس نهفته تقریباً در همه صنایع نفوذ کرده و “هوشمندی” را به دستگاههای که هر روز از آنها استفاده میکنیم اضافه کرده است.
1. دستگاه های الکتریکی معمولی (Consumer Electronics)
2. صنعت خودرو (Automotive)
سیستم اطلاعات-سرگرمی (Infotainment Systems): این صفحههای لمسی بزرگ در داشبورد خودروها که نقشهخوانی، پخش موسیقی، تماس تلفنی و کنترل آب و هوا را انجام میدهند، اغلب توسط لینوکس نهفته قدرت میگیرند (مانند سیستم AGL – Automotive Grade Linux).
دستگاههای تشخیصی (Diagnostic Tools): اغلب دستگاه های مدرنی که برای عیبیابی الکترونیکی خودرو استفاده میشوند از لینوکس استفاده میکنند.
3. صنعت و اینترنت اشیاء (Industrial & IoT):
4. شبکه و ارتباطات (Networking & Communications):
5. هوش مصنوعی در لبه (AI at the Edge)
امروزه این یکی از داغترین حوزههای تکنولوژي است. لینوکس نهفته بستری برای اجرای مدلهای هوش مصنوعی بر روی دستگاههای لبه (Edge) مانند دوربینهای نظارتی هوشمند، رباتها و دستیاران صوتی فراهم میکند و امکان پردازش دادهها به صورت بلادرنگ و بدون اتکا به ابر را ایجاد مینماید.
تا اینجا با دلیل استفاده از لینوکس نهفته، ماهیت آن و محل استفاده از آن آشنا شدید اما لازم است بدانید چالشهای زیادی پیش رو خواهید داشت.
اگرچه لینوکس نهفته قدرتمند است، اما چالشهای خود را نیز دارد:
همانطور که تا اینجای مطلب متوجه شدید لینوکس امبدد به یک ستون فقرات نامرئی برای دنیای مدرن تبدیل شده است. این فناوری، موتوری است که نوآوری در صنایع مختلف را با ارائه یک پلتفرم نرمافزاری قدرتمند، انعطافپذیر و مقرونبهصرفه ممکن ساخته است و لذا مزیتهایی که برای ما به ارمغان میآورد بسیار بیشتر از چالشهای آن خواهد بود. اینکه چطور باید این ابزار قدرتمند استفاده کنیم و از چالشهایی که با آن روبرو خواهیم بود را رفع کنیم، موضوعی است که در ادامه به آن میپردازیم.
تصور کنید میخواهید یک دستگاه هوشمند جدید، مثلاً یک دستیار صوتی طراحی کنید. قلب این دستگاه یک پردازنده (SoC – System on Chip) است. اما SoC به تنهایی فقط یک تراشه کوچک است. برای زنده کردن آن به یک مدار کامل شامل حافظه (RAM و Flash)، منابع تغذیه، کریستال کلاک، درایورهای شبکه، درایورهای نمایشگر و صدها قطعه دیگر نیاز دارید. طراحی این مدار از صفر، کاری پیچیده، پرهزینه و زمانبر که نیازمند تخصص بسیار بالایی در مهندسی سختافزارهای دیجیتال، آنالوگ و RF است و اینجاست که بردهای آماده به عنوان راهی برای آسان کردن مسیر توسعه محصول وارد بازار شدند.
شرکتهای سازنده این بردها، تیمهای متخصصی دارند که بهترین روشهای طراحی (Best Practices) را برای هر SoC میدانند. مسائلی مانند یکپارچگی سیگنال (Signal Integrity)، مدیریت توان (Power Integrity)، و طراحی لایههای PCB که برای عملکرد پایدار SoC حیاتی هستند، توسط آنها حل شده است. یکی از بزرگترین چالشها در لینوکس نهفته، نوشتن و یکپارچهسازی درایورهای سختافزاری (Drivers) در هسته لینوکس است. بردهای آماده معروف، معمولاً همراه با یک BSP (Board Support Package) عرضه میشوند. BSP شامل یک نسخه از هسته لینوکس، درایورها، تنظیمات Device Tree و گاهی یک فایل سیستم ریشهای (Root Filesystem) است که برای همان برد خاص بهینه و تست شده است. این BSP نقطه شروع کاملاً مناسبی برای توسعه شماست. مهمتر از همه وقتی بر روی یک برد استاندارد و شناخته شده توسعه میدهید، مطمئن هستید که سختافزار به درستی کار میکند و بنابراین، اگر مشکلی پیش بیاید، میدانید که منشأ آن در نرمافزار یا پیکربندی شماست که باعث میشود فرایند رفع عیب به سرعت انجام شود. حالا سوال اصلی این است که چند نوع برد آماده در بازار وجود دارد و کدام یک برای ما مناسب است.
بردهای آماده در چندین شکل و برای اهداف مختلف وجود دارند:
1. بردهای توسعه (Evaluation Boards / Developer Kits): هدف این بردها آموزش، نمونهسازی اولیه (Prototyping) و ارزیابی قابلیتهای یک SoC خاص است. این بردها معمولاً بزرگ هستند و همه پتانسیلهای SoC را در اختیار شما میگذارند. از مثالهای معروف میتوان به بردهای Raspberry Pi که شناختهشدهترین نمونه در این حوزه که یک جامعه عظیم پشتیبان دارد اشاره کرد.
2. بردهای سیستم روی ماژول System on Module (SOM) یا Computer on Module (COM): هدف این دسته از بردها استفاده در محصول نهایی برای کاهش پیچیدگی و تسریع فرآیند طراحی است. SOM قلب سختافزاری سیستم (پردازنده، حافظه، فلش، مبدلهای توان و clock) را در یک ماژول فشرده جمع میکند. شما یک برد پایه (Carrier Board یا Baseboard) سادهتر طراحی میکنید که تنها شامل کانکتورها، درگاهها و مدارات جانبی مورد نیاز محصولتان است (مانند درگاه اترنت، USB، خروجی صدا و …). سپس SOM را روی برد پایه خود نصب میکنید. از مزایای کلیدی SOM میتوان به این موارد اشاره کرد:
3. بردهای سفارشی (Custom Boards): زمانی که طراحی شما محدودیتهای فیزیکی، هزینه یا عملکردی خاصی دارد که با بردهای آماده برطرف نمیشود. اینجا شرکت یا تیم توسعهدهنده، کل برد را از صفر و متناسب با نیاز دقیق محصول خود طراحی میکند. این راهحل، بیشترین کنترل و بهینهسازی را فراهم میکند اما پرریسکترین، پرهزینهترین و طولانیترین مسیر است. معمولاً شرکتهای بزرگ با تیمهای سختافزاری قوی این راه را انتخاب میکنند.
اگر توانستید انتخاب کنید که چه مدل بردی برای شما بهتر است حالا نیاز دارید که بدانید از کدام سازنده آن را تهیه کنید. سازنده های زیادی وجود دارند که نام خیلی از آنها را شنیده اید و نیاز به معرفی ندارند اما در اینجا قصد دارم شما را با شرکت ARMSOM آشنا کنم. این شرکت ماموریت خود را تجهیز جامعه متنباز با سختافزارهای عالی، فرمورهای قدرتمند و مستندات گسترده معرفی کرده و بردهایی مقرون به صرفه با درجه کیفی بالا عرضه میکند که برای هرکدام مستندات و آموزش کاملی منتشر کرده است. این شرکت در هر سه حوزه ای که معرفی شد فعال است و محصولات متنوعی به بازار عرضه کرده اما بردی که در این آموزش از آن استفاده میکنیم برد ARMSOM CM1 است که دارای پردازنده قدرتمند Rockchip با استاندارد صنعتی است.

مشخصات این برد به این شرح است:
| Category | Specification | Category | Specification |
|---|---|---|---|
| SOC |
|
CPU |
|
| GPU |
|
Memory |
|
| Storage |
|
Video Output |
|
| 40-PIN & 44-PIN |
|
Buttons |
|
| Power Supply |
|
OS Support |
|
| Dimensions |
|
Operating Temperature |
|
همچنین این برد دارای یک برد راه انداز است که تصویر آن را در زیر مشاهده میکنید.

قابلیتهای این برد به شرح زیر است:
| Category | Specification | Category |
Specification |
|---|---|---|---|
| 40-PIN & 44-PIN Female Header |
|
40-PIN Header |
|
| USB Interfaces |
|
Networking |
|
| Audio |
|
12-PIN Header |
|
| Power Supply |
|
OS Support |
|
| Dimensions |
|
Operating Temperature |
|
همانطور که مشاهده میکنید این برد قابلیتهای زیادی دارد و دارای اکثر خروجی و ورودیهایی است که در پروژه های مختلف به آنها نیاز داریم. همچنین با پشتیبانی از استانداردهای صنعتی و قیمت مناسب این برد یکی از بهترین گزینه ها برای پروژه های صنعتی و حوزه پزشکی است. مهمتر از آن شرکت ARMSOM تمامی مستندات لازم را در اختیار طراح قرارداده تا بتواند به سادگی از این برد استفاده کند. بجز مواردی که ذکر شد شما میتوانید از بردهایی ماژولاری (HAT) که برای رسپری پای ساخته شده استفاده کنید که کار توسعه را ساده تر میکند. تصویری که در پایین مشاهده میکنید یک پروژه برای نمایش توانایی این برد است. در ادامه شما را با نحوه راه اندازی برد آشنا میکنم.

شرکت برای اینکه دسترسی آسانی به مستندات داشته باشید تمام آنچه نیاز دارید را در این آدرس (روی آدرس کلیک کنید!) قرار داده که میتوانید به آسانی مستندات لازم را دانلود کنید و همینطور با استفاده از این آدرس میتوانید ابزارهای مورد نیاز را داشته باشید. در آخر هم خوب است به گیت هاب شرکت در این آدرس سری بزنید تا از به روزترین آپدیتها مطلع شوید.
ابتدا پکیجهای مورد نیاز را با دستور زیر دانلود و نصب کنید.
|
1 2 3 4 5 6 7 8 |
sudo apt update && sudo apt upgrade -y sudo apt install -y \ git gcc g++ make build-essential bc bison flex \ libmpc-dev libgmp-dev libncurses5-dev libncursesw5-dev \ libssl-dev libglib2.0-dev device-tree-compiler \ wget cpio unzip rsync file \ python3 python-is-python3 |
همچنین به پایتون ورژن دو نیاز دارید برای نصب آن میتوانید از دستورات زیر استفاده کنید:
|
1 2 3 4 5 6 7 8 9 |
wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz tar -xzvf Python-2.7.18.tgz cd Python-2.7.18 ./configure --enable-optimizations make sudo make altinstall python2.7 --version sudo ln -s /usr/local/bin/python2.7 /usr/local/bin/python2 |
سپس SDK مربوط به ماژول را با دستور زیر دریافت کنید.
|
1 |
git clone https://github.com/ArmSoM/rk3506-rkr4.2-sdk |
بعد از آن وارد دایرکتوری که SDK شوید و در تریمنال دستور زیر را وارد کنید.
|
1 2 |
cd rk3506-rkr4.2-sdk/ ./build.sh lunch |
از بین گزینهها گزینه پنجم یعنی (armsom_cm1_sd_defconfig) را انتخاب کنید. توجه کنید که درمیان گزینهها گزینهی nand برای فلش روی برد وجود دارد.

در آخر دستورات زیر را وارد کنید.
|
1 2 3 |
./build.sh ./build.sh uboot ./build.sh kernel |
چنانچه فایلی که باید برروی SdCard قراردهید به درستی ساخته شده باشد میتوانید برای قراردادن آن روی کارت حافظه از نرم افزار ویندوزی (SDDiskTool) استفاده کنید. برای اینکار لازم است ابتدا به دایرکتوری که در خروجی فرایند بیلد نشان داده شده (rk3506-rkr4.2-sdk/output/firmware) بروید و (update.img) را پیداکنید و آدرس آن را در برنامه قراردهید. ضمنا برای اینکه زبان برنامه انگلیسی شود در config.ini قسمتی که مشخص شده را مطابق تصویر تغییر دهید.

کارت حافظه را متصل کنید و مطابق تصویر کار نصب را انجام داده و سپس کارت را وارد برد توسعه کنید.

سپس با اتصال به UART میتوانید وارد لینوکسی که ساختید شوید.

برای اتصال صحیح لازم است UART را به شکل زیر تنظیم کنید.
baudrate: 1500000
data bit: 8
stop bit: 1
parity : none
flow control: none
چنانچه همه چیز به درستی انجام شده باشد خروجی زیر را مشاهده خواهید کرد.

امیدوارم تا اینجا از این آموزش بهره کافی را برده باشید و درآینده بتوانم آموزشهای بیشتری در این موضوع برای شما عزیزان تهیه کنم. پیشاپیش از اینکه با نظرات خوبتون حامی ما هستید ممنونم.
وبسایت: http://Embedex.ir
همیشه درحال آموزش، عاشق الکترونیک و برنامه نویسی
برد رو از کجا تهیه کردید؟
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.