امبدد لینوکس قسمت هجدهم: Kernel linux (بخش دوم)

امبدد لینوکس قسمت هجدهم: Kernel linux (بخش دوم)

امبدد لینوکس قسمت هجدهم: Kernel linux (بخش دوم)
امبدد لینوکس قسمت هجدهم: Kernel linux (بخش دوم)

در قسمت قبلی به بررسی کرنل و ساختار فایل های آن پرداختیم، حالا در این قسمت به سراغ پیکربندی کرنل لینوکس و درایور ها می‌پردازیم و آن‌ها را کامپایل می‌کنیم.

 

آشنایی با پیکربندی (configuration) کرنل لینوکس

یکی از نقاط قوت لینوکس این هست که برای هر دیوایس و کاربردی میشه پیکربندیش کرد. از یه وسیله ساده مثل یه ترموستات الکترونیکی تا یه وسیله پیچده مثل موبایل اصلاً پیکربندی لینوکس، خودش یه کار مفصلی هست و یه تخصص محسوب میشه که مکانیستم پیکربندی کرنل لینوکس Linux Kernel Kconfig نام داره و بیلدسیستمی که همراهش هست هم Kbuild بهش میگن.
این سیستم Kconfig و Kbuild توی پروژه‌های دیگه‌ای هم استفاده شدن مثل یوبوت فصل قبل یا کراس‌تول‌انی‌جی دو فصل قبل یا بیزی باکس و بیلدروت که در آینده باشون آشنا می‌شیم.
تقریباً توی تمامی فولدرهای کرنل لینوکس فایل Kconfig وجود داره.
این فایل‌ها قواعد و سینتکس مشخصی دارن و با استفاده از اونها می‌تونید تنظیمات مختلف به کرنل بدین.
اگه اولین فایل رو بازکنید اولین خطی که بعد از کامنت‌ها می‌بینید این هست:

که گویا اولین چیزی که باید مشخص بشه معماری پردازنده هست. اگه بریم توی فولدر arch و باز فایل کانفیگ رو بازکنیم اولین خط بعد از کامنت‌ها این هست

فایل‌های Kconfig پر از منو هستن که با کلیدواژه‌ی menu شروع و با endmenu تموم میشن.
مثلاً یکی از منوهای drivers/char/Kconfig رو با هم ببینیم و بررسی کنیم:

برای پیکربندی DEVMEM یه متغیر bool داریم که مقدار پیش‌فرضش y هست و در قسمت help هم توضیحات لازم رو در خصوص این متغیر به ما داده.

برای پیکربندی‌های مختلف این مدل متغیرها رو داریم.

kernel config var types

برای اینکه نخوایم دونه دونه این فایل‌ها رو بازکنیم و بررسی کنیم و مقداردهی کنیم و … ابزارهای کمکی هستن که میتونیم به‌صورت گرافیکی این کارها رو انجام بدیم.
آشناترینش menuconfig هست که قبلاً هم ازش استفاده کردیم.
برای اینکه وارد منوی پیکربندی کرنل لینوکس بشیم طبق اولینig نیاز داریم فایل Kconf معماری پردازنده رو تعیین کنیم.

در خصوص رسپبری‌پای معماری ما arm64 هست و برای لیچی‌پای معماری ما arm هست.

خب الان همچین صفحه‌ای باید جلوتون باز بشه:

kernel menuconfig

الان اگه برید توی منوی Device Drivers و بعد برید توی منوی Character devices می‌تونید تنظیمات DEVMEM رو ببینید.
توی این منوها * یعنی این ویژگی/ درایور در کرنل لینوکس باشد، M یعنی به صورت ماژولار باشد و خالی بودن به معنای نبودن در کرنل لینوکس هست.
ماژولار یعنی اینکه بیلد میشه اون درایور ولی فقط در زمان اجرا به کرنل لینوکس الحاق میشه و جزیی استاتیک از کرنل نیست.
در اینجا هم یه سری فایل‌های defconfig از قبل تعریف شده واسه بردها و پردازنده‌های مختلف هست که خیلی از بخش‌های پیکربندی رو توی خودشون دارن و کار رو ساده‌تر میکنن.
برای هر معماری توی این فولدر می‌تونید ببینید این فایل‌ها رو:

من پیشنهاد می‌کنم همیشه برای پیکربندی وقت بذارید تا بهترین پیکربندی رو داشته باشین. اینجوری هم زمان اجرای کرنل کمتر میشه و هم بهینه‌تر هست.
به عنوان تمرین، این دو منو و گزینه‌های انتخاب شده رو با هم مقایسه کنید تا متوجه بشید. این رو هم بگم که ما از پیکربندی پیش‌فرض دوم برای ادامه مسیر استفاده می‌کنیم.

ماژول‌های کرنل لینوکس Linux Kernel

آخرین مطلبی که قبل از ساختن کرنل لینوکس لازم هست بدونید در مورد ماژول‌ها هست. ماژول‌های کرنل لینوکس توی سیستم‌های دسکتاپ خیلی به‌دردبخور و پرکاربرد هستن. چون یک کرنل لینوکس قرار هست روی سیستم‌های خیلی زیادی با امکانات و وسایل جانبی خیلی متنوع اجرا بشه.
توی دنیای امبددلینوکس تقریباً همه‌چیز و کلیه‌ی سخت‌افزارها همان روز اول مشخص هستن پس عملاً نیاز خاصی نیست که از ماژول‌ها استفاده کنیم و توصیه کریس هم این هست که استفاده نکنیم چون بعدش وابستگی‌های زیادی میاره.
کریس میگه سه تا دلیل هست که می‌تونه استفاده از ماژول‌های کرنل لینوکس رو منطقی کنه:
۱- مسائل مربوط به کپی‌رایت.
۲- کاهش زمان بوت شدن کرنل لینوکس با لود نکردن درایورهای غیرضروری.
۳- زمانی که درایورهای زیادی هست و استاتیک بودن اون‌ها نیازمند حافظه زیادی هست، مثلاً شما یه پورت USB دارین که سخت‌افزارهای زیادی رو پشتیبانی می کنه.

قبل از ساختن کرنل لینوکس چندتا سؤال و جواب داشته باشیم:

 

کدام فرمت کرنل لینوکس Linux Kernel رو انتخاب کنیم؟

وقتی‌که کرنل لینوکس رو می‌سازیم چند تا خروجی داریم که یکیش همون فایل کرنل لینوکس هست.
این فایل می‌تونه فرمت‌های مختلفی داشته باشه، اول باید ببینیم ما کدوم فرمت رو می‌خواهیم.
اگر بوت لودر ما یوبوت باشه: یوبوت درگذشته فرمت uImage رو قبول می‌کرد ولی الان zImage رو هم قبول می‌کنه و با دستور bootz میشه اجراش کرد.
کامپیوترهای X86: باید از فرمت bzImage استفاده کرد.
بقیه بوتلودرها: معمولاً همون zImage رو استفاده میکنن.

 

به جز کرنل لینوکس Linux Kernel چه چیزی رو باید بیلد کنیم؟

به‌جز کرنل لینوکس دیوایس تری هم حتماً باید ساخته بشه.
ماژول‌ها رو هم می‌تونیم بسازیم یا نه بستگی داره که از اونها در آینده می‌خوایم استفاده کنیم یا نه.

 

چه فایل‌هایی ساخته میشن و به چه کاری میان؟

Vmlinux که در حقیقت فایل ELF کرنل لینوکس هست و System.map همیشه ساخته میشن بعدش از روی vmlinux فایل باینری کرنل لینوکس که اسمش Image هست، ساخته می‌شه و از روی اون فرمت‌های مختلف کرنل لینوکس مثل zImage و uImage ممکنه ساخته بشن.

 

 بریم که کرنل لینوکس رو بسازیم

بعد از پیکربندی کرنل لینوکس به‌راحتی و با انتخاب معماری و کراس کامپایل میشه کرنل لینوکس روساخت:

  یادتون نرفته که ما یه فایل داریم با این محتویات 

حالا این دو خط رو هم بش اضافه می‌کنیم:

اول بریم سرجای درست

مرحله بعدش طبق راهنمایی خود بنیان باید این رو هم پشت سر بذاریم:

و در نهایت بریم بزنیم ساخته بشه

میتونید ماژول رو به تنهایی بزنید برای بیلد شدن ماژول‌ها و یا dtbs رو برای دیوایس تری و یا به جای Image از zImage یا uImage استفاده کنید.

 

تمیز کردن سورس کدها

ممکنه یه وقتایی خرابکاری کنیم یا اصلاً بنا به هر دلیل دیگه بخوایم همه‌چیز برگرده به زمانی که سورس رو دانلود کردیم می‌تونیم از این سه تا دستور استفاده کنیم:

کریس اینا رو در موردشون میگه:

kernel clean command

یه سری هم به نظرات این پایین بندازید، نظرات رو به خونید و اگر شما هم‌نظری دارید، لطفاً با ما به اشتراک بگذارید!

همه آموزش های امبدد لینوکس

4 نفر

پــــســنــدیـده انـد

توجه

Rich_Dad IRANEMBEDDED
Rich_Dad IRANEMBEDDED

طراحی، بهینه سازی و تولید محصولات الکترونیکی، درحوزه های تجاری،صنعتی و تجهیزات پزشکی، مجری سیستم های امبدد لینوکس * (فروش قطعات الکترونیک https://aniroot.com)

دیدگاه ها

4 دیدگاه

  • جواد
    ۱۲ شهریور ۱۴۰۱

    سلام
    درباره کاربرد arm development studio هم یه توضیحی می فرمایید ؟
    اونجا هم نوشته که toolchain کاملی داره . به نظرتون ازون تولچین میشه استفاده کرد و این کارهایی که این جا توی محیط لینوکس اوبونتو انجام میدیم بیاییم و با arm ds توی محیط ویندوز انجام بدیم ؟

    • Rich_Dad IRANEMBEDDED
      Rich_Dad IRANEMBEDDED
      ۳۰ شهریور ۱۴۰۱

      سلام جواد جان

      می توان با این سوال جواب داد:

      آیا با کفش پاشنه بلند میشه کوهنوردی کرد؟ 😉

  • At
    ۱۱ شهریور ۱۴۰۱

    آقا درود بر شما
    کلی دعای خیر پشت سرتون هست
    فقط یه چیزی این F1C100S دیگه دنبال نمیشه ؟
    قیمت اش خیلی وسوسه کننده است به خصوص برای کارای گرافیکی

    • Rich_Dad IRANEMBEDDED
      Rich_Dad IRANEMBEDDED
      ۱۹ شهریور ۱۴۰۱

      سلام بر شما
      پاینده و سلامت باشید، تشکر از دعای خیرتان ?

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک