چگونه یک کرنل را کامپایل کرده و به لینوکس اضافه کنیم؟
این دستورالعمل متعهد هیچ ضمانتی نیست. چرا که، مثل همیشه سیستمها متفاوتند و اگرچه این مراحل بارها و بارها با موفقیت اجرا شدهاند، اما مسئولیت آن بر عهده استفاده کننده است.
● مراحل:
۱) سایت www.kernel.org را ببینید و یک هسته را به انتخاب خود دانلود کنید (من از tar.bz۲ استفاده میکنم.) و آن را در یک دایرکتوری دلخواه ذخیره نمایید.
من در این مثال home/kernel/ را به کار خواهم برد.
▪ نکته: هر شماره از هستهای خاص با کامپایلر خاصی مطابقت دارد. اگر از یک کامپایلر بهروز استفاده میکنید لطفا توجه کنید که هسته جدیدی هم به کار برید.
۲) حال باید هسته را در دایرکتوری usr/src/ یا هر جای دیگری که دوست دارید هسته را بسازید، کپی نمایید. برای انجام این کار، باید ترمینال خود را باز و سپس اجازه ریشه را دریافت کنید.
آنگاه میتوانید با استفاده از فرمان cp هسته را انتقال دهید:
cp /home/kernel/nameofkernel /usr/src
۳) زمانی که هسته به آن دایرکتوری منتقل شد میتوانید آن را استخراج (extract) کنید. برای استخراج آن، این فرمان را به کار ببرید:
/cd /usr/src
tar -xvjf nameofkernel
در اینجا شما باید فهرستی بسیار طولانی در ترمینال ببینید که نشان میدهد فایلها در حال استخراج هستند. اگر چنین چیزی را نمیبینید، باید برگردید و مراحل قبل را عوض نمایید.
۴) پس از آن میتوانید دایرکتوری خود هسته را وارد نمایید:
cd /usr/src/nameofkerneldirectory
▪ اختیاری: اگر میخواهید میتوانید یک فایل config را هم کپی کنید. (اگر منظور من را نمیفهمید، ادامه دهید.)
۵) بعد، باید از منوی هسته گزینههایی را انتخاب کنید. میتوانید این کار را با وارد کردن منو، با استفاده از فرمان زیر انجام دهید:
make menuconfig
شما باید یک منو کوچک که در صفحه ترمینال باز شده را ببینید. من نمیتوانم بگویم چه انتخابهایی باید انجام دهید چرا که هر کس سختافزار خاصی دارد.
اما به این موارد توجه کنید: انتخاب فایل سیستم مناسب (ext۳, reiser و غیره)، انتخاب صحیح درایور کارت صدا و انتخاب صحیح واسط شبکه. فاکتورهای بیشمار دیگری نیز وجود دارند اما موارد ذکر شده آنهایی هستند که بسیار معمولند.
برای هستههای (کرنل) سری ۲.۶، نیازی نیست که رایتر scsi را بگنجانید مگر اینکه بخواهید از cdrdao (دیسک در حالتی که مثلا برای فایلهای bin/cue لازم است.) استفاده کنید.
همچنین در سری ۲.۶، باید گزینههای زیر را در فایل file systems-pseudo file systems قرار دهیم. وگرنه هسته به درستی boot نمیشود (kernel panic):
proc file system suppor/ [*]
(dev file systemsupport (OBSOLET/ [*]
Automatically mount at boot [*]
Debug devfs [ ]
dev/pts file system for Unix۹۸ PTYs/ [*]
dev/pts Extended Attribute/ [*]
/dev/pts Security Labe/ [*]
(Virtual memory file system support (former shm fs [*]
HugeTLB file system support [ ]
مال شما ممکن است بدون این گزینهها کار کند، اما مال من نه!
همچنین، با ۲.۶، اگر حین استفاده از ترمینال با خطایی مواجه شدید، ممکن است با درج این خط به etc/fstab/ بتوانید آن را رفع نمایید: >
none /dev/pts devpts defaults ۰ ۰
۶) وقتی انتخابهایتان تمام شد، میتوانید کلید esc را بزنید تا از شما بپرسد آیا میخواهید پیکربندی انجام شده را ذخیره کنید. وقتی آن را ذخیره کردید، زمان آن رسیده که واقعا کامپایل کنیم و هسته را بسازیم.
۷ ) برای کامپایل کردن و ساختن هسته فرمانهای زیر را اجرا کنید:
( بعضی مراحل ممکن است فرق داشته و بعضی ممکن است غیر ضروری باشند، ولی من تمام آنها را آوردهام. اگر به تعدادی از آنها نیاز نباشد، خروجی ترمینال تغییری نخواهد کرد.)
تمام اینها به طور جداگانه تست شدهاند تا از نظر صحت تضمین شده باشند.
(همیشه نیاز نیست) make dep
Make
clean
make bzlmage
(برای هستههای جدیدتر معمولا نیاز نیست) make modules
(برای هستههای جدیدتر معمولا نیاز نیست) make modules_install
مرحله بعدی بسیار مهم است: کپی کردن هسته در دایرکتوری boot/ . مهمترین چیزی که در این مورد باید به خاطر داشته باشید این است که نیازی نیست برای اضافه کردن یک هسته به سیستم سایر هستههای در حال کارتان را بازنویسی کنید. پس باید نام دیگری برای هسته جدید انتخاب نمایید. خط زیر نمونهای از کاری است که من انجام دادهام:
cp /usr/src/linux-۲.۶-test۷/arch/i۳۸۶/boot/bzlmage /boot/linux-۲.۶-test۷
یک راه برای اطمینان از اینکه bzlmage را درست تایپ میکنید استفاده از کلید tab برای تکمیل خودکار اسامی دایرکتوریها در قسمت اول فرمان است. اگر به طور خودکار کامل نشد، آنگاه برای اینکه مطمئن شوید که به دایرکتوری درست میروید خودتان دوباره چک کنید.
۸ ) وقتی انجام شد باید خطوطی را به bootloader اضافه کنید تا بتوانید هسته را boot کنید. اگر از lilo استفاده میکنید مطمئن شوید که آن را برای اعمال تغییرات اجرا نمودهاید.
من از grub استفاده میکنم، لذا احتیاجی نیست که آن را اجرا کنم. تغییرات در همان زمان که فایل ذخیره کنم بلافاصله اعمال خواهند شد.
مثالی ببینید از آنچه که به پیکربندی grub خود اضافه کردهام. ( در etc/grub.conf/ boot/grub/menu.lst/ ممکن است یافت شوند.):title Linux Distro Name
(root(hd۰,۲ kernel(hd۰,۲)/boot/linux-۲.۶-test۷ ro root=/dev/hda۳ (فقط یک مثال)
۹ ) کامپیوتر را reboot کنید و سعی کنید که هسته خودتان را boot نمایید.
۱۰) فسمت الف یا ب
الف) اگر کار نکرد، شاید چیزی را در ساختن menuconfig جا انداخته باشید.
از همه خطاهایی که هسته در زمانی که میخواهید آن را boot کنید، میدهد یادداشت بردارید تا بتوانید از دیگران کمک بگیرید و مشکل را رفع کنید.
ب) اگر کار کرد... بسیار عالی است.
این دستورالعمل متعهد هیچ ضمانتی نیست. چرا که، مثل همیشه سیستمها متفاوتند و اگرچه این مراحل بارها و بارها با موفقیت اجرا شدهاند، اما مسئولیت آن بر عهده استفاده کننده است.
● مراحل:
۱) سایت www.kernel.org را ببینید و یک هسته را به انتخاب خود دانلود کنید (من از tar.bz۲ استفاده میکنم.) و آن را در یک دایرکتوری دلخواه ذخیره نمایید.
من در این مثال home/kernel/ را به کار خواهم برد.
▪ نکته: هر شماره از هستهای خاص با کامپایلر خاصی مطابقت دارد. اگر از یک کامپایلر بهروز استفاده میکنید لطفا توجه کنید که هسته جدیدی هم به کار برید.
۲) حال باید هسته را در دایرکتوری usr/src/ یا هر جای دیگری که دوست دارید هسته را بسازید، کپی نمایید. برای انجام این کار، باید ترمینال خود را باز و سپس اجازه ریشه را دریافت کنید.
آنگاه میتوانید با استفاده از فرمان cp هسته را انتقال دهید:
cp /home/kernel/nameofkernel /usr/src
۳) زمانی که هسته به آن دایرکتوری منتقل شد میتوانید آن را استخراج (extract) کنید. برای استخراج آن، این فرمان را به کار ببرید:
/cd /usr/src
tar -xvjf nameofkernel
در اینجا شما باید فهرستی بسیار طولانی در ترمینال ببینید که نشان میدهد فایلها در حال استخراج هستند. اگر چنین چیزی را نمیبینید، باید برگردید و مراحل قبل را عوض نمایید.
۴) پس از آن میتوانید دایرکتوری خود هسته را وارد نمایید:
cd /usr/src/nameofkerneldirectory
▪ اختیاری: اگر میخواهید میتوانید یک فایل config را هم کپی کنید. (اگر منظور من را نمیفهمید، ادامه دهید.)
۵) بعد، باید از منوی هسته گزینههایی را انتخاب کنید. میتوانید این کار را با وارد کردن منو، با استفاده از فرمان زیر انجام دهید:
make menuconfig
شما باید یک منو کوچک که در صفحه ترمینال باز شده را ببینید. من نمیتوانم بگویم چه انتخابهایی باید انجام دهید چرا که هر کس سختافزار خاصی دارد.
اما به این موارد توجه کنید: انتخاب فایل سیستم مناسب (ext۳, reiser و غیره)، انتخاب صحیح درایور کارت صدا و انتخاب صحیح واسط شبکه. فاکتورهای بیشمار دیگری نیز وجود دارند اما موارد ذکر شده آنهایی هستند که بسیار معمولند.
برای هستههای (کرنل) سری ۲.۶، نیازی نیست که رایتر scsi را بگنجانید مگر اینکه بخواهید از cdrdao (دیسک در حالتی که مثلا برای فایلهای bin/cue لازم است.) استفاده کنید.
همچنین در سری ۲.۶، باید گزینههای زیر را در فایل file systems-pseudo file systems قرار دهیم. وگرنه هسته به درستی boot نمیشود (kernel panic):
proc file system suppor/ [*]
(dev file systemsupport (OBSOLET/ [*]
Automatically mount at boot [*]
Debug devfs [ ]
dev/pts file system for Unix۹۸ PTYs/ [*]
dev/pts Extended Attribute/ [*]
/dev/pts Security Labe/ [*]
(Virtual memory file system support (former shm fs [*]
HugeTLB file system support [ ]
مال شما ممکن است بدون این گزینهها کار کند، اما مال من نه!
همچنین، با ۲.۶، اگر حین استفاده از ترمینال با خطایی مواجه شدید، ممکن است با درج این خط به etc/fstab/ بتوانید آن را رفع نمایید: >
none /dev/pts devpts defaults ۰ ۰
۶) وقتی انتخابهایتان تمام شد، میتوانید کلید esc را بزنید تا از شما بپرسد آیا میخواهید پیکربندی انجام شده را ذخیره کنید. وقتی آن را ذخیره کردید، زمان آن رسیده که واقعا کامپایل کنیم و هسته را بسازیم.
۷ ) برای کامپایل کردن و ساختن هسته فرمانهای زیر را اجرا کنید:
( بعضی مراحل ممکن است فرق داشته و بعضی ممکن است غیر ضروری باشند، ولی من تمام آنها را آوردهام. اگر به تعدادی از آنها نیاز نباشد، خروجی ترمینال تغییری نخواهد کرد.)
تمام اینها به طور جداگانه تست شدهاند تا از نظر صحت تضمین شده باشند.
(همیشه نیاز نیست) make dep
Make
clean
make bzlmage
(برای هستههای جدیدتر معمولا نیاز نیست) make modules
(برای هستههای جدیدتر معمولا نیاز نیست) make modules_install
مرحله بعدی بسیار مهم است: کپی کردن هسته در دایرکتوری boot/ . مهمترین چیزی که در این مورد باید به خاطر داشته باشید این است که نیازی نیست برای اضافه کردن یک هسته به سیستم سایر هستههای در حال کارتان را بازنویسی کنید. پس باید نام دیگری برای هسته جدید انتخاب نمایید. خط زیر نمونهای از کاری است که من انجام دادهام:
cp /usr/src/linux-۲.۶-test۷/arch/i۳۸۶/boot/bzlmage /boot/linux-۲.۶-test۷
یک راه برای اطمینان از اینکه bzlmage را درست تایپ میکنید استفاده از کلید tab برای تکمیل خودکار اسامی دایرکتوریها در قسمت اول فرمان است. اگر به طور خودکار کامل نشد، آنگاه برای اینکه مطمئن شوید که به دایرکتوری درست میروید خودتان دوباره چک کنید.
۸ ) وقتی انجام شد باید خطوطی را به bootloader اضافه کنید تا بتوانید هسته را boot کنید. اگر از lilo استفاده میکنید مطمئن شوید که آن را برای اعمال تغییرات اجرا نمودهاید.
من از grub استفاده میکنم، لذا احتیاجی نیست که آن را اجرا کنم. تغییرات در همان زمان که فایل ذخیره کنم بلافاصله اعمال خواهند شد.
مثالی ببینید از آنچه که به پیکربندی grub خود اضافه کردهام. ( در etc/grub.conf/ boot/grub/menu.lst/ ممکن است یافت شوند.):title Linux Distro Name
(root(hd۰,۲ kernel(hd۰,۲)/boot/linux-۲.۶-test۷ ro root=/dev/hda۳ (فقط یک مثال)
۹ ) کامپیوتر را reboot کنید و سعی کنید که هسته خودتان را boot نمایید.
۱۰) فسمت الف یا ب
الف) اگر کار نکرد، شاید چیزی را در ساختن menuconfig جا انداخته باشید.
از همه خطاهایی که هسته در زمانی که میخواهید آن را boot کنید، میدهد یادداشت بردارید تا بتوانید از دیگران کمک بگیرید و مشکل را رفع کنید.
ب) اگر کار کرد... بسیار عالی است.
+ نوشته شده توسط امیرحسین عربی زاده در یکشنبه بیست و هفتم خرداد 1386 و ساعت
22:16 |


