شرکت فناوران اینترنت اشیاء هیوا
زنجیره ابزار
امروزه اینترنت اشیا یا IoT و تأثیرش بر همهچیز، سروصدای زیادی به پا کرده است، از نحوه سفر و خریدهای ما تا نحوه نظارت تولیدکنندگان بر موجودی؛ اما اینترنت اشیا چیست؟ چگونه کار میکند؟ و آیا واقعاً اینقدر مهم است؟
زنجیره ابزار چیست؟
از طرفی زبانهای سی و سی پلاس پلاس زبانهای کامپایلری محسوب میشوند، به این معنی که برای اینکه کامپیوتر بتواند آن برنامه را اجرا کند نیاز است ابتدا توسط ابزاری به اسم کامپایلر برنامه نوشته شده به زبان اسمبلی یا ماشین تبدیل شود، و خروجی کامپایلر معمولا یک یا چند فایل باینری، صفر و یک، است که یا برنامه اجرایی هستند یا اینکه به عنوان کتابخانه در دیگر برنامهها میتوانند استفاده شوند. نکته قابل توجه این است که تفاوت برنامه اجرایی و کتابخانه در چیست؟ برنامههای اجرایی همیشه دارای یک تابع هستند به نام تابع main که اجرای برنامه از آن تابع صورت میگیرد و کدهای نوشته شده را خط به خط به اجرا درمیآورد، اما در کتابخانهها معمولاً تابع main وجود ندارد بنابراین قابلیت اجرایی نخواهد داشت. شاید برایتان سوال پیش آمده باشد که اگر کتابخانه قابلیت اجرایی ندارد پس چه فایدهای دارد؟ جواب این است که برای جلوگیری از اختراع دوباره چرخ یا به عبارتی دقیقتر برای اینکه بتوان به یک کد قابلیت استفاده مجدد داد، آن را به صورت کتابخانه در میآورند تا در چندین پروژه قابلیت استفاده پیدا کند.
خب تا این لحظه متوجه شدیم که برنامههایی که برنامهنویسان مینویسند به دو دسته برنامه اجرایی و کتابخانه تقسیم میشوند. در واقع یکی از دلایل مهمی که شرکتها برای نوشتن نرمافزارهای محصولات خود از زبان سی و سی پلاس پلاس استفاده میکنند وجود تعداد عظیمی از کتابخانهها با کاربردهای مختلف است که دست توسعه دهنده را باز میگذارد که بتواند به جای پیادهسازی مجدد راهاندازها و الگوریتمها صرفاً به پیادهسازی الگوریتم محصول خود بپردازند. پس کتابخانهها نقش بسیار مهمی را ایفا میکنند. در صورت نیاز به توضیح بیشتر به بنده ایمیل بزنید تا در مقاله دیگری به اهمیت کتابخانهها بپردازم.
اما به عنوان یک توسعه دهنده، چگونه میتوان از کتابخانهها در برنامه خود استفاده کرد؟ خب باید گفت که هر زبان برنامهنویسی برای مدیریت و استفاده از کتابخانهها شرایط و روشهای خاصی دارد که شاید برخی موارد بسیار شبیه به هم باشد. لازم است بدانیم که در کنار کامپایلر، ابزارهای دیگری نیز مورد نیاز که بتواند به ما امکان استفاده از کتابخانهها را بدهد. یکی از این ابزارها لینکر یا ارتباط دهنده است و کارش این است که پس از این برنامه توسعه دهنده کامپایل شد ارتباط بین برنامه باینری را با کتابخانههای مورد استفاده پیوند دهد تا ماشین بتواند دستورهای اجرایی را بیابد و اجرا نماید. البته خود پیوند دادن کتابخانه با نرمافزار روشهای متعددی دارد که در دو دسته ایستا و پویا تقسیم میشوند. لازم است بدانیم کوچکترین برنامهای که میتوان نوشت، باز نیاز به کتابخانه پایه دارد. در نتیجه حتی اگر قصد نوشتن برنامه hello world هم دارید باز وجود لینکر الزامی است.
از بحث کتابخانهها هم که بگذریم، معماری ماشین هم مسأله بسیار مهمی است. معماریهای متعددی برای کامپیوترها و پردازندهها وجود دارد. به خصوص اینکه تعدد معماری در زمینه اینترنت اشیاء بسیار بیشتر است. معماریهای ARM، AVR، MIPS، RISCV و x86 از جمله این معماریها است. از طرفی چون زبانهای کامپایلری برنامه را به زبان ماشین یا اسمبلی تبدیل میکنند تنها و تنها میتوانند بر روی ماشینی اجرا شوند که برای آن کامپایل شدهاند. به این معنی که معماریهای مختلف با هم سازگاری ندارند. از طرفی دیگر نیز وجود سیستمعامل یا عدم وجود آن و نوع سیستمعامل نیز در اجرای برنامهها و سازگاری آنها تأثیر گذار است.
با همه این تفاسیر چگونه میتوان برای سختافزار مورد نظر خود برنامه نوشت؟ جواب این است که باید از مجموعهای ابزارها استفاده کنیم که عملیات کامپایل، لینک و آمادهسازی برنامه را برای ما انجام دهد. به این مجموعه ابزارها، زنجیره ابزار یا toolchain گفته میشود. بنابراین، برای هر معماری پردازنده و هر سیستمعامل زنجیره ابزار مخصوص آن وجود دارد. آیا میتوان با برنامهنویسی بر روی یک کامپیوتر مثلا با معماری x86 برای یک پردازنده مثلاً با معماری ARM برنامه نوشت؟ جواب بله است همه چیز به زنجیره ابزار شما مرتبط است. ممکن است زنجیره ابزار جوری تهیه شده باشد که خودش بر روی x86 اجرا شود ولی برنامه اجرایی خروجی آن برای ARM باشد در نتیجه برنامه بر روی کامپیوتر توسعه دهنده قابل اجرا نیست اما بر روی برد الکترونیکی مقصد قابل اجراست. علاوه بر همه این موارد، زنجیره ابزار شامل ابزار دیباگ هم میشود که به توسعه دهنده برای یافتن مشکلات برنامه کمک میکند.
از کجا میتوان زنجیره ابزار مناسب را یافت؟
در ادامه چندین زنجیره ابزار پرکاربرد معرفی میشود.
زنجیره ابزارهای پر کاربرد
زنجیره ابزار AVR برای محیط ویندوز
زنجیره ابزار AVR برای محیط لینوکس
زنجیره ابزار AVR برای محیط مک
در صورتی که سختافزار مقصد شما دارای معماری ARM است میتوانید از لینک ARM دانلود کنید. البته دقت نمایید که این زنحیره ابزارها برای پردازندههای ARM با هستههای Cortex-M است و برای اجرای مستقیم بر روی سختافزار است(بدون وجود سیستمعامل.).
برای ویندوز ، مک و برای لینوکس لینک گذاشته شده است که بتوانید راحتتر نسخه مناسب را دانلود نمایید.
اما اگر برای بردهایی که پردازنده ARMدارند و دارای هسته Cortex-A هستند و سیستمعامل لینوکس بر روی آنها وجود دارد بهترین سایت برای دانلود زنحیره ابزارها سایت لینارو است. سایت لینارو دارای مجموعه عظیمی از زنجیرههای ابزار است ولی نکته حائز اهمیت این است که وقتی پای سیستمعامل به میان میآید. مورد دیگری باید به زنحیره ابزار اضافه شود به نام sysroot که از روی کتابخانهها و بستههای نصب شده بر روی سیستمعامل روی برد ساخته میشود بنابراین با تغییر سیستمعامل قطعا sysroot تحت تاثیر قرار میگیرد. بنابراین در این قسمت لینکهایی که ارائه میشود برای دبیان است.
در لینک ARM64، نسخه ۶۴ بیتی و ARM، نسخه ۳۲ بیتی و sysroot ۶۴ بیتی و در نهایت sysroot ۳۲ بیتی را دانلود نمایید.