کامپایل هسته لینوکس یکی از کارهای ضروری هست که باید برای سیستم خود انجام دهیم. وقتی که سختافزاری به سیستم خود اضافه میکنیم، نیاز به کامپایل خواهیم داشت.
هسته بخش اصلی هر سیستم عاملی است. البته سیستم عاملهای قدیمی فاقد هسته بودند و کاربر به طور مستقیم با سخت افزار ارتباط برقرار میکرد. این شیوه باعث افزایش سرعت میشد ولی معایب بسیاری داشت که از آن جمله میتوان به این مطلب اشاره کرد که اگر کاربر دچار اشتباهی میشد ممکن بود سختافزار دچار مشکل شود.
وظایف هسته
- مدیریت قطعات؛
- مدیریت حافظه؛
- مدیریت پردازنده؛
- ارتباط بین کاربر و سختافزار؛
هسته لینوکس
نام مهمترین بخش سیستم عامل لینوکس «هسته لینوکس» است که از نام آن گرفته شده است.
کامپایل هسته لینوکس
روزگاری ایده بهروزرسانی هسته لینوکس ترس بسیاری از کاربران را برمیانگیخت. در آن زمان، بهروزرسانی هسته شامل مراحل زیادی بود و وقت زیادی را میگرفت. امّا اکنون، نصب هسته جدید با مدیریت بستههایی مانند apt به راحتی قابل کنترل است. با افزودن مخازن خاص، حتی میتوانی هستههای آزمایشی یا خاص (مانند هستههای واقعی برای تولید صدا) را بدون هیچ زحمتی نصب کرد.
در اینجا بهتر است که روند تدوین هسته لینوکس را مرور کنیم
- هشدار: بهتر است این روش را روی یک ماشین مجازی تمرین کنید. تا زمانی که کار با آن را به خوبی یاد بگیرید.
هسته خود را به روز کنید
خواه یک لپتاپ کاملاً جدید داشته باشید که دارای کارت گرافیک فانتزی جدید باشد و یا اینکه به تازگی یک چاپگر جدید تهیه کرده باشید، سیستم عامل(GNU + Linux یا فقط Linux، که همچنین به نام هسته هم اشاره دارد) به یک درایور نیاز دارد تا کانالهای ارتباطی با آن مؤلفه جدید (کارت گرافیک، تراشه، چاپگر یا موارد دیگر) ایجاد شود.
این موضوع میتواند کمی گیج کننده باشد. وقتی دستگاه جدیدی را به سیستم عامل وصل میکنید ممکن است به راحتی رایانه شما آن را تأیید کند. گاهی این روند همان چیزی است که شما نیاز دارید، اما در مواردی دیگر سیستم عامل شما فقط با استفاده از پروتکلهای عمومی برای بررسی دستگاه متصل شده اقدام میکند.
به عنوان مثال، رایانه شما ممکن است بتواند چاپگر شبکه جدید شما را شناسایی کند، اما گاهی اوقات کارت شبکه موجود در چاپگر برای شناسایی خود، در یک شبکه برنامهریزی شده است تا بتواند یک آدرس DHCP بدست آورد. این بدان معنا نیست که رایانه شما از قبل میداند چه دستورالعملی را برای چاپ صفحه متن چاپ شده ارسال کند. در واقع، ممکن است بگویید که رایانه واقعا «نمیداند» دستگاه چاپگر است. در اینجا ممکن است قطعه متصل شده نشان دهد که یک دستگاه در شبکه در یک آدرس خاص وجود دارد و دستگاه خود را با مجموعهای از شخصیتهای p-r-i-n-t-e-r معرفی میکند.
قراردادهای زبان بشر برای کامپیوتر بی معنی است. رایانه مانند اتومبیلی است که نیازمند یک راننده است.
توسعه دهندگان هسته، سازندگان سخت افزار، تکنسینهای پشتیبانی و علاقهمندان همه میدانند که سختافزارهای جدید دائماً در حال توسعه هستند. بسیاری از آنها مستقیماً اطلاعات خود را به تیم توسعه هسته برای درج در لینوکس ارسال میکنند. به عنوان مثال، درایورهای کارت گرافیک NVIDIA اغلب در ماژول هسته Nouveau نوشته میشوند و از آنجا که کارتهای NVIDIA معمول هستند، کد معمولاً در هر هسته توزیع شده برای استفاده عمومی (مانند هستهای که هنگام بارگیری Fedora یا Ubuntu دریافت میکنید) درج میشود. ماژولهای مشابهی برای بسیاری از دستگاه های دیگر وجود دارد: چاپگرها از Foomatic و CUPS بهرهمند میشوند، کارتهای بیسیم دارای b43 ، ath9k، ماژول wl و غیره هستند.
مراحل کامپایل هسته لینوکس
قبل از کامپایل هسته ابتدا باید بدانیم سیستم ما چه سختافزارهایی دارد. معمولاً افراد از سختافزار سیستم خود بیاطلاع هستند ولی ابزارهایی وجود دارد که به کمک آن میتوانیم از سختافزار سیستم خود مطلع شویم. اولین چیزی که باید در مورد آن اطلاعات جمع کنیم اطلاعات حافظه رم است.
برای فهمیدن اطلاعات حافظه رم میتوانید از این دستورات استفاده کنید:
تنظیمات CPU , کامپایل هسته
قطعات PCI: برای به دست آوردن قطعات PCI از دستورات زیر استفاده میکنیم:
اولین کاری که باید انجام شود این است که فایل منبع هسته را بارگیری کنید. این کار را میتوان با پیدا کردن URL هستهای که میخواهید بارگیری کنید (از Kernel.org) انجام دهید. پس از داشتن URL، فایل منبع را با دستور زیر بارگیری کنید (در اینجا با هسته ۴٫۱۷ RC2 نشان می دهیم):
wget https://git.kernel.org/torvalds/t/linux-4.17-rc2.tar.gz
نصب موارد نیاز:
برای کامپایل هسته، ابتدا باید چند مورد را نصب کنیم. این کار را می توان با یک دستور انجام داد:
sudo apt-get install git fakeroot build-basic ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
توجه داشته باشید: برای گذراندن مراحل تدوین هسته به حداقل ۱۲ گیگابایت فضای آزاد درایو محلی خود نیاز دارید. بنابراین اطمینان حاصل کنید که فضای کافی دارید.
استخراج منبع
از داخل دایرکتوری هسته تازه بارگیری شده را با دستورات زیر استخراج کنید. نام فایل linux-x.y.z.tar.xz است، جایی که x.y.z شماره واقعی هسته لینوکس است. به عنوان مثال فایل linux-5.6.9.tar.xz نماینده هسته لینوکس نسخه ۵٫۶٫۹ است. از دستور wget برای بارگیری کد منبع هسته لینوکس استفاده کنید:
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.9.tar.xz
مرحله ۲٫ فایل xz را به دست بیاورید کنید.
واقعاً لازم نیست کد منبع را در / usr / src به دست بیاورید. با استفاده از دستور unzx یا دستور xz میتوانید کد منبع را در پوشه $ HOME یا هر فهرست دیگر خود استخراج کنید:
$ unxz -v linux-5.6.9.tar.xz
یا
$ xz -d -v linux-5.6.9.tar.xz
ابتدا PGP را برای linux-5.6.9.tar بگیرید:
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.9.tar.sign
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.9.tar.sign
خروجی:
gpg: assuming signed data in ‘linux-5.6.9.tar’
gpg: Signature made Sun 12 Aug 2018 04:00:28 PM CDT
gpg: using RSA key 79BE3E4300411886
gpg: Can’t check signature: No public key
برای تأیید امضا، به عنوان مثال شناسه کلید RSA 79BE3E4300411886 (از خروجی های فوق) ، کلید عمومی را از سرور PGP بگیرید.
شما باید گزینههای مختلف را بر اساس نیاز خود انتخاب کنید. هر گزینه پیکربندی دکمه HELP با آن در ارتباط است بنابراین برای دریافت راهنما دکمه راهنما را انتخاب کنید. لطفا توجه داشته باشید که ‘make menuconfig’ اختیاری است. من در اینجا فقط برای نمایش تظاهرات استفاده کردم.
با این گزینه میتوانید ویژگیهای خاص یا درایور هسته را فعال یا غیرفعال کنید. اگر پشتیبانی از درایور دستگاه یا گزینه را حذف کنید در نهایت یک هسته خراب خواهید داشت. به عنوان مثال، اگر درایور ext4 از پرونده پیکربندی هسته حذف شود، ممکن است یک سیستم بوت نشود. در صورت شک، فقط پشتیبانی را در هسته بگذارید.
پیکربندی هسته
قبل از اینکه هسته را کامپایل کنیم، ابتدا باید پیکربندی لازم را انجام دهیم و مشخص کنیم کدام ماژول ها باید بر روی هسته ما نصب شوند. در واقع یک روش آسان برای انجام این کار وجود دارد. با یک دستور میتوانید فایل پیکربندی هسته را کپی کرده و سپس از دستور menuconfig امتحان شده و درست برای ایجاد تغییرات لازم استفاده کنید. برای انجام این کار، دستور را صادر کنید:
$ cd linux-5.6.9
$ cp -v /boot/config-$(uname -r) .config
مرحله ۴٫ کامپایلرهای مورد نیاز و سایر ابزارها را نصب کنید
برای تدوین هسته لینوکس باید ابزارهای توسعه مانند کامپایلرهای GCC و ابزارهای مربوطه را نصب کنید.
$ sudo yum group install “Development Tools”
یا
$ sudo yum groupinstall “Development Tools”
مرحله ۵٫ پیکربندی هسته
اکنون میتوانید با تایپ کردن یکی از دستورات زیر در پوشه کد منبع ، پیکربندی هسته را شروع کنید:
$ make
شما باید گزینه های مختلف را بر اساس نیاز خود انتخاب کنید. هر گزینه پیکربندی دکمه HELP با آن در ارتباط است بنابراین برای دریافت راهنما دکمه راهنما را انتخاب کنید. لطفا توجه داشته باشید که ‘make menuconfig’ اختیاری است. من در اینجا فقط برای نمایش تظاهرات استفاده کردم. با این گزینه میتوانید ویژگیهای خاص یا درایور هسته را فعال یا غیرفعال کنید. به نظر راحت میرسد اگر پشتیبانی درایور دستگاه یا گزینههای مشابه را حذف کنید و در نهایت با یک هسته خراب کار کنید. به عنوان مثال ، اگر درایور ext4 از پرونده پیکربندی هسته حذف شود ، ممکن است یک سیستم بوت نشود. اگر به هر موضوعی شک دارید، فقط پشتیبانی را در هسته بگذارید.
مرحله ۶٫ پیکربندی grub را به روز کنید
شما باید تنظیمات بارگذار Grub 2 را اصلاح کنید. مطابق با توزیع لینوکس، دستور زیر را در یک خط پوسته تایپ کنید:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo grubby –set-default /boot/vmlinuz-5.6.9
جمع بندی
با اضافه شدن یک سختافزار جدید به سیستم، لینوکس شما به کامپایل هسته لینوکس نیاز پیدا خواهبد کرد. شما با طی این مراحل، ساخت هسته لینوکس را از طریق کد منبع به پایان رساندید و هسته کامپایل شده باید روی سیستم شما اجرا شود. سعی کنید همیشه از اطلاعات ضروری نسخه پشتیبان تهیه کنید و برای اطلاعات بیشتر به صفحه kernel.org مراجعه کنید.
سوالات متداول
- هسته لینوکس چیست؟
هسته لینوکس مهم ترین بخش سیستم عامل لینوکس است.
- چگونه میتوانم هسته لینوکس خود را کامپایل کنم؟
با اطلاع از سختافزار سیستم و طی مراحل بالا میتوانیم هسته لینوکس خود را بروز کنیم.
- چه مدت طول می کشد تا هسته لینوکس کامپایل شود؟
این موضوع به تعداد ماژولها و مواردی دیگر بستگی دارد ، اما احتمالاً این فرایند از یک تا پنج ساعت به درازا خواهد کشید. ۱ ساعت برای هسته و شاید ۳-۴ ساعت برای ماژولها زمان لازم است.
آیا میتوان هسته اصلی را کامپایل کرد؟ هسته بدون کامپایلر قابل کامپایل نیست، اما میتواند از یک باینری کامپایل شده نصب شود. اگر بخواهید هسته را خودتان کامپایل کنید، به منبع و کامپایلر و سایر ابزارها نیاز دارید. حتی در توزیعهای “مبتنی بر منبع” مانند Gentoo،از اجرای باینری کامپایل شده شروع میکنند.