آشنایی با دستورات لینوکس بخش پنجم

  • مدرس: علی بیگدلی
  • تاریخ انتشار: Aug 25, 2020

در بخش پنجم از سری آموزش دستورات لینوکس Raspbian این سیستم عامل محبوب linux به بررسی ساختار کرنل ، آپدیت ، پتچ کردن و همچنین ایجاد تغییرات در آن به طور کلی می پرازیم و بخش های مربوط به زیر ساخت این سیستم عامل را به انتهای خود نزدیک می کنیم.

Updating the kernel

اگر از فرآیند به روز رسانی / ارتقاء استاندارد Raspbian استفاده می کنید ، به طور خودکار هسته را به آخرین نسخه پایدار ارتقا می دهد.با این حال، در شرایط خاص، شما ممکن است بخواهید به آخرین نسخه به اصطلاح"bleeding edge" یا تست هسته به روز رسانی کنید.

به روز رسانی دستی با استفاده از rpi-update

نرم افزار به روز رسانی rpi آخرین نسخه (نسخه ناپایدار تست) نسخه کرنل را دانلود و تمام فایل های مورد نیاز را بر روی سیستم شما کپی می کند. توجه داشته باشید که آخرین کرنل از rpi-update به درستی کار نمی کند! اطمینان حاصل کنید که با jتوزیع مناسب سیستم عامل مناسب شما همخوانی داشته باشد. راه حلی برای حذف خودکار نصب به شما ارائه نخواهد داد پس مراقب باشید. پس از ارتقاء هسته، شما باید Pi را مجددا راه اندازی کنید تا به نسخه به روز شده تغییر یابد. اگر شما از یک هسته کامپایل استفاده می کنید، rpi-update آن را مجددا کپی کرده و نیاز به بازسازی و نصب مجدد هسته خود دارید. معمولا تنظیمات سفارشی می تواند بین دو نسخه به روز رسانی جزئی کپی شود، اما استفاده از ابزار diff برای مشاهده تغییرات و تکرار تغییرات شما در پیکربندی جدید ایمن تر است.

بازگشت به هسته راديو

هسته پایه Raspberry Pi بخشی از بسته kernel raspberrypi است و فایلهای bootloader بخشی از بسته raspberrypi-bootloader هستند. برای بازگرداندن هسته راديوئی فعلی پس از تلاش Rpi-update یا یک هسته سفارشی، شما باید این دو بسته را با نصب مجدد نصب کنید:

sudo apt-get install --reinstall raspberrypi-bootloader raspberrypi-kernel
Kernel Headers

اگر شما به دنبال کامپایل یک ماژول کرنل و یا مشابه آن هستید، به header های کرنل نیاز خواهید داشت. این ها تعاریف مختلف وظیفه و ساختاری که در هنگام کامپایل کد را که با هسته در ارتباط است نیازمند است. اگر كل هسته را از github كلون كرديد، هدرها قبلا در درخت منبع گنجانده شده اند. اگر شما به تمام فایل های اضافی نیاز ندارید، فقط می توانید هدر های هسته را از repo Raspbian نصب کنید.

sudo apt-get install raspberrypi-kernel-headers

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

Configuring the kernel

هسته لینوکس بسیار قابل تنظیم است؛ کاربران پیشرفته ممکن است بخواهند پیکربندی پیش فرض را تغییر دهند تا آن را به دلخواه خود تغییر دهند، مانند فعال کردن یک پروتکل شبکه جدید یا آزمایشی، یا امکان پشتیبانی از سخت افزار جدید. پیکربندی معمولا از طریق interface menuconfig انجام می شود. به طور خلاصه، شما می توانید فایل .config خود را به صورت دستی تغییر دهید، اما این می تواند برای کاربران تاره کار مشکل تر باشد.

آماده سازی پیکربندی هسته

ابزار menuconfig نیازمند هدرهای توسعه ncurses به درستی کامپایل می شود.می تواند با دستور زیر نصب شود:

sudo apt-get install libncurses5-dev

شما همچنین باید منابع هسته خود را دانلود کنید و آماده کنید، همانطور که در راهنمای ساخت شرح داده شده است. به طور خاص اطمینان حاصل کنید که تنظیمات پیش فرض را نصب کرده اید. برای همه مدلهای Raspberry Pi 1 (شامل محاسبه ماژول و Pi Zero):

$ KERNEL=kernel
$ make bcmrpi_defconfig

اگر شما متقابل کامپایل می کنید، خط دوم باید باشد:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig

برای تمام مدل های رزبری پایPi 2/3:

$ KERNEL=kernel7
$ make bcm2709_defconfig

اگر شما cross-compile می کنید، خط دوم باید باشد:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
استفاده از menuconfig

هنگامی که همه چیز را تنظیم کنید و آماده باشید، می توانید ابزار menuconfig را به صورت زیر جمع آوری و اجرا کنید:

$ make menuconfig

اگر cros-compile می کنید:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

ابزار menuconfig دارای صفحه کلید ساده است. پس از یک تدوین کوتاه،به شما لیستی از زیر منوهای حاوی تمام گزینه هایی که می توانید پیکربندی کنید ارائه می شود. مقدار زیادی وجود دارد، بنابراین صرف زمان را در این قسمت مد نظر داشته باشید. از کلید های arrow برای حرکت استفاده کنید، کلید Enter برای وارد کردن یک زیر منو (نشان داده شده توسط -->)، دوبار Escape را بزنید تا به سطوح بالاتر بروید و یا با استفاده از SPACE حالت و وضعیت یک آپشن را تغییر دهید. همچنین می توانید با فشردن کلید h در هر قسمت از راهنما بهره مند شوید. مقاومت در برابر وسوسه برای فعال یا غیر فعال کردن بسیاری از چیزها در اولین تلاش خود؛ پیکربندی شما را نسبتا آسان می کند، بنابراین از قسمت های کوچک تر شروع کنید و در انتها به خواسته خود برسید.

خروج، ذخیره و بارگذاری پیکربندی

پس از انجام تغییراتی که می خواهید انجام دهید، ESCAPE را فشار دهید تا از شما خواسته شود پیکربندی جدید خود را ذخیره کنید. به صورت پیش فرض این فایل در .config ذخیره می شود. با کپی کردن این فایل در اطراف میتوانید تنظیمات را ذخیره و بارگذاری کنید.

Patching the kernel

هنگام ساختن هسته سفارشی شما ممکن است بخواهید تکه ها یا مجموعه ای از تکه ها ("patchsets") را به هسته لینوکس اعمال کنید. Patchsets اغلب با سخت افزار جدیدتر به عنوان یک ابزار موقت ارائه می شوند، قبل از اینکه patchsets ها به هسته لینوکس بالادست (mainline) اعمال شوند و سپس به منابع هسته Raspberry Pi اعمال شوند. با این حال، patchsets برای اهداف دیگر وجود دارد، به عنوان مثال برای فعال کردن یک هسته کاملا pre-emptible و برای استفاده در زمان واقعی است.

شناسایی نسخه

مهم است که چه نسخه ای از هسته شما را هنگام دانلود و استفاده از patchsets ها بررسی می کنید. در دایرکتوری منبع هسته، فرمان زیر به شما نسخه ای را می دهد که منابع مربوط به آن هستند:

$ head Makefile -n 3
VERSION = 3
PATCHLEVEL = 10
SUBLEVEL = 25

در این مثال، منابع برای کرنل 3.10.25 هستند. شما می توانید ببینید چه نسخه ای با دستور Uname -r در سیستم شما اجرا می شود.

اعمال patch ها

نحوه اعمال patch ها بستگی به فرمتی که در آن patch ها در دسترس قرار می گیرند دارد. بیشتر تکه ها یک فایل هستند و با ابزار پچ اعمال می شوند. به عنوان مثال، اجازه دهید نسخه کرنل نمونه ما را با patch های هسته ای در real-time دانلود و پچ کنیم:

$ wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.10/older/patch-3.10.25-rt23.patch.gz
$ gunzip patch-3.10.25-rt23.patch.gz
$ cat patch-3.10.25-rt23.patch | patch -p1

در مثال ما به سادگی فایل را دانلود و فشرده کرده و سپس آن را به ابزار پچ با استفاده از ابزار cat و یک pipe یونیکس منتقل می کنیم. ما می توانیم Git را برای اعمال این patchset ها به هسته خود بکار ببریم، اما ابتدا باید Git را پیکربندی کنیم تا بفهمیم چه کسی هستیم وقتی این تغییرات را انجام می دهیم:

$ git config --global user.name "Your name"
$ git config --global user.email "your email in here"

هنگامی که ما این کار را انجام دادیم می توانیم patchها را اعمال کنیم:

git am -3 /path/to/patches/*

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

ثبت دیدگاه
نام *
ایمیل*
دیدگاه *
0دیدگاه