کرنل چیه ؟
کرنل اصلی ترین بخش سیستم عامله و روی تمام قسمت های سخت افزار دسترسی کامل داره. در واقع یک بخشی از سیستم عامله که همیشه روی رم سیستم وجود داره و هر کاری که نرم افزارها با سخت افزار دارن رو کرنل انجام میده.
مهندسی های مختلف کرنل چه جورین؟
معماری Monolothic Architecture
تو این مدل از طراحی کرنل، سیستم عامل کل در یک جا اجرا می شه و تمام سرویس ها و کارهایی که انجام میده رو توی یک کرنل اجرا می کنه. کل کرنل به عنوان یک پروسه بر روی مموری اجرا می شه. این مدل از طراحی کارایی سیستم رو خیلی بالا می بره اما انعطاف زیادی در زمان تغییر ویژگی های کرنل و یا اضافه کردن/حذف کردن اون ها نداره.
مثال :
ویندوز ۱-۲–۳-۹۵-۹۸-ME
تمامی توزیع های لینوکس
اندروید (اندروید یک نسخه خاصی از لینوکسه)
معماری Microkernel Architecture
در اینجا کرنل یک سری ارتباطات پایه ای رو با سخت افزار داره و یک مکانیزم کلی برای ارتباط بین پروسه ای داره (یا خدا!).
تمام بخش های دیگه سیستم عامل خارج از کرنل اجرا می شن. این نوع از طراحی انعطاف بیشتری در زمان تغییر ویژگی های کرنل دارد اما ارتباط های بین پروسه ای زیاد میشه و یکم روی بازده سیستم تاثیر می زاره.
مثال:
Mach
OKL4
Codezero
Fiasco.OC
PikeOS
Hybridkernel Architecture
این مدل از طراحی یه چیزی بین Microkernel و Monolothic هه. هم بازدش بالاست و هم در زمان اعمال تغییرات تو کرنل منعطفه.
مثال:
ویندوز NT، ۲۰۰۰، XP، Vista، ۷، ۸، ۸.۱، ۱۰
آی او اس
مکینتاش
معماری Nanokernel Architecture
تو این مدل کل کد روی رم لود می شه و بعد اجرا می شه. حالا اگه بخای یه برنامه دیگه ران بشه لازمه که کد برنامه قبلیه از روی سیستم آن لود بشه و کد برنامه بعدی لود بشه.
مثال:
کنسول های بازی
دستگاه های ایمبد (embed) شده
مهندسیه کرنل لینوکس به چه شکله؟
یکی از بزرگترین برگ برنده های لینوکس همین معماری Monolothic کرنلشه. باعث شده سرعت خیلی زیادی داشته باشه. همچنین خیلی هم سبک تر روی سیستم کار می کنه. تو کرنل لینوکس بعضی ماژول ها استاتیکن و بعضیا داینامیک.
حالا فرقشون چیه؟
ماژول های استاتیک از قبل با خود کرنل کامپایل می شن و بخشی از خود هسته سیستم عاملن. این ماژولارو نمی شه تغییر بدی و اگه لازم باشه باید از اول کرنلو درست کنی.
ماژول های داینامیک رو می شه به راحتی لود و آن لود کرد و هرجایی که دوست داشتی می تونی به سیستم اضافشون کنی و یا از روی کرنل برشون داری.
قبل از هر کاری نکات زیر رو در نظر داشته باشید:
۱. مراحل و کامندهایی که تو این مقاله اومدن قرار نیست حتما بر روی سیستم شما کار کنند.
۲. با توجه به توزیع و کانفیگ سیستم شما ممکنه نیاز باشه یک پکیج خاصی رو نصب کنید و یا یک فایلی رو ادیت کنید
۳. در زمان برخورد با خطا، اول از همه خطا را بیابید (لینوکس همیشه خیلی شیک میگه مشکلش چیه)، دوم خطا را گوگل کنید. به یاد داشته باشید شما اولین کسی نیستید که با خطا مواجه شده و یه راه حلی براش پیدا کرده. از تجربیات بقیه استفاده کنید و راه حل هاشنون رو بخونید.
برای درست کردن یک نسخه شخصی کرنل باید مراحل زیر روی طی کنید:
۱. اول از همه لازمه ابزارهایی که واسه این کار لازمرو دانلود کنید:
$ yum groupinstall “Development Tools”
$ yum install ncurses-devel
۲. حالا باید تشریف ببرید تو سایت kernel.org و سورس کرنلی که می خاینو دانلود کنید.
۱. لینک رو از روی سایت کپی کنید
۲. با دستور زیر فایل رو بر روی سیستمتون دانلود کنید
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.xz
۳. فایلی که دانلود کردید رو به صورت زیر از حالت فشرده خارج کنید
$ tar -xf linux-5.15.tar.xz
۴. به شکل زیر وارد دایرکتوری بشید
$ cd linux-5.15
۵. از روی سیستمی که روش هستین کانفیگ کرنل فعلی که می دونیم داره درست کار می کنه رو در این دایرکتوری کپی کنید
$ cp /boot/config-$(uname -r) .config
۶. حالا وقتشه که ماژول هایی که می خایمو روی کرنل لود کنیم و اونایی که لازم نداریمو حذف کنیم. حواستون باشه که ممکنه یکی از بخش های حیاتی کرنلو حذف کنید که همه زحماتمون به باد میره. می تونیم خیلی شیک به چیزی دست نزنیم و به کانفیگی که کپی کردیم اکتفا کنیم.
$ make menuconfig
۷. بخش هیجان انگیز ماجرا که میشه کامپایل کردن کرنل و ساخت یک ایمیج فشرده از کرنلمون:
$ make -j 30
۸. حالا ماژول های کرنلو نصب می کنیم
$ make modules_install
۹. کرنل ما آمادست و برای نصبش روی این سیستم می شه از دستور زیر استفاده کنید.
$ make install
۱۰. برای اینکه سیستم این کرنل رو در زمان بوت شدن بشناسه و ازش استفاده کنه باید در بوت منیجر سیستم تغیراتی اعمال کنیم که این زیر نشون دادیم.
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo grubby --set-default /boot/vmlinuz-5.6.9
با استفاده از دستروات زیر می تونید از درست بودن تغییراتی که اعمال کردید اطمینان پیدا کنید.
$ grubby --info=ALL | more
$ grubby --default-index
$ grubby --default-kernel
حالا می تونید سیستمتون رو ریبوت کنید و از توی بایوس سیستم عامل جدیدتون رو انتخاب کنید.