PDA

View Full Version : Module vs Source Compile



بمب منطقی
سه شنبه 04 دی 1386, 20:11 عصر
با عرض سلام:

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

ممنون میشم.

tux-world
پنج شنبه 06 دی 1386, 18:00 عصر
خوب ماژول رو میشه به کرنل وارد و خارج کرد
سورس کامپایل هم چیزی مفید خاصی به نظرم نمیرسه میشه واضح تر بپرسید ؟

بمب منطقی
جمعه 07 دی 1386, 11:08 صبح
تصور من از تفاوت ایندو این بود که:
اگه تو حافظه اصلی سیستم غنی باشیم عقلانی تر اینه که سورس ماجولهای پر استفاده و مهم رو به کرنل اضافه کرده و کامپایل کنیم تا بعد از Load لینوکس،با کرنل تو حافظه مقیم بشن و در غیر اینصورت بهتره به کرنل ضمیمه نشن و از بسته های RPM و debian و ... استفاده بشه تا هر وقت هر کدومشون اجرا شد تو حافظه Load بشن.
ولی یکی از مدیران سایت فرمودند که این تصور درست نیست. پس درستش چیه؟

oxygenws
جمعه 07 دی 1386, 14:34 عصر
اصولا سرعت (به قول تو)‌source compile بیشتر از module است، چون همراه کرنل و داخل اونه و اگه می دونی توسعه ای، همیشه لازمه و هیچ وقت ممکن نیست حذف بشه همراه سورس کامپایلش کنی بهتره.

اما ماژول این خاصیت رو داره که همراه کرنل باشه یا نباشه و با یک فرمان میشه اینو تنظیم کرد. مثلا فرض کن پشتیبانی از فایل سیستم مکینتاش ممکنه روی PC هیچ وقت به دردت نخوره و لازم نیست با سورس اصلی کامپایلش کنی، اما ممکنه روزگاری به دردت بخوره و ... پس بهتره ماژول باشه!

پ.ن: شاید مطالب فوق مقداری اشتباه یا ناقص باشه :)

Inprise
جمعه 07 دی 1386, 15:31 عصر
وقتی Device Driver ها و Kernel Module ها رو موقع کامپایل کردن کرنل بصورت Static بسازی اونها همیشه به عنوان بخشی از کرنل فراخوانی میشن . این باعث میشه اندازه کرنل زیادتر و در نتیجه اجرای لینوکس کندتر بشه هر چند که ممکنه رو ماشینهای قدیمی تر باعث سرعت افزایش دسترسی به اون ماژول بشه ولی روی ماشینهای جدید تفاوت خاصی از این جهت نیست . از طرفی این باعث میشه اون ماژول همیشه Base Address ثابتی داشته باشه که میتونه خوب باشه یا بد ، بستگی داره . گاهی لازم هست که یک درایور بصورت Static به کرنل اضافه بشه و نمیشه اونو رو بصورت Module‌ ساخت . مثلا اگر کرنلت رو میخواهی از روی یک رابط IDE بیاری بالا درایورهای مربوطه حتما باید بصورت Static ساخته شده باشن و مثالهائی مثل این . از طرفی بسیاری از درایورهای لینوکس چون توسط افراد خیلی حرفه ای نوشته نمیشن دارای باگهای زیادی هستن ، خصوصا درایورهای سخت افزارهای جدید و Static‌بودنشون باعث Kernel Panic میشه به محض اینکه به باگی برسه ، در حالیکه در صورت کامپایل شدن بصورت Module فقط همون Device از کار میفته و لینوکس متوقف نمیشه ؛ از طرفی Device هائی که بصورت ماژول ساخته میشن رو میشه غیر فعال و دوباره فعال کرد ، اما ماژولهای Static رو نه . بعضیها مایل هستند که کرنلشون رو جوری بسازن که امکان فرخوانی LKM ها در کل نباشه ( Loadable Kernel Module ) مثلا برای مقاصد امنیتی ( عدم امکان اجرای یک روتکیت سطح کرنل توسط نفوذگری که کاربر روت رو اکسپلویت کرده ) در این مواقع باید تمام درایورها رو بصورت Static بسازن . برای Patch کردن درایورها هم اگر درایوری بصورت ماژول باشه _ بسته به شرایط _ میشه rmmod اش کرد که از حافظه خارج شده و بعد از Patch دوباره insmod اش کرد اما برای درایورهائی که بصورت Static ساخته شدن کرنل باید دوباره Patch و دوباره ساخته و نصب بشه . این تفاوتها خودشون باعث ایجاد مزایا و معایب مختلفی میشن و انتخاب یه حالت کاملا بستگی به وضعیت و کاربرد داره . معمولا برای کاربرهای معمولی و حتی حرفه ای که درگیر توسعه کرنل یا سخت افزار یا نرم افزارهای سطح پائین نیستن ، تنظیمات پیش فرض کرنل و ساختن همه ماژولهای اضافی بصورت ماژول خوب و کافی هست .

بمب منطقی
جمعه 07 دی 1386, 22:32 عصر
دستتون درد نکنه،به کل مطلب جواب دادین ولی در عوض یه عالمه سوال دیگه برام ایجاد کردین که کمکم میکنه برم دنبالشون و یاد بگیرمشون.

بازم ممنون