ارسال پاسخ 
 
رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کامپایل هسته لینوکس
۲-۹-۱۳۸۶, ۰۱:۳۶ عصر
ارسال: #1
کامپایل هسته لینوکس
پیشگفتار

برای کاربر جدید گنو/لینوکس و حتی کاربران حرفه ای آن،تصور کامپایل مجدد هسته پیچیده است چه برسد به اینکه جرات کامپایل هسته را بکنند. اگرچه این مسئله می تواند درست باشد ولی شما زمانی را خواهید یافت که کامپایل هسته همانند دیگر کارهای پشتیبانی سیستم ساده خواهد شد.

مقدمه

ما در این مقاله سعی خواهیم کرد مراحل دریافت کد هسته، پیکر بندی، کامپایل و تنظیمات مربوطه را جهت کار با هسته ی جدید، گام به گام بررسی نموده و بر روی توزیع SuSE 9.3 از سیستم عامل گنو/لینوکس(1) اجرا نماییم.

هسته چیست؟

مطمئناً شما پیش از این شنیده اید که هسته قلب هر سیستم عامل nix * ( سیستم عاملهای مبتنی بر unix و minix) است. در گنو/لینوکس تعریف فوق می تواند قدری گمراه کننده باشد. گنو/لینوکس برای همه مقاصد و کاربردها می باشد و در واقع چیزی نیست جز هسته. توزیعی که شما استفاده می کنید، آن چیزی است که باقی سیستم عامل را شکل می دهد، به عبارت ساده تر هسته پایین ترین سطح نرم افزار در سیستم شماست و نقش هدایت کننده را برای همه سیستم عامل بازی می کند.

این هسته است که در مورد اولویت اجرای برنامه ها تصمیم می گیرد و تقریباً برای همه ی نرم افزارها، با سخت افزار در سیستم ارتباط بر قرار می کند.

حال این سوال مطرح می شود که چرا می خواهیم هسته را مجدداً کامپایل نماییم؟ به این دلیل که سیستم عامل گنو/لینوکس بر روی انواع مختلف بسته های سخت افزاری قابل استفاده باشد، هسته ی ‘general’ (عمومی) در زمان نصب هر توزیع از این سیستم عامل برای کامپیوتر شما در نظر گرفته می شود که طبعاً بهینه ترین حالت نمی باشد. بی شک مهم ترین دلیل کامپایل مجدد بهینه شدن هسته در قبال نیازهای شما خواهد بود، و شما در واقع سیستم عامل سفارشی برای خود ساخته اید.

قدم اول در اختیار داشتن کد برنامه هسته

برای کامپایل کردن هسته سیستم عامل در اختیار داشتن کد برنامه هسته می باشد که می توان آن را از دیسک نصب توزیع مربوطه، منوط به اینکه هنگام نصب بسته نرم افزار ‘kernel sources‘را انتخاب کرده باشیم و یا پس از نصب از طریق install and remove program در اختیار داشته باشیم، اگر از این حالت استفاده نماییم، مسیر ما /usr/src/linux خواهد بود که به کمک فرمان ls –l /usr/src/linux می توان از وجود آنها اطمینان حاصل کرد.

اگر می خواهید به مجموعه کاملی از نسخه های مختلف هسته دسترسی داشته باشید ما وب سایت http://www.kernel.org را به شما پیشنهاد می کنیم.

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

حال حالت اول را پی گیری می کنیم:
کد:
#cd

# fetch http://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.5.tar.gz


اگر شما نسخه متفاوتی می خواهید و یا نمی توانید مسیر را به خاطر آورید از یک مرور گر web/ftp برای پیدا کردن و دانلود آن استفاده کنید. (فرضاً root / مقصد دانلودتان باشد)، گام بعدی استخراج(2) کدها به مقصد نهایی شان می باشد که /usr/src خواهد بود.
کد:
# cd /usr/src

# tar -xzvf /root / linux-2.6.14.5.tar.gz
این دستور به صورت خودکار یک دایرکتوری می سازد و تمامی فایلهای لازم را به داخل آن استخراج می کند. زمانیکه عمل استخراج پایان پذیرفت دایرکتوری فوق را پس از حصول اطمینان از وجود کدهای جدید در دایرکتوری فوق الذکر باید همه لینک های مرتبط به هسته قبلی را حذف کرد .
کد:
# ls -l

total 1036

linux –> linux -2.6.11.4-20a

linux-2.6.11.4-20a

linux- 2.6.14.5



# rm –f linux

# ln -s linux -2.6-14.5 /linux
با دستورات فوق در واقع لینک قدیمی به هسته قدیمی حذف نموده و لینک جدیدی به هسته جدید می سازیم . هدف اول از ساخت لینک جدید سهولت ارجاع به /usr/src/linux به جای /usr/src/linux-2.6.14.5 می باشد و هدف دوم زمانی مد نظر خواهد بود که چندین نسخه مختلف از کد برنامه هسته در دایرکتوری /usr/src/ وجود داشته باشد و ما باید هسته مورد نظر خود را برای کامپایل مشخص نماییم.

نکته: اگر شما بخواهید patch هایی را همراه با هسته به کار ببرید،اگر آنها را داشته باشید می توانید به سادگی آنها را به دایرکتوری /usr/src/ با فرمان # cd /usr/src/linux/ && patch -p1 <.. /patch-name از حالت فشرده درآورید(3) . بخاطر داشته باشید که در برخی از مواقع نیاز هست که Patch ها بر اساس ترتیب درستشان از حالت فشرده خارج شوند.

قدم دوم پیکر بندی هسته

چندین راه برای پیکربندی هسته وجود دارد:

config , menuconfig , xconfig , gconfig , oldconfig


[تصویر: 1.jpg]
شکل 1: menu config

"config" هر گزینه را به صورت منفرد ارایه می کند (تک تک حالات ممکن را پرسیده و پاسخ آنها را خواستار است) و همچنین فراموش نکنید که برگشت به عقبی به هیچ یک از سوالهای پرسیده شده وجود نخواهد داشت. اگر متحمل اشتباهی شوید باید تمامی مراحل را از ابتدا شروع کنید.

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

xconfig مبتنی بر xwindowsمی باشد و در محیط گرافیکی اجرا می شود.


[تصویر: 2.jpg]
شکل 2: xconfig

همه این روش ها نتایج یکسانی را برای شما حاصل خواهد کرد.
کد:
#cd /usr/src/linux

# make menuconfig

(or ‘make config’ or ‘make xconfig’)
در menu config انتخابها بین "M"، "*" وdeselected سوئیچ خواهند شد.

"M" گزینه مورد نظر را به صورت پیمانه کامپایل می نماید و در xconfig همین عمل بوسیله‘.‘ (dot) در checkbox امکان پذیر می باشد. معمولاً برای درایو های ویژه سعی بر کامپایل به صورت پیمانه می باشد.

‘*’ گزینه انتخابی را به صورت جزیی از هسته کامپایل می نماید و سرعت اجرا در این حالت سریعتر خواهد بود. از آنجائی که تنظیمات مربوط به پیکر بندی هسته از سیستمی به سیستمی دیگر هسته متفاوت است آن را به شما واگذار می کنیم .

قدم سوم ایجاد و نصب

اکنون زمان استراحت است و مراحل مشکل را به انتها رسانده ایم، پیکر بندیها ذخیره شده است و شما می توانید هسته را نهایتا ایجاد نمایید.
کد:
# make dep

#make clean
قبل از اینکه بتوانیم عمل کامپایل را انجام دهیم، نیاز به تولید اطلاعات وابستگی (dependency information) و همچنین حذف هرگونه فایلهای باقی مانده از کامپایل قبلی هستیم. این دو توسط فرامین make dep , make clean عملی خواهد شد، با فرض اینکه در دایرکتوری /usr/src/linux باشیم .

در هسته های جدید نیازی به make dep نداریم.
کد:
# make bzImage
کامپایل واقعی توسط این فرمان محقق می شود که پس از چند دقیقه کامپایل کامل خواهد شد و فایل bzImage را در دایرکتوری /usr/src/linux/arch/i386/boot مشاهده می کنید.



قدم چهارم کامپایل پیمانه ها(4)

پس از این فرایند، زمان کامپایل نمودن پیمانه های هسته می باشد. ما پیشنهاد می کنیم که حتی اگر در پیکر بندی هسته هیچ گزینه ای را به صورت پیمانه انتخاب نکرده باشید این فرمان را جا نگذارید:
کد:
# make modules

# make modules_install
فرامین فوق سبب می شود که ابتدا پیمانه ها کامپایل شوند و سپس در دایرکتوری /usr/lib/< kernel version > یا /lib/modules/< kernel version >/linux/drivers نصب شوند.
کد:
# make install
این فرمان هسته جدید را به همراه فایلهای مربوط به دایرکتوری boot/ کپی می کند و همچنین initrd , image جدید را ایجاد می کند و تنظیمات جدید را به فایل پیکربندی bootloader اضافه می کند.

می توانید فرمان ls –l /boot را تایپ کنید تا از ایجاد فایلهایimg و initrd.< kernel version > اطمینان حاصل کنید. نهایتا با مشاهده بخشی با عنوان همان هسته کامپایل شده در فایل /boot/grub/grub.conf یا /boot/grub/menu.lst کار به اتمام می رسد.

اگر از فرمانmake install استفاده نکنیم باید فایل bzImage ساخته شده را به پارتیشن /boot کپی نماییم.
کد:
# cp arch/i386/boot/bzImage /boot/<kernel version>

# cp system.map /boot/system.map-<kernel version>
و باید ضمن کپی برداری از فایل config ،bootloader را به صورت دستی پیکربندی کنید.

حال سیستم را reboot نموده و با هسته جدید مشغول به کار شوید.



نتیجه

با مطالب بیان شده در این مقاله، می توانید لینوکسی با هسته سفارشی را تجربه کنید.حس نزدیکی به سیستم عامل تا این حد که بتوانید خود هسته را پیکربندی و کامپایل کنید، مطمئنا جذاب خواهد بود، هر چند که مدت زمان زیادی از وقت را صرف آن نمایید.

از طریق آدرسهای پست الکترونیکی rcemaghsoudy at yahoo.com و mehdi_ziari_83 at yahoo.com پاسخگوی شما خواهیم بود.



نویسندگان: روح الله مقصودی - مهدی زیاری

ویرایش: زهرا احمدی


1– GNU/linux

2- extract

3 - decompress

4 - modules

منبع : FOSS.IR
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
۲۰-۳-۱۳۸۷, ۰۵:۴۳ صبح (آخرین تغییر در این ارسال: ۲۰-۳-۱۳۸۷ ۰۷:۲۶ صبح توسط sorset.)
ارسال: #2
RE: کامپایل هسته لینوکس
سلام
در یک سایتی دو تا آموزش دیدم که واقعاْ برای خودم مفید بود. برای همین برای شما هم لینکش رو میذارم.
آموزش پچ کردن کرنل
آموزش کانفیگ کردن کرنل جدید
البته برای کانفیگ کردن فقط دو تا مثال داره. یکی برای Processor type and features و یکی هم Filesystems در حالی که برای ۳۷ مورد باید کانفیگ کنید! (که بهتره در مورد انواع سخت افزار ها اطلاعات کافی داشته باشید گر چه برای هر مورد راهنماش در خود برنامه هست.)

اصلاْ کلاْ سایت جالبیه
حتماْ یک سری بهش بزنید.
http://www.linuxheadquarters.com

در این سایت هم یک آموزش برای کامپایل کرنل هست.
http://ubuntuforums.org/showthread.php?t=157560
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
۲۵-۷-۱۳۸۷, ۱۰:۵۰ صبح
ارسال: #3
RE: کامپایل هسته لینوکس
سلام
من این آموزش رو در سایت اوبنتو فارسی دیدم که توسط کسری کشاورز نوشته شده بود.
خیلی خوب توضیح داده بود. گفتم بد نیست یک کپی از اونو اینجا هم داشته باشیم تا افراد بیشتری ببینن.

در ۶ قدم شما یک کرنل جدید خواهید داشت.اما کمی وقت‌گیر هستش...پس زیاد نگران نباشید...

قدم اول: کار‌های اولیه...
اولین کار این هست که شما بعضی از پکیج‌های مورد نظرتون رو دانلود کنید.با دستورات زیر می‌تونید این کار رو انجام بدید:
کد:
sudo apt-get update
sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2
بسته‌های bzip2 و wget به طور پیشفرض در اوبونتو نصب هستن...

قدم دوم: دانلود کرنل
برای آپدیت کرنل می‌تونید از کرنل خود اوبونتو استفاده کنید یا نه کرنل اصلی رو دانلود کنید.اما کرنل اوبونتو کمی قدیمی هستش.برای دانلود کرنل اصلی باید از http://www.kernel.org کمک بگیرید.اما می‌تونید از دستور زیر کرنل خودتون رو دانلود کنید:
کد:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-x.y.z.tar.bz2
ما در این دستور خواستیم که یکی از کرنل‌های رده‌ی ۲.۶ رو دانلود کنیم...(x , y , z اعدادی هستن که به ورژن کرنل مربوط میشن)
سپس با دستور زیر از حالت فشرده درش میاریم و وارد فولد مربوطه میشیم:
کد:
sudo tar -xjvf linux-x.y.z.tar.bz2
cd /usr/src/linux-x.y.z

قدم سوم: کانفیگ کرنل
این قسمت به نظر سخت‌ترین قسمت برای کسانی هست که برای اولین بار هست که می‌خوان کرنل خودشون رو کامپایل کنن.اما یه راه‌حل ساده‌تری هم هستش.شما می‌تونید از کانفیگی که الان برای کرنل فعلی‌تون هست برای کرنل جدید که می‌خوان کامپایل کنید استفاده کنید با دستور زیر می تونید کانفیگ کرنل فعلیتون برای کرنل جدیدتون استفاده کنید:
کد:
sudo cp /boot/config-$(uname -r) ./.config
اگر خواستین دوباره تغییراتی بیدین می‌تونین با دستور زیر تغییرات لازمه رو اعمال کنید و بعد خارج بشید:
اگر در حالت Text-Based هستین از دستور زیر استفاده کنید:
کد:
sudo make menuconfig
بعد از این دستور شما وارد محیطی مثل محیط زیر خواهید شد:
برای این که کانفیگ خودتون رو اجرا کنید مانند شکل بالا به Load an Alternate Configuration File بردی و config. رو انتخاب کنید.

اگر در میزکار Gnome قرار دارین می‌تونین از دستور زیر استفاده کنین:
کد:
sudo make gconfig

اگر در میزکار KDE ( Brick Wall)هستین می‌تونین از دستور:
کد:
sudo make xconfig
استفاده کنین.

قدم چهارم: کامپایل و نصب کرنل
این قسمت حساس‌ترین بخش هستش.پس دقت کنید.با استفاده از دستور زیر می‌تونید کرنل جدیدتون رو پیکر‌بندی بکنید:
کد:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
بعد از عبارت:
کد:
--append-to-version=-
می‌تونید به جای کلمه‌ی custom اسم مورد علاقه‌ی خودتون رو قرار بدین.مثلا می‌تونید اسم توزیع جدیدی رو کی می‌خواین بزارین قرار بدین یا نه اسم خودتون باشه.اما به یاد داشته باشید "-" حتما باید باشه.
اگر دستور بالا رو اجرا کنید کرنل شروع به کامپایل شدن می‌کنه.این بخش زمان زیادی می‌خواد و کمی حوصله.پس بزارید کارش رو انجام بده و بعد از این که کارش رو انجام داد فولدر linux-x.y.z حجم بالایی رو اشغال می‌کنه.بعد از این که کارش تموم شد می‌تونید فولدر کرنلتون رو پاک کنید از همون مسیر:
کد:
/usr/src
پس از اتمام کار تو فایل deb. به شما میده.تنها کار شما این هست که این دو تا فایل رو نصب کنید.این دو تا فایل در مسیر:
کد:
/usr/src
به وجود میان.
پس این دو تا فایل رو می‌تونید با دستورات زیر نصب کنید.
کد:
sudo dpkg -i *.deb
این دو تا فایل در حقیقت کرنل کامپایل شده‌ی شما هستن.یعنی شما می‌تونید با استفاده از این ۲ تا فایل کرنل جدیدتون رو نصب کنید بدون نیاز به کامپایل دوباره.حتی می‌تونید بر روی سیستم‌های اوبونتویی دیگه هم استفاده کنید.پس بهتر هست ازش یه پشتیبان تهیه کنید.
منتظر بشید تا عملیات نصب به پایان برسه.سپس شما کرنل جدید نصب شده رو دارید ، در ضمن خودش تنظیمات گراب رو انجام میده پس بهتره که نگران نباشید.

قدم پنجم: اطمینان بیشتر
برای اطمینان بیشتر از این که تنظیمات گراب صورت گرفته یا نه می‌تونید با دستور زیر:
کد:
sudo nano /boot/grub/menu.lst
بینید که خطوطی مانند زیر وجود دارد یا خیر:
کد:
title Ubuntu, kernel 2.6.18.1-custom
root (hd0,0)
kernel /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.18.1-custom
savedefault
boot

title Ubuntu, kernel 2.6.18.1-custom (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro single
initrd /boot/initrd.img-2.6.18.1-custom
boot
به احتمال خیلی زیاد تنظیمات گراب صورت می‌گیرد.مگر در موارد استثنایی!!!

قدم ششم: ورود به اوبونتویی جدید
خب بهتون تبریک می‌گم می‌تونید با دستور زیر ریبوت کنید:
کد:
sudo shutdown -r now

وارد اوبونتویی با کرنل جدید بشید.برای اطمینان بیشتر می‌تونید با دستور زیر ورژن کرنل خودتون رو ببینید:
کد:
uname -r

منابع:
http://www.howtoforge.com/kernel_compilation_ubuntu
http://www.howtoforge.com/kernel_compilation_ubuntu_p2
http://forum.ubuntu.ir
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در پاسخ
ارسال پاسخ 


موضوعات مشابه ...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
Bell چطوری باید در لینوکس به اینترنت وصل بشم bahram32 2 833 ۱۰-۵-۱۳۸۸ ۰۱:۱۴ صبح
آخرین ارسال: bahram32
  ۱۰۱ دلیل بر اینکه لینوکس از ویندوز بهتر است! sorset 10 2,313 ۱۲-۳-۱۳۸۸ ۰۳:۰۴ صبح
آخرین ارسال: h4d1
  آموزش لینوکس Red Hat pooya1 0 907 ۲۲-۱۲-۱۳۸۷ ۰۴:۳۳ عصر
آخرین ارسال: pooya1
  نصب نرم افزار در لینوکس inspector 3 3,205 ۱۰-۱۲-۱۳۸۶ ۱۱:۱۲ صبح
آخرین ارسال: sorset
  راه اندازی لینوکس با استفاده از Flash به جای CD-Rom sorset 0 1,495 ۱۹-۱۱-۱۳۸۶ ۱۰:۴۲ صبح
آخرین ارسال: sorset
  مونت ntfs در لینوکس hogat_sh 15 2,419 ۲۳-۸-۱۳۸۶ ۰۸:۰۳ عصر
آخرین ارسال: sorset
  چرا لینوکس را انتخاب کنیم؟ sorset 0 816 ۲۲-۸-۱۳۸۶ ۰۴:۳۸ عصر
آخرین ارسال: sorset
  مونت درایوهای لینوکس در ویندوز sorset 0 745 ۱۶-۸-۱۳۸۶ ۱۱:۲۸ عصر
آخرین ارسال: sorset
  اینترنت در لینوکس mohammad 13 2,178 ۱۶-۸-۱۳۸۶ ۰۹:۲۳ صبح
آخرین ارسال: sorset
  نصب مودم ADSL با رابط USB در لینوکس sorset 0 3,585 ۸-۸-۱۳۸۶ ۰۹:۴۸ عصر
آخرین ارسال: sorset

پرش در انجمن:


 Quick Theme:




ارتباط با ما | Code Corona | بازگشت به بالا | بازگشت به محتوا | آرشیو | پیوند RSS
ترجمه MyBB فارسی - فارسی ساز نسخه ۱.۳
قدرت گرفته از MyBB, © 2002-1389 MyBB Group.

Theme "Aadamentium" created by: MyBB Themes | Tutoriale


server monitor