بوت لودر قسمت بسیار مهمی و حیاتی از نرم افزار است که روی هر سیستمی اجرا می شود و رابطی برای بارگذاری یک سیستم عامل و برنامه های کاربردی برای کاربر فراهم می کند. در ادامه در مورد اینکه بوت لودر چیست و چه کاربردهایی دارد، صحبت خواهیم کرد.
فهرست مطالب
بوت لودر چیست؟
آیا تا به حال فکر کرده اید که چگونه میکروکنترلرها از کامپیوتر شما برنامه ریزی می شوند؟ آیا از حذف میکروکنترلر از سیستم خود و استفاده از یک پروگرامر خاص خسته شده اید؟
بوت لودر، برنامه ای است که در میکروکنترلر اجرا می شود و باید پروگرام شود. برای بارگذاری یک برنامه در حافظه، ابتدا باید یک برنامه را در حافظه (مموری) بارگذاری کنید. در برخی موارد، این اولین نقطه ای است که در آن می توان یکپارچگی یک سیستم امبدد را بررسی کرد.
همانطور که گفتیم بوت لودر، یک کد نرم افزاری (نوشته شده توسط سازنده) است که در حافظه میکروکنترلر قرار دارد و نقش هماهنگی با کل پردازنده ها را دارد. این کد به میکروکنترلر کمک می کند تا از کامپیوتر میزبان برنامه ریزی شود. به طور کلی از پروتکل RS232 UART برای پروگرام کردن کنترلر استفاده می شود، اما برخی از آنها از SPI، I2C یا Modbus ASCII نیز استفاده می کنند.
یک مثال خوب می تواند بوت لودر در برد آردوینو باشد که برای فلش کردن نرم افزار اپلیکیشن در فلش مموری تراشه ATMega پیکر بندی شده است.
بوت لودر Bootloader در میکروکنترلر چگونه کار می کند؟
بوت لودر یک برنامه کوتاه است که برای رایت سخت افزار روی میکروکنترلر بدون هیچ دستگاه پروگرامری مانند FLASH یا حافظه فرار مانند RAM استفاده می شود و از آنجا به برنامه مورد نظر رفته و آن را اجرا می کند. فرآیند رایت داده های ارائه شده در حافظه برنامه توسط bootloader کنترل می شود.
بوت لودر در واقع اولین برنامه ای است که اجرا می شود و می تواند سایر برنامه ها را در مکان های خاصی از حافظه بارگذاری کند و در اینترفیس سریال ارائه شود. میکروکنترلرهای امبدد طرح های مختلف پیکربندی تنظیم مجدد سخت افزار را ارائه میدهند.
بوت لودر برنامه ای است که هدف اصلی آن ارائه اجازه به نرم افزار سیستمی است که باید بدون استفاده از سخت افزار تخصصی مانند برنامه نویس JTAG به روز شود.
وقتی میکروکنترلر روشن یا ریست می شود، وضعیت بوت لودر را بررسی می کند. اگر شرط برآورده شد، کد اجرا می شود و در غیر این صورت، برنامه کاربر شروع به اجرا می کند. وضعیت بوت لودر را می توان با سخت افزار یا نرم افزار بررسی کرد.
آشنایی با سیستم بوت لودر
بوت لودر ها می توانند اندازه های مختلفی داشته باشند و بر اساس نوع وظیفه ای که اجرا می کنند نسبت به یکدیگر متمایز هستند؛ اما به طور کلی عملکرد بوت لودر نسبتاً استاندارد است. سه بخش مهم در هر بوت لودر وجود دارد:
کد انشعاب که هنگام راهاندازی، تصمیم میگیرد که کد اجرا شود یا کد برنامه. این کار با بررسی یک پین GPIO هنگام راه اندازی انجام می شود. چنین روش هایی توسط تولید کنندگان و توسعه دهندگان استفاده می شود.
در یک سیستم پیچیده تر، بوت لودر خود را به همراه کد برنامه در حافظه بارگذاری می کند، سپس پارامترهای اولیه و یکپارچگی سیستم را بررسی می کند. پس از انجام این کار، به اجرای کد برنامه باز می گردد. به همین دلیل است که بسیاری از بوت لودرها حاوی کد انشعاب هستند.
Bootloader به گونه ای طراحی شده است که حتی زمانی که برنامه در حال اجراست، می تواند درخواست ارتقاء سیستم عامل را داشته باشد و پس از آن، پاکسازی های لازم سیستم را انجام می دهد. هنگامی که این کار انجام شد، تراشه را با قرار دادن مقادیر شناخته شده در رجیستر نگهبان (واچ داگ)، سافت ریست می کند. علاوه بر این، برنامه تمام دستورالعمل های لازم را برای کد انشعاب قرار می دهد تا دستگاه را در حالت Bootloader قرار دهد.
اکنون هنگامی که بوت لودر در حافظه بارگذاری می شود، شروع به تنظیم اولیه دستورالعمل های اولیه و تجهیزات جانبی می کند تا برای ارتقاء سیستم عامل آماده شود. تجهیزات جانبی معمولاً کلاک های سیستم، وقفه ها و کانال های ارتباطی و زمان بندی هستند. اینها به bootloader اجازه می دهد تا دستورات را از خارج بپذیرد و فرآیند ارتقا را شروع می کند. پس از اتمام، تراشه را سافت ریست میکند و وقتی دوباره بالا میآید، به حالت عملکرد عادی میرود.
انواع بوت لودرها
- پروگرام کردن درون سیستم (ISP)
- پروگرام کردن درون اپلیکیشن (IAP)
امروزه همه میکروکنترلرها هر دو تکنیک پروگرام کردن فوق را دارند. در اینجا نیازی به حذف تراشه یا چیپ از سیستم نیست. این بستگی به کاربر دارد که یکی از آنها را انتخاب کند. در ادامه در مورد هر دو تکنیک به تفصیل صحبت خواهیم کرد.
پروگرام کردن درون سیستم (ISP)
در این حالت، بوت لودر در بوت رام (ROM) قرار دارد که از حافظه برنامه کاربر جداست. این بلوک در برابر نوشتن محافظت می شود. در اینجا وضعیت bootloader توسط خود سخت افزار بررسی می شود.
بیایید نمونه ای از میکروکنترلر AT89C51xD2 را در نظر بگیریم که از ساختار 8051 پشتیبانی می کند و دارای حالت پروگرام ISP است. با مراجعه به دیتاشیت این کنترلر متوجه شدیم که پین PSEN برای نظارت بر وضعیت بوت لودر استفاده می شود. اگر این پین در حین تنظیم مجدد لبه سقوط، به زمین متصل شود (PSEN=0) باعث توقیف بوت لودر روی تراشه می شود.
هنگام راه اندازی، پین PSEN در حالت امپدانس بالا قرار دارد. از این رو باید برای جلوگیری از هر گونه درخواست غیر ضروری بوت لودر به بالا کشیده شود. برای پیاده سازی ISP در سیستم، می توانیم یک سوئیچ کشویی را در سراسر پین PSEN قرار دهیم. این ما را به دو حالت viz-bootloader mode و application mode می رساند. نمودار اتصال در زیر نشان داده شده است.
پروگرام کردن درون اپلیکیشن (IAP)
در این حالت، بوت لودر در همان بلوک حافظه برنامه کاربر قرار دارد. از این رو کاربر می تواند بوت لودر سفارشی ایجاد کرده و از آن برای پروگرام کردن میکروکنترلرها استفاده کند. یکی از بهترین نمونه های IAP بروزرسانی بدون سیم (OTA) است.
IAP به میکروکنترلر اجازه می دهد تا حافظه را بدون حذف تراشه از سیستم و در حین اجرای برنامه کاربر برنامه ریزی کند. اکنون کاربر باید شرایط بوت لودر را تعریف کند. به عنوان مثال، کاربر می تواند وضعیت دکمه فشاری را پس از تنظیم مجدد بررسی کند؛ اگر شرط برآورده شود، اجرای برنامه باید به bootloader سفارشی و اگر نه، پس از آن به برنامه اپلیکیشن.
در هنگام نوشتن bootloader سفارشی، باید توجه داشته باشید که بررسی وضعیت بوت لودر باید اولین کد پس از تنظیم مجدد یا روشن کردن دستگاه باشد.
بوت لودر در AVR
یک AVR دارای حافظه ای است که به دو بخش، یک اپلیکیشن، یک بخش بوت لودر تقسیم می شود. بخش اپلیکیشن شامل کدهای خاص اپلیکیشن است و بخش bootloader می تواند شامل انواع مختلفی از بوت لودرها باشد.
در AVR، این بخش را می توان با تنظیم فیوزها پیکر بندی کرد. می توانیم فضای بوت لودر مورد نیاز را بهعنوان نیاز خود تنظیم کنیم یا آن را برای استفاده برای کد برنامه تنظیم کنیم. فلوچارت زیر به شما ایده بهتری در مورد نحوه نوشتن داده های UART در حافظه AVR می دهد.
فلوچارت بالا نشان می دهد که وقتی یک AVR وارد بوتلودر می شود چه اتفاقی می افتد. ابتدا حافظه صفحه را پاک می کند و محتوای صفحه جدید را از UART می گیرد و سپس بافر صفحه را پر می کند. بعد از اینکه نوشته شد، منتظر صفحات بیشتری از UART می ماند. اگر صفحه جدیدی در دسترس باشد، فرآیند یک بار دیگر شروع می شود. در غیر این صورت برنامه وارد قسمت RWW (Read while Write) می شود و عملیات را به پایان می رساند. این یک نسخه بسیار ساده شده از عملیات bootloader است.
کاربردهای Bootloader
- تصاویر سیستم را مدیریت می کند.
- اطلاعات برنامه جدید را به صورت خارجی از طریق برخی وسایل ارتباطی دریافت می کند و آن اطلاعات را در حافظه برنامه پردازنده می نویسد.
- آنها می توانند از طریق پروتکل های مختلفی مانند USART، CAN، I2C، Ethernet، USB ارتباط برقرار کنند و این لیست برای کلیه پروتکل های موجود ادامه دارد.
- بوت لودرهای امبدد دارای اندازه ها و انواع مختلفی هستند.
بوت لودر ها برای امنیت و ساختار نرم افزار یک سیستم بسیار مهم هستند و می توانند استثنائات و وقفهها را به طور متفاوتی مدیریت کنند. نحوه اتصال سخت افزار و نرم افزار تأثیر مستقیمی بر نحوه کار استثنات و وقفه ها و همچنین عملکرد بوت لودر دارد.