www.LinuxFarsi.com

 

چگونه هسته لینوکس خود را پیکر بندی و کامپایل کنیم؟

به جرات می‌توان گفت که یکی از جالب‌ترین و شگفت انگیزترین بخش‌های سیستم‌عامل لینوکس، هسته آن است. هر کاربر کنجکاوی پس از مدتی کار کردن با این سیستم‌عامل دوست دارد تا با هسته نیز کلنجار رود. اینکه شما بتوانید یکی از اصلی‌ترین بخش‌های سیستم‌عامل خودتان را بنا به میل و نیازتان تنظیم کنید بسیار هیجان انگیز است. تاکنون راهنماهای فارسی متعددی در مورد چگونگی کامپایل کردن هسته لینوکس به فارسی نوشته شده است، ولی چیزی که بسیاری از کاربران کم تجربه‌تر علاوه بر آن نیاز دارند، این است که بدانند قبل از کامپایل، چگونه و با چه قدم‌هایی باید هسته سیستم خود را پیکربندی و تنظیم کنند.

به چه چیزی نیاز دارید؟
برای پیکربندی و کامپایل هسته، چیز زیادی لازم نیست:
۱) کدمنبع کامل هسته
۲) اطلاعات کامل در مورد انواع سخت‌افزارهای نصب شده در سیستم
۳) نرم‌افزارهای توسعه مانند کامپایلر GCC، Make و...
۴) زمان و دقت کافی

دریافت کد منبع هسته
کد منبع کامل هسته سیستم‌عامل لینوکس را همواره می‌توانید از آرشیو آن واقع در آدرس http://www.kernel.org/ دریافت نمایید. نسخه‌های متعددی از هسته برای دانلود موجود می‌باشد. شما همیشه آخرین نسخه پایدار را دریافت نمایید. کد منبع را به دو صورت می‌توانید دریافت کنید. وصله (
patch) و کد منبع کامل (Full). این دو چه تفاوتی باهم دارند؟ کد منبع کامل حدود ۴۰ مگابایت حجم دارد. وصله کد منبع حدود ۲-۳ مگابایت حجم دارد. در صورتی که هیچ کد منبع کاملی از سری مورد نظرتان که آنرا برای نصب روی سیستم در نظر گرفته‌اید ندارید (مانند سری 2.6 که موضوع این مقاله است) باید کد منبع کامل را دریافت نمایید. ولی اگر کد منبع کامل نسخه‌های کمی قبل‌تر (مثلا نسخه پایدار فعلی 2.6.3 است، ولی شما کدهای منبع 2.6.2 را دارید) را دارید و مایلید تا آخرین نسخه را روی سیستم‌تان نصب کنید، لازم نیست تا کل کد‌های منبع را مجددا دریافت و نصب نمایید. در این موارد وصله نسخه مورد نظر را دریافت و بر روی نسخه قدیمی‌تر اعمال می‌کنید. جلوتر این مطلب را بیشتر توضیح خواهم داد.

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

نرم‌افزارهای توسعه
فرقی نمی‌کند که از چه توزیعی استفاده می‌کنید. برای کامپایل کردن هسته، حتما باید ابزارهای
Development موجود در توزیع مورد استفاده تان را نصب نمایید. انتظار نداشته باشید بدون داشتن یک کامپایلر هسته‌تان را کامپایل کنید. علاوه بر ابزارهای توسعه، هسته نیز ممکن است به تعدادی نرم‌افزار پیش‌نیاز، نیاز داشته باشد. مثلا هسته 2.6.3 که در این مقاله آنرا نصب خواهیم کرد، به تعدادی ابزار نیاز دارد که برای عملکرد صحیح حتما باید نسخه‌های صحیح آنها را در سیستم خود داشته باشید. برای اطلاعات بیشتر در مورد شماره نسخه‌های ابزارهای لازم و دریافت آنها اینجا را ببینید. (البته اکثر توزیع‌های جدید بیشتر نسخه‌های پیش‌نیاز را دارا هستند و احتمالا تنها ۱ الی ۲ بسته را باید قبل از کامپایل و نصب هسته نصب نمایید، مگر اینکه توزیع مورد استفاده شما بسیار قدیمی باشد!)

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

شروع عملیات
اکنون فرض می‌کنیم که کلیه موارد بالا انجام شده و برای شروع عملیات تنظیم و کامپایل هسته آماده هستیم. عملیات تنظیم و کامپایل هسته را می‌توان به مراحل زیر تقسیم کرد:
۱) قرار دادن کد منبع هسته در محل مربوطه و خارج کردن آن از حالت فشرده
۲) تنظیم و پیکربندی هسته که مطلب اصلی مورد بحث ما در این مقاله است
۳) نصب هسته
۴) تنظیم برنامه مدیر بوت جهت اضافه شدن امکان بوت با هسته جدید
یک پنجره ترمینال باز کرده و عملیات را شروع می‌کنیم.

قرار دادن کد منبع در محل مربوطه و خارج کردن آن از حالت فشرده
فرض می‌کنیم که اکنون کد منبع کامل هسته موجود بوده و مایل هستید تا آنرا در جای صحیح قرار داده و آنرا از حالت فشرده خارج کرده و ادامه عملیات را بر روی آن انجام دهید. با این احتمال که کد منبع اکنون در دایرکتوری خانگی شما موجود می‌باشد، آنرا به محل مناسب آن که عموما در مسیر
usr/src/ است، منتقل یا کپی می‌کنیم. برای مثال:

$ su
# cp /home/alan/linux-2.6.3.tar.bz2 /usr/src/

ویا اگر آنر روی CD داشتید:

$ su
# mount /cdrom
(or mount /mnt/cdrom)
# cp /cdrom/linux-2.6.3.tar.gz /usr/src/

کد منبع هسته ممکن است در دو حالت فشرده bz2 و یا gzip در اختیار شما قرار گرفته شده باشد که برای خارج کردن آن از حالت فشردگی از دستورات زیر استفاده خواهید کرد:

# cd /usr/src/
# gunzip linux-2.6.3.tar.gz (if file is in tar.gz format)
# bzip2 -d linux-2.6.3.tar.bz2 (if file is in tar.bz2 format)

پس از اجرای دستورات فوق، حاصل کار یک بسته tar خواهد بود که برای بازکردن آن نیز باید از دستور زیر استفاده نمایید:

# tar -xf linux-2.6.3.tar

اکنون در مسیر usr/src/ یک دایرکتوری با نام linux-2.6.3 موجود است. طبق عرف (و نه به اجبار) یک میانبر به نام linux به دایرکتوری linux-2.6.3 ایجاد می‌کنیم:

# ln -s linux-2.6.3 linux

بسیار خوب. تا این مرحله تمامی کارهای اولیه انجام شده و به اتمام رسید. در بالا درمورد وصله‌های هسته صحبت کردم. مثلا اگر شما کد منبع کامل هسته 2.6.2 را دارید و مایل هستید که هسته 2.6.3 را که فعلا آخرین هسته موجود می‌باشد (البته 2.6.4 چند روز دیگر ارائه خواهد شد!) را روی سیستم خود نصب نمایید، لازم نیست تا تمامی کد منبع را مجددا دانلود نمایید. کافی است که وصله (patch) آنرا که معمولا فایلی حدود یا کمتر از ۲ مگابایت است را دریافت کرده و کد منبع هسته موجود را به آن ارتقا دهید. به این صورت که کلیه مراحل گفته شده را برای هسته مثلا نسخه 2.6.2 انجام دهید و سپس وصله را از سایت آرشیو هسته دریافت کنید. با اجرای دستورات زیر، کد منبع هسته شما به نسخه 2.6.3 ارتقا پیدا خواهد کرد:

# cd /usr/src/linux
# bzcat /home/alan/patch-2.6.3.tar.bz2 | patch -p1

با اجرای دستور فوق، فایل‌های مورد نیاز به نسخه جدید ارتقا پیدا خواهند کرد. سپس عملیات زیر را انجام دهید (یک نوع تمیزکاری!):

# rm linux
# mv linux-2.6.2 linux-2.6.3
# ln -s linux-2.6.3 linux

البته می‌توانستید همان موقع میانبر را ایجاد نکرده و پس از انجام عمل ارتقا آنرا ایجاد کنید تا دوباره کاری نشود. اکنون همه چیز برای پیکربندی و تنظیم هسته آماده است.

تنظیم و پیکربندی هسته
پیکربندی هسته را می‌توانید با استفاده از سه رابط کاربری متفاوت انجام دهید. دوتا از این رابط‌ها گرافیکی و بسیار شبیه به هم هستند و رابط سوم متنی است. البته اصول کاری با تمامی این رابط‌ها یکسان است. این رابط‌ها با دستورات زیر اجرا خواهند شد:

# cd /usr/src/linux
# make xconfig (graphical)
# make gconfig (graphical)
# make menuconfig (text based)

شما می‌توانید همه آنها را آزمایش کنید و با هرکدام که راحت‌تر بودید کار کنید. من شخصا اکثرا از گزینه xconfig و در سیستم‌های متنی (مانند سرویس‌دهنده‌ها یا دستگاه‌های راه دور) از menuconfig استفاده می‌کنم. تصاویر زیر این رابط‌ها را نمایش می‌دهد. (برای دیدن تصاویر بزرگتر روی آنها کلیک کنید).


 


 


make gconfig

 

make menuconfig

 

make xconfig

این رابط‌ها همگی دارای لیستی از بخش‌های مختلف هسته هستند که تنظیمات آنرا باید انجام دهید. اکنون بخش‌های اصلی این تنظیمات را که برای یک کامپیوتر معمولی ضروری است، بررسی می‌کنیم. اگر بخواهیم تمامی بخش‌ها را بررسی کنیم، این مقاله تبدیل به یک کتاب می‌شود!

مسئله این است: ماژول یا کد درونی؟
قبل از شروع به تشریح بخش‌های تنظیم هسته، مایل هستم تا نکته‌ای را تشریح کنم. بخش‌های مختلفی را که برای هسته خودتان فعال می‌کنید (مانند انواع راه‌اندازها، تراشه‌های مختلف و...) به دو صورت می‌توانند در هسته بکار گرفته شوند:
۱) درون کد هسته کامپایل شوند
۲) بصورت یک ماژول جدای از هسته ولی قابل بارگذاری در هسته کامپایل شوند
این دو حالت چه مزایا و چه تفاوتی دارند؟ در صورتی که راه‌اندازی درون کد هسته کامپایل شود، اولا نیازی نیست تا در هربار بوت مجددا بارگذاری شود و دسترسی به آن نیز سریعتر خواهد بود. ولی اگر آنرا بصورت یک ماژول جداگانه کامپایل نمایید، باید در هربار بوت بارگذاری شود (البته این بارگذاری خودکار انجام خواهد شد) و دسترسی به آن کمی کندتر از دسترسی به صورت درونی است. مزیت آن چیست؟ اگر شما سخت‌افزاری را پس از کامپایل کردن هسته از کامپیوترتان جدا کنید، کد درونی همچنان فعال بوده و ممکن است سبب شود تا هسته در فشار نبود آن سخت‌افزار کار کند، ولی در حالت ماژول، شما به سادگی قادر خواهید بود تا ماژول را از حالت بارگذاری خارج نمایید.
تصمیم اینکه چه بخشی را بصورت ماژول کامپایل کنید و چه بخشی را بصورت کد درونی، به عهده خودتان می‌گذارم.

شروع می‌کنیم
یکی از رابط‌های مورد نظر خود را با دستوراتی که شرح داده شد، اجرا کنید و مراحل تنظیم هسته را قدم به قدم پیش ببرید. می‌توانید به بخش‌هایی که در این مقاله توضیح داده نشده‌اند توجه نکنید و از آنها عبور کنید. در صورتی که کنجکاو هستید، می‌توانید از
Help این برنامه‌ها استفاده نمایید که بسیاری از مواقع نکات مبهم را روشن می‌کنند.

قدم اول: پردازنده کامپیوتر (Processor)
نخستین تنظیمی که باید انجام دهید، تعیین نوع پردازنده سیستم است. این کار کدهای ایجاد شده را برای پردازنده شما بهینه کرده و در سرعت هسته تاثیر خواهد گذاشت. بنابراین در بخش
Processor type and features پردازنده خود را انتخاب کرده (البته معمولا سیستم بطور خودکار آنرا برای شما انتخاب کرده است) و سپس گزینه Symmetric multi-processing support را غیر فعال نمایید. (البته در صورتی که کامپیوتر شما بیش از یک پردازنده دارد آنرا فعال باقی بگذارید) فعال باقی گذاشتن این گزینه در سیستم‌های تک پردازنده‌ای باعث کاهش سرعت خواهد شد. در صورتی که هسته را برای یک سیستم اداری و میزکار یا سیستم خانگی پیکربندی می‌کنید، گزینه Preemptive Kernel را نیز فعال نمایید که پاسخ‌های سیستم در هنگامی که سیستم زیر بار است سریعتر شود. تنظیمات پردازنده سیستم در این بخش به پایان می‌رسد.

قدم دوم: مدیریت توان (Power Management)
این گزینه‌ها امکان خاموش شدن خودکار سیستم، بکارگیری باطری، سیاست‌های حفاظت انرژی و... را فراهم می‌سازد. در شاخه اصلی، امکان فعال کردن کلی این قابلیت (
Power Management Support) و قابلیت‌های ذخیره در دیسک (Suspend-to-disk) وجود دارد. (برای فعال شدن قابلیت مورد نظرتان بصورت کد درونی کلید Y و برای کامپایل آن بصورت ماژول کلید M را فشار دهید). سپس در بخش ACPI می‌توانید گزینه‌های مورد نظرتان را فعال نمایید. من گزینه اصلی ACPI Support و گزینه Button را برای خاموش شدن خودکار سیستم انتخاب نمایید. در صورتی که هسته یک کامپیوتر کیفی را پیکربندی می‌کنید، علاوه بر این گزینه‌ها، گزینه‌های AC Adapter، Battery و Processor را نیز فعال نمایید. در صورتی که کامپیوتر شما از نوع ASUS یا Toshiba است، گزینه‌هایی نیز برای آن وجود دارد که می‌توانید آنرا نیز فعال کنید. گزینه بعدی APM است که توصیه می‌شود برای کامپیوترهای کیفی آنرا فعال نمایید.

قدم سوم: گذرگاه‌های عمومی (Bus Options)
در این بخش باید گذرگاه‌های
PCI، ISA و PCMCIA را فعال نمایید. به این منظور گزینه‌های PCI Support، PCD device name database، ISA Support ( در صورتی ISA را فعال نمایید که برد اصلی شما دارای آن باشد) برای پشتیبانی از PCMCIA، بخش Support for hot-pluggable devices را فعال نموده در زیر آن بخش‌های مربوط به PCMCIA/CardBus support را فعال نمایید. (PCMCIA تنها برای کامپیوترهای کیفی لازم است).

قدم چهارم: راه‌اندازهای دستگاه‌ها (Device Drivers)
همانطور که از عنوان این بخش پیداست، در این بخش باید راه‌اندازهای ابزارهای مختلف را فعال نمایید. نخستین گزینه‌ای که باید آنرا فعال نمایید، درگاه موازی یا
Parallel port support است. در این قسمت بخش‌های PC-style hardware و IEEE 1284 transfer modes را (برای حالت‌های انتقال داده EPP و ECP) فعال نمایید.
قسمت بعدی که باید آنرا تنظیم نمایید، بخش
Block Devices است که باید در آن گزینه‌های Normal floppy disk support و Loopback device support را فعال نمایید. در صورت نیاز گزینه‌های RAM disk support و Initial RAM disk support را هم می‌توانید انتخاب کنید.
بخش بعدی تنظیمات مربوط به درایوهای مختلف و دیسک‌های سخت می‌باشد. در بخش
ATA/ATAPI/MFM/RLL support گزینه‌های Include IDE/ATA-2 Disk support، Use multi-mode by default، Include IDE/ATAPI CD-ROM، گزینه SCSI emulation support (در صورتی که یک CD-Writer دارید الزامی است) generic/default IDE chipset support و سپس گزینه PCI IDE chipset support را فعال نمایید. در بخش PCI IDE chipset support گزینه‌‌های Sharing PCI IDE interrupts support، Generic PCI bus-master DMA support، Use PCI DMA by default when available و در نهایت نوع تراشه کنترل کننده IDE روی برد اصلی‌تان را تعیین کنید. مثلا من برای برد اصلی خودم که دارای تراشه سری VIA KT133 است، گزینه VIA82CXXX را انتخاب می‌کنم.
قسمت بعدی در این قدم
SCSI device support است که باید در آن گزینه‌های legacy /proc/scsi support، SCSI disk support، SCSI CD-ROM support، SCSI generic support، Probe all LUNs on each SCSI device را فعال نمایید. در صورتی که کارت اسکازی خاصی بر روی سیستم‌تان نصب شده است، راه‌انداز آنرا از بخش SCSI low level drivers فعال نمایید.
در مرحله بعد باید پشتیبانی از شبکه (
Networking Support) و پروتکل‌های مختلف را فعال نمایید. فعال کردن این بخش حتما به این معنی نیست که باید شبکه یا کارت شبکه داشته باشید. بخش‌هایی از آن حتی برای اتصال Dialup