روگذریبر ماژولها و کرنلها
توسط: vahit
سلام
همه میدونیم که مهمترین بخش هر سیستمعاملی کرنل اون هست به طوریکه قبل از همهی پروسههای مربوط به سیستمعامل اجرا شده و در حافظه قرار میگیره. کرنل شامل بخشهای مختلفی هست که افزایش اونها باعث بالا رفتن حجم کرنل میشه. کرنل یک تکه با حجم بالا مشکلات زیادی برای سیستم بوجود میآره که ازجملهی آنها میشه به موارد زیر اشاره کرد:
۱. حجم بالای کرنل هنگام بارگذاری اون در حافظهی اندک باعث بروز مشکلهای متعددی میشه.
۲. اگر قسمتی از کرنل به مشکل بر بخوره کل کرنل به مشکل برمیخوره.
۳. اگر لازم باشد قسمتی به/از کرنل اضافه/کم کنیم مجبوریم کرنل رو از سر کامپایل کنیم.
۴. …
به این نوع کرنل، کرنل یکپارچه یا monolithic گفته میشه. برای حل این مشکلات معماری ریز هسته یا microkernel شکل گرفت که فقط شامل درخواستهای سیستمی اولیه و ابتدایی هست که برای همهی سرویسهای سیستمعامل مورد نیازه. بقیهی کارهایی که باید توسط کرنل انجام بشه به شکل ماژول به آن پیوست میشن.
در این حالت اگر یک ویژگی مورد نیاز نباشه به راحتی میشه اون رو از کرنل جدا کرد یا ویژگی جدیدی را با ضمیمه کردن ماژول مربوطه به آن اضافه کرد، بدون نیاز به کامپایل و … .
برای لود کردن یک ماژول بر روی کرنل از دستور insmod استفاده میکنیم که نام و مسیر دقیق ماژول را به صورت آرگومان دریافت میکنه.
1 |
insmod /path/to/module |
برخی ماژولها برای کار به ماژولهای دیگهای وابستن به صورتی که باید قبل از لود ماژول در حافظه لود شده باشند. برای پیدا کردن پیشنیازهای یک ماژول میتونیم از دستور modinfo استفاده کنیم. این دستور اطلاعات مربوط به ماژول مورد نظر را اعم از پیشنیازها و مسیر ماژول را به نمایش میزاره. سر و کله زدن با یک ماژول یک طرف سر و کله زدن با پیشنیازهای یک ماژول یه ذره اونورتر. برای همین دستور moprobe ایجاد شده. کار این دستور اضافه یا کم کردن ماژول از کرنله بدون اینکه نیازی به دونستن پیشنیازها یا مسیر یک ماژول باشه. modprobe این کار رو با استفاده از یک فایل که مسیر و پیشنیازهای مربوط به همهی ماژولها رو داخل خودش داره انجام میده. اسم این فایل modules.dep هست و در مسیر زیر قرار داره:
1 |
/lib/modules/kernel-release |
نکته: یه جای عبارت kernel-release خروجی دستور
1 |
uname -r |
رو وارد کنید.
بعد از هر نصب یا پاک کردن ماژولی نیاز هست که این فایل آپدیت بشه و بهتره که با دستور depmod که مخصوص ایجاد این فایله این کار انجام بشه نه با ویرایش دستی.