LinuxBoot: استفاده از کرنل لینوکس به‌عنوان یک Firmware

LinuxBoot: استفاده از کرنل لینوکس به‌عنوان یک Firmware

LinuxBoot پروژه‌ای است که در گوگل شروع شد و در ادامهٔ راه هم فیسبوک به آن ملحق شد و در حال حاضر یکی از پروژه‌‌های بنیاد لینوکس به حساب می‌آید (برای آشنایی بیشتر با این بنیاد، به معرفی بنیاد لینوکس مراجعه نمایید). هدف این پروژه افزایش سرعت بالا آمدن سرور‌ها و همچنین رفع مشکلات امنیتی موجود در Firmware‌ فعلی است.

پیاده‌سازی و نوشتن مکرر درایور‌ها برای استفادهٔ Firmware از آن‌ها در مرحله Boot Time مثل دوباره اختراع کردن چرخ، کار خسته‌کننده و ملال‌آوری است. راه‌حل احتمالی این مشکل شاید LinuxBoot باشد اما قبل از اینکه با پروژهٔ LinuxBoot و کاربرد آن آشنا شویم، لازم است کمی در مورد Firmware و Initrd بدانیم.

Firmware چیست؟
به طور خلاصه، Firmware قطعه کد و داده‌هایی است که بر روی یک حافظهٔ فقط خواندنی و دائمی نوشته شده است و به‌عنوان یک نرم‌افزار اصطلاحاً Low Level عمل می‌کند. در یک کلام، Firmware یک وظیفهٔ اصلی دارد و آن هم چیزی نیست جز برقراری ارتباط با سخت‌افزار‌ها برای کنترل کردن دیوایس‌های مد نظر.

بسته به نوع معماری سیستم، نحوه‌ٔ انجام این کار متفاوت است. ما در مورد کامپیوتر‌ها حرف‌ می‌زنیم و BIOS و UEFI دو نوع Firmware در معماری کامپیوتر‌ها هستند. احتمالاً در مورد BIOS بیشتر شنیده‌اید؛ اولین نرم‌افزاری که بعد از فشردن دکمهٔ پاور کامپیوتر اجرا می‌شود. مهمترین وظیفهٔ BIOS شناسایی و تأیید در دسترس بودن سخت‌افزار‌های کانفیگ شده و همچنین لود کردن Boot Loader است (لازم به ذکر است که UEFI جایگزین پیشرفته‌تر BIOS است و تمام کار‌هایی را که BIOS انجام می‌دهد، سریع‌تر و امن‌تر انجام می‌دهد و همچنین فاقد محدودیت‌های BIOS است).

Initrd چیست؟
وقتی بوت‌لودر (مثلاً Grub) کِرنِل لینوکس را لُود کرد، این وظیفهٔ کِرنِل است که فرایند بوت را ادامه و پایان دهد؛ برای این‌ کار، نیاز است تا به یکسری درایور دسترسی داشته تا بتواند با آن‌ها کار کند (مثل Hardware  Raid Controller و کارت شبکه و غیره). اما بسته به اینکه این درایور‌های مهم در کجای فایل‌سیستم قرار دارند، ممکن است کِرنِل توان لُود کردن آن‌ها را نداشته باشد! بنا‌بر‌این، کِرنِل با لُود کردن Initrd، یک Root File System مقدماتی و موقتی بر روی RAM ایجاد می‌کند تا یکسری ماژول (درایور‌هایی که در کِرنِل نیستند) را پیدا و لُود کند. بدین‌ ترتیب، به بقیهٔ سخت‌افزار‌ها‌ی مورد نیاز برای تکمیل فرایند بوت دسترسی پیدا می‌کند.

LinuxBoot چیست؟
LinuxBoot یک Firmware برای سرور‌های امروزی است که یک کِرنِل لینوکس را جایگزین کارکرد‌های مشخصی از UEFI Firmware، مثل مرحلهٔ DXE در فرایند بوت به روش UEFI، می‌کند. باید بدانیم که بوت به روش UEFI سه فاز یا مرحله دارد که عبارتند از SEC ،PEI و DXE که خود بحث مفصلی است؛ اما به طور خلاصه در فاز Driver eXecution Enviroment یا به اختصار DXE که آخرین مرحلهٔ بوت است و در این مقاله هم مهم‌تر به نظر می‌رسد، اتفاقی که می‌افتد این است که سیستم UEFI درایور‌ سخت‌افزار‌های کانفیگ شده را لُود می‌کند و آن‌ها را اجرا می‌کند و پس از اینکه کنترل بوت به کِرنِل رسید، DXEruntime همچنان در حال اجرا باقی می‌ماند تا به هرگونه اصطلاحاً فراخوانی OS to UEFI رسیدگی کند.

چرا باید از LinuxBoot استفاده کنیم؟
LinuxBoot با جایگزین کردن درایور‌های قدرتمند لینوکسی به‌جای درایور‌های Firmware که تست‌های سختی را پشت‌سر نگذاشته‌اند، فرایند بوت را مطمئن‌تر و امن‌تر می‌کند. همچنین با حذف کد‌های غیر‌ضروری، ‌Boot Time را بهبود می‌بخشد (معمولاً سرعت فرایند بوت را ۲۰ برابر سریع‌تر می‌کند). به علاوه، این امکان را به ما می‌دهد تا برحسب نیازهای خاص و ویژهٔ خود (هم دیوایس درایور‌ها و هم فایل‌های اجرایی سفارشی)، در Initrd تغییر ایجاد کنیم.

در پایان هم بایستی به این نکته اشاره کنیم که روشی اثبات شده برای تقریباً ۲۰ سال در ارتش ایالات متحده، لوازم الکترونیکی مصرفی و سیستم‌های ابر‌پردازشی و هر جایی است که اطمینان و عملکرد مهم‌تر از هر چیز دیگری است.