vmlinuz و initrd.img در لینوکس

انتظار میره دوستانی که در جهت افزایش آگاهی دیگران این مطلب رو کپی میکنن نام منبع یعنی این وبسایت رو معرفی کنن.

در این پست میخوایم به دو فایل اصلی کرنل لینوکس بپردازیم.کرنل در واقع سخت افزار رو کنترل میکنه و وظیفه ی مدیریت حافظه (رم) و بقیه سخت افزار هارو داره.کارکرد کرنل و اهمیت اون فراتر از چیزی هست که خیلی ها تصور میکنن.حتی گرفتن ورودی از کیبورد و نمایش اون روی خروجی هم مربوط به کرنل هست.انواع مختلفی از کرنل وجود داره و هر سیستم عاملی کرنل داره.

در واقع چیزی به عنوان سیستم عامل لینوکس به عنوان چیزی که ما میبینیم وجود نداره و لینوکس فقط یک کرنل هست !

و این جاست که چیزی به عنوان گنو/لینوکس مطرح میشه.گنو/لینوکس یک سیستم عامل تشکیل شده از کرنل لینوکس و ابزار های دیگه ای که توسط جامعه گنو نوشته شدن هست و این چیزیه که ما تا حدودی به اشتباه (حتی در اینجا 🙂 ) اون رو سیستم عامل لینوکس می نامیم.

حالا کرنل لینوکس کجاست؟در واقع فایل vmlinuz فایل باینری و اجرایی و کامپایل شده ی کرنل لینوکس به همراه چند چیز دیگه هست که بهش اشاره میکنیم.

vmlinuz کوتاه شده ی این عبارته:

Virtual Memory LINUx gZip

که کرنل فشرده شده ی لینوکس هست.حالا اون چند چیز دیگه ای که گفتم چیا هستن؟ببینید در واقع کرنل لینوکس vmlinux هست.چند فایل اجرایی دیگه هم که در فرایند بوت کردن و انتقال به حالت protected mode نقش دارن هم در vmlinuz در کنار کرنل لینوکس هستن.

حالا همونطور که گفته شد کرنل تنهایی به درد ما نمیخوره و باید ابزار های دیگه ای هم لود کنه.توی این فرایند اول باید یکسری ماژول های ضروری که در خود کرنل نیستن لود بشن و برای این کار نیاز به ابزار و برنامه های کوچیک و اساسی دیگه ای هم هست مثل insmod که برای نصب ماژول های ذکر شده استفاده میشه.و اینجاست که initrd.img وارد کار میشه.

initrd.img در واقع یک روت مجازی لینوکس هست که ابزار و برنامه های اولیه لازم برای تکمیل فرایند بوت در اون هست.

بوت شدن کرنل

بوت کردن کرنل در واقع کار بوتلودر هست.

گنو گراب بوتلودر اصلی بسیاری از توزیع های لینوکسی هست و اگر دقیق نمیدونید که چی هست با یک سرچ ساده اطلاعاتی دربارش کسب کنید.حالا این گنو گراب چند دستور رو در کنسول خودش اجرا میکنه که کرنل رو بوت میکنه.

برای اینکه نگاهی به این دستورات بندازیم، وقتی در هنگام بوت شدن کامپیوتر، گنو گراب لود شد و صفحه انتخاب سیستم عامل اومد، دکمه ی ‘e’ رو میزنیم.

صفحه ای که میبینید در واقع دستوراتی هست که گراب برای بوت کردن سیستم عامل شما استفاده میکنه.البته بعد از این دستورات، دستور ‘boot’ هم هست که قسمت نهایی هست و با توجه به دستورات قبل فرایند بود رو شروع میکنه.

با هم نگاهی به این دستورات میندازیم.

مقدار بعضی از قسمت ها به عنوان مثال مطرح شدند و احتمالا مقادیر شما فرق دارند.

set root=(hd0,1)

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

linux /boot/vmlinuz-3.13.0-29-generic

این دستور کرنل یا همون vmlinuz رو که توضیح دادیم رو لود میکنه.

initrd /boot/initrd.img-3.13.0-29-generic

این دستور هم initrd.img رو لود میکنه.

این سه دستور، دستورات اصلی برای لود کرنل هستن که میتونید اون ها رو در کنسول گنو گراب هم تست کنید تا به صورت دستی کرنل رو لود کنید !

البته بعد از این سه دستور، دستور نهایی ‘boot’ هم اجرا میشه.

بوتلودر initrd.img و کرنل رو در قسمتی از رم لود میکنه و کرنل رو اجرا میکنه.کرنل، با استفاده از محتوای درون initrd.img به لود کردن برخی ماژول ها و درایور های لازم میپردازه.

البته فرایند اجرا شدن خود vmlinuz خودش یک مبحث جداست که در اینجا به دو تصویر از آناتومی اون و فرایند اجرا شدنش اشاره میکنیم.

در تصویر بالا، آناتومی vmlinuz رو میبینیم که ایمیجی شامل کرنل و دو فایل اجرایی هست.

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

درک شیوه ی بوت و اجرا شدن کرنل لینوکس میتونه درک بسیار بهتری از نحوه کار سیستم عامل ها به ما بده.ان شاء الله اگر عمری بود در آینده پستی درباره بوت شدن سیستم عامل ها مینویسم همراه با چند بوت سکتور و … و البته تصویر آخر رو هم به طور کامل توضیح میدم.

امیدوارم براتون مفید بوده باشه.

موفق باشید 🙂

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *