23-11-2007, 01:36 PM
پیشگفتار
برای کاربر جدید گنو/لینوکس و حتی کاربران حرفه ای آن،تصور کامپایل مجدد هسته پیچیده است چه برسد به اینکه جرات کامپایل هسته را بکنند. اگرچه این مسئله می تواند درست باشد ولی شما زمانی را خواهید یافت که کامپایل هسته همانند دیگر کارهای پشتیبانی سیستم ساده خواهد شد.
مقدمه
ما در این مقاله سعی خواهیم کرد مراحل دریافت کد هسته، پیکر بندی، کامپایل و تنظیمات مربوطه را جهت کار با هسته ی جدید، گام به گام بررسی نموده و بر روی توزیع 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 های مورد نیاز را گرفته و استفاده نمایید.
حال حالت اول را پی گیری می کنیم:
اگر شما نسخه متفاوتی می خواهید و یا نمی توانید مسیر را به خاطر آورید از یک مرور گر web/ftp برای پیدا کردن و دانلود آن استفاده کنید. (فرضاً root / مقصد دانلودتان باشد)، گام بعدی استخراج(2) کدها به مقصد نهایی شان می باشد که /usr/src خواهد بود.
این دستور به صورت خودکار یک دایرکتوری می سازد و تمامی فایلهای لازم را به داخل آن استخراج می کند. زمانیکه عمل استخراج پایان پذیرفت دایرکتوری فوق را پس از حصول اطمینان از وجود کدهای جدید در دایرکتوری فوق الذکر باید همه لینک های مرتبط به هسته قبلی را حذف کرد .
با دستورات فوق در واقع لینک قدیمی به هسته قدیمی حذف نموده و لینک جدیدی به هسته جدید می سازیم . هدف اول از ساخت لینک جدید سهولت ارجاع به /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]](http://foss.ir/~ahmadi/Pictures/Kernel/1.jpg)
شکل 1: menu config
"config" هر گزینه را به صورت منفرد ارایه می کند (تک تک حالات ممکن را پرسیده و پاسخ آنها را خواستار است) و همچنین فراموش نکنید که برگشت به عقبی به هیچ یک از سوالهای پرسیده شده وجود نخواهد داشت. اگر متحمل اشتباهی شوید باید تمامی مراحل را از ابتدا شروع کنید.
menuconfig یک منوی مبتنی بر متن را پیش روی ما قرار خواهد داد. در واقع این همان چیزیست که شما اگر بخواهید از خط فرمان ، هسته را پیکر بندی کنید باید با آن مواجه شوید.
xconfig مبتنی بر xwindowsمی باشد و در محیط گرافیکی اجرا می شود.
![[تصویر: 2.jpg]](http://foss.ir/~ahmadi/Pictures/Kernel/2.jpg)
شکل 2: xconfig
همه این روش ها نتایج یکسانی را برای شما حاصل خواهد کرد.
در menu config انتخابها بین "M"، "*" وdeselected سوئیچ خواهند شد.
"M" گزینه مورد نظر را به صورت پیمانه کامپایل می نماید و در xconfig همین عمل بوسیله‘.‘ (dot) در checkbox امکان پذیر می باشد. معمولاً برای درایو های ویژه سعی بر کامپایل به صورت پیمانه می باشد.
‘*’ گزینه انتخابی را به صورت جزیی از هسته کامپایل می نماید و سرعت اجرا در این حالت سریعتر خواهد بود. از آنجائی که تنظیمات مربوط به پیکر بندی هسته از سیستمی به سیستمی دیگر هسته متفاوت است آن را به شما واگذار می کنیم .
قدم سوم ایجاد و نصب
اکنون زمان استراحت است و مراحل مشکل را به انتها رسانده ایم، پیکر بندیها ذخیره شده است و شما می توانید هسته را نهایتا ایجاد نمایید.
قبل از اینکه بتوانیم عمل کامپایل را انجام دهیم، نیاز به تولید اطلاعات وابستگی (dependency information) و همچنین حذف هرگونه فایلهای باقی مانده از کامپایل قبلی هستیم. این دو توسط فرامین make dep , make clean عملی خواهد شد، با فرض اینکه در دایرکتوری /usr/src/linux باشیم .
در هسته های جدید نیازی به make dep نداریم.
کامپایل واقعی توسط این فرمان محقق می شود که پس از چند دقیقه کامپایل کامل خواهد شد و فایل bzImage را در دایرکتوری /usr/src/linux/arch/i386/boot مشاهده می کنید.
قدم چهارم کامپایل پیمانه ها(4)
پس از این فرایند، زمان کامپایل نمودن پیمانه های هسته می باشد. ما پیشنهاد می کنیم که حتی اگر در پیکر بندی هسته هیچ گزینه ای را به صورت پیمانه انتخاب نکرده باشید این فرمان را جا نگذارید:
فرامین فوق سبب می شود که ابتدا پیمانه ها کامپایل شوند و سپس در دایرکتوری /usr/lib/< kernel version > یا /lib/modules/< kernel version >/linux/drivers نصب شوند.
این فرمان هسته جدید را به همراه فایلهای مربوط به دایرکتوری boot/ کپی می کند و همچنین initrd , image جدید را ایجاد می کند و تنظیمات جدید را به فایل پیکربندی bootloader اضافه می کند.
می توانید فرمان ls –l /boot را تایپ کنید تا از ایجاد فایلهایimg و initrd.< kernel version > اطمینان حاصل کنید. نهایتا با مشاهده بخشی با عنوان همان هسته کامپایل شده در فایل /boot/grub/grub.conf یا /boot/grub/menu.lst کار به اتمام می رسد.
اگر از فرمانmake install استفاده نکنیم باید فایل bzImage ساخته شده را به پارتیشن /boot کپی نماییم.
و باید ضمن کپی برداری از فایل config ،bootloader را به صورت دستی پیکربندی کنید.
حال سیستم را reboot نموده و با هسته جدید مشغول به کار شوید.
نتیجه
با مطالب بیان شده در این مقاله، می توانید لینوکسی با هسته سفارشی را تجربه کنید.حس نزدیکی به سیستم عامل تا این حد که بتوانید خود هسته را پیکربندی و کامپایل کنید، مطمئنا جذاب خواهد بود، هر چند که مدت زمان زیادی از وقت را صرف آن نمایید.
از طریق آدرسهای پست الکترونیکی rcemaghsoudy at yahoo.com و mehdi_ziari_83 at yahoo.com پاسخگوی شما خواهیم بود.
نویسندگان: روح الله مقصودی - مهدی زیاری
ویرایش: زهرا احمدی
منبع : FOSS.IR
برای کاربر جدید گنو/لینوکس و حتی کاربران حرفه ای آن،تصور کامپایل مجدد هسته پیچیده است چه برسد به اینکه جرات کامپایل هسته را بکنند. اگرچه این مسئله می تواند درست باشد ولی شما زمانی را خواهید یافت که کامپایل هسته همانند دیگر کارهای پشتیبانی سیستم ساده خواهد شد.
مقدمه
ما در این مقاله سعی خواهیم کرد مراحل دریافت کد هسته، پیکر بندی، کامپایل و تنظیمات مربوطه را جهت کار با هسته ی جدید، گام به گام بررسی نموده و بر روی توزیع 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نکته: اگر شما بخواهید patch هایی را همراه با هسته به کار ببرید،اگر آنها را داشته باشید می توانید به سادگی آنها را به دایرکتوری /usr/src/ با فرمان # cd /usr/src/linux/ && patch -p1 <.. /patch-name از حالت فشرده درآورید(3) . بخاطر داشته باشید که در برخی از مواقع نیاز هست که Patch ها بر اساس ترتیب درستشان از حالت فشرده خارج شوند.
قدم دوم پیکر بندی هسته
چندین راه برای پیکربندی هسته وجود دارد:
config , menuconfig , xconfig , gconfig , oldconfig
![[تصویر: 1.jpg]](http://foss.ir/~ahmadi/Pictures/Kernel/1.jpg)
شکل 1: menu config
"config" هر گزینه را به صورت منفرد ارایه می کند (تک تک حالات ممکن را پرسیده و پاسخ آنها را خواستار است) و همچنین فراموش نکنید که برگشت به عقبی به هیچ یک از سوالهای پرسیده شده وجود نخواهد داشت. اگر متحمل اشتباهی شوید باید تمامی مراحل را از ابتدا شروع کنید.
menuconfig یک منوی مبتنی بر متن را پیش روی ما قرار خواهد داد. در واقع این همان چیزیست که شما اگر بخواهید از خط فرمان ، هسته را پیکر بندی کنید باید با آن مواجه شوید.
xconfig مبتنی بر xwindowsمی باشد و در محیط گرافیکی اجرا می شود.
![[تصویر: 2.jpg]](http://foss.ir/~ahmadi/Pictures/Kernel/2.jpg)
شکل 2: xconfig
همه این روش ها نتایج یکسانی را برای شما حاصل خواهد کرد.
کد:
#cd /usr/src/linux
# make menuconfig
(or ‘make config’ or ‘make xconfig’)"M" گزینه مورد نظر را به صورت پیمانه کامپایل می نماید و در xconfig همین عمل بوسیله‘.‘ (dot) در checkbox امکان پذیر می باشد. معمولاً برای درایو های ویژه سعی بر کامپایل به صورت پیمانه می باشد.
‘*’ گزینه انتخابی را به صورت جزیی از هسته کامپایل می نماید و سرعت اجرا در این حالت سریعتر خواهد بود. از آنجائی که تنظیمات مربوط به پیکر بندی هسته از سیستمی به سیستمی دیگر هسته متفاوت است آن را به شما واگذار می کنیم .
قدم سوم ایجاد و نصب
اکنون زمان استراحت است و مراحل مشکل را به انتها رسانده ایم، پیکر بندیها ذخیره شده است و شما می توانید هسته را نهایتا ایجاد نمایید.
کد:
# make dep
#make cleanدر هسته های جدید نیازی به make dep نداریم.
کد:
# make bzImageقدم چهارم کامپایل پیمانه ها(4)
پس از این فرایند، زمان کامپایل نمودن پیمانه های هسته می باشد. ما پیشنهاد می کنیم که حتی اگر در پیکر بندی هسته هیچ گزینه ای را به صورت پیمانه انتخاب نکرده باشید این فرمان را جا نگذارید:
کد:
# make modules
# make modules_installکد:
# make installمی توانید فرمان 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>حال سیستم را reboot نموده و با هسته جدید مشغول به کار شوید.
نتیجه
با مطالب بیان شده در این مقاله، می توانید لینوکسی با هسته سفارشی را تجربه کنید.حس نزدیکی به سیستم عامل تا این حد که بتوانید خود هسته را پیکربندی و کامپایل کنید، مطمئنا جذاب خواهد بود، هر چند که مدت زمان زیادی از وقت را صرف آن نمایید.
از طریق آدرسهای پست الکترونیکی rcemaghsoudy at yahoo.com و mehdi_ziari_83 at yahoo.com پاسخگوی شما خواهیم بود.
نویسندگان: روح الله مقصودی - مهدی زیاری
ویرایش: زهرا احمدی
1– GNU/linux
2- extract
3 - decompress
4 - modules
2- extract
3 - decompress
4 - modules
منبع : FOSS.IR