چگونه هسته
لینوکس خود را
پیکر بندی و
کامپایل
کنیم؟
به
جرات میتوان
گفت که یکی از
جالبترین و
شگفت انگیزترین
بخشهای سیستمعامل
لینوکس، هسته
آن است. هر
کاربر کنجکاوی
پس از مدتی
کار کردن با این
سیستمعامل
دوست دارد تا
با هسته نیز
کلنجار رود. اینکه
شما بتوانید یکی
از اصلیترین
بخشهای سیستمعامل
خودتان را بنا
به میل و نیازتان
تنظیم کنید بسیار
هیجان انگیز
است. تاکنون
راهنماهای
فارسی متعددی
در مورد چگونگی
کامپایل کردن
هسته لینوکس
به فارسی
نوشته شده
است، ولی چیزی
که بسیاری از
کاربران کم
تجربهتر
علاوه بر آن نیاز
دارند، این
است که بدانند
قبل از کامپایل،
چگونه و با چه
قدمهایی باید
هسته سیستم
خود را پیکربندی
و تنظیم کنند.
به
چه چیزی نیاز
دارید؟
برای پیکربندی
و کامپایل
هسته، چیز زیادی
لازم نیست:
۱)
کدمنبع
کامل هسته
۲)
اطلاعات
کامل در مورد
انواع سختافزارهای
نصب شده در سیستم
۳)
نرمافزارهای
توسعه مانند
کامپایلر 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 استفاده میکنم.
تصاویر زیر این
رابطها را
نمایش میدهد.
(برای دیدن
تصاویر
بزرگتر روی
آنها کلیک کنید).
این
رابطها همگی
دارای لیستی
از بخشهای
مختلف هسته
هستند که تنظیمات
آنرا باید
انجام دهید.
اکنون بخشهای
اصلی این تنظیمات
را که برای یک
کامپیوتر
معمولی ضروری
است، بررسی میکنیم.
اگر بخواهیم
تمامی بخشها
را بررسی کنیم،
این مقاله تبدیل
به یک کتاب میشود!
مسئله
این است:
ماژول یا کد
درونی؟
قبل از شروع
به تشریح بخشهای
تنظیم هسته،
مایل هستم تا
نکتهای را
تشریح کنم.
بخشهای
مختلفی را که
برای هسته
خودتان فعال میکنید
(مانند انواع
راهاندازها،
تراشههای
مختلف و...) به دو
صورت میتوانند
در هسته بکار
گرفته شوند:
۱)
درون
کد هسته کامپایل
شوند
۲)
بصورت
یک ماژول جدای
از هسته ولی
قابل بارگذاری
در هسته کامپایل
شوند
این دو حالت
چه مزایا و چه
تفاوتی
دارند؟ در
صورتی که راهاندازی
درون کد هسته
کامپایل شود،
اولا نیازی نیست
تا در هربار
بوت مجددا
بارگذاری شود
و دسترسی به
آن نیز سریعتر
خواهد بود. ولی
اگر آنرا
بصورت یک
ماژول
جداگانه
کامپایل نمایید،
باید در هربار
بوت بارگذاری
شود (البته این
بارگذاری
خودکار انجام
خواهد شد) و
دسترسی به آن
کمی کندتر از
دسترسی به
صورت درونی است.
مزیت آن چیست؟
اگر شما سختافزاری
را پس از
کامپایل کردن
هسته از کامپیوترتان
جدا کنید، کد
درونی همچنان
فعال بوده و
ممکن است سبب
شود تا هسته در
فشار نبود آن
سختافزار
کار کند، ولی
در حالت
ماژول، شما به
سادگی قادر
خواهید بود تا
ماژول را از
حالت بارگذاری
خارج نمایید.
تصمیم اینکه
چه بخشی را
بصورت ماژول
کامپایل کنید
و چه بخشی را
بصورت کد درونی،
به عهده
خودتان میگذارم.
شروع
میکنیم
یکی از رابطهای
مورد نظر خود
را با دستوراتی
که شرح داده
شد، اجرا کنید
و مراحل تنظیم
هسته را قدم
به قدم پیش
ببرید. میتوانید
به بخشهایی
که در این
مقاله توضیح
داده نشدهاند
توجه نکنید و
از آنها عبور
کنید. در صورتی
که کنجکاو هستید،
میتوانید از 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