با قسمت هشتم از دوره ورود به دنیای امبدد لینوکس که دوره مقدماتی آموزش امبدد لینوکس می باشد همراه ما باشید.
(فصل دوم – بخش چهارم)
سلام، توی قسمت قبل رابطه بین تولچین و نوع پردازنده رو بررسی کردیم. توی این جلسه میخواهیم کتابخانههای C و ارتباط برنامههای لینوکسی با کرنل رو بررسی کنیم.
در قسمتهای قبلی آموزش، مسیر حرکت و فصلهای پیشرو، بسیاری از مفاهیم مورد نیاز و سؤالها و ابهامات شما در این دوره پاسخ داده شده است.
پس اگر اولین بار است که این آموزش را شروع میکنید، با توجه به سلسله مراتب پیش بینی شده برای آموزشها، بهتر است از جلسه اول شروع کنید!
جلسه اول آموزش، ورود به دنیای امبدد لینوکس
همه آموزشهای امبدد لینوکس
کتابخانه C و کرنل
رابط برنامهنویسی با سیستم عاملهای یونیکسی با زبان C تعریف شده، که الآن با استاندارد POSIX تعریف میشه. کتابخانه C پیاده سازی این رابط و در حقیقت شاهراه ارتباط با کرنل برای برنامههای لینوکسی هست. حتی اگر برنامه شما با زبان دیگری نوشته شده باشد باز هم در زمان اجرا باید از این شاهراه عبور کند.
چندین کتابخانه C برای ارتباط با کرنل داریم الآن، که در زمان کتاب کریم اکثراً نبودن و یه سری چیزهای دیگه بوده که ما کاری به کارشون نداریم چون منسوخ شدن. الآن کریس میگه اینا رو داریم:
glibc: کتابخانه استاندارد گنو هست و از سایتش قابل دسترس هست. از نظر سایز خیلی بزرگه ولی منطبقترین کتابخانه با POSIX API هست.
musl libc: این جدید هست و از اینجا قابل دسترسه. با وجود اینکه جدیده توجه بسیاری رو به خودش جلب کرده نه چون جذابه چون هم سایزش کمه و هم خیلی منطبق با استاندارد هست و جایگزین خوبی هست واسه glibc مخصوصاً اگه مشکلات حافظه داشته باشین.
uClibc-ng: در ابتدا برای میکروکنترلرها یا بهتر بگیم پردازندههایی که Memory Management Unit (MMU) ندارن و از uCLinux استفاده میکنن بود ولی امروزه برای لینوکس کامل هم استفاده میشه. کریس زیاد باش حال نمیکنه ولی پر کاربرد هست هنوزم! از اینجا میتونین بهش دسترسی داشته باشین.
حالا کی از کدوم استفاده کنیم؟
همه این کتابخانههای C برای ارتباط با کرنل هستند، اما اینکه از کدوم کتابخونه کی و کجا استفاده کنیم، کریس یه حساب کتاب سر انگشتی داده که تو عکس زیر میبینید و توی توضیحات گفته که جاهایی که محدودیت حافظه دارین musl libc بهتر از uClibc-ng هست.
نحوه نامگذاری تولچین گنو (GNU Toolchain)
این یک قانون هست، ولی قانون نیست! خیلی جاها ممکنه رعایت نشه ولی با دونستنش میتونید منظور سازنده تولچین رو بفهمید.
نام گذاری باید این شکلی باشه:
CPU-Vendor-Kernel-OperatingSystem
CPU: معماری پردازنده، اگه پردازنده فقط Little Endian باشه ممکنه یه el داشته باشه و اگه فقط Big Endian ممکنه eb داشته باشه. مثلا armeb.
Vendor: کسی یا جایی که تولچین رو ساخته مثلا Buildroot یا Poky.
Kernel: کرنل واسه ما همیشه لینوکس هست که یه جاهایی هم واسه اختصار حذف میشه. اگه هم تولچین واسه برمتال یا همون Bare Metal باشه معمولاً none هست. برمتال هم یعنی همون کاری که با میکروکنترلر میکنیم و بدون سیستم عامل و مستقیم واسه پردازنده کد مینویسم.
OperatingSystem: اسم کتابخانه C که معمولاً ABI هم بهش میچسبه مثلاً gnueabi یا musleabihf.
مثلاً armv8l-linux-gnueabihf توی سایت لینارو یعنی تولچینی که واسه معماری armv8 هست از نوع Little Endian برای لینوکس و با کتابخانه C گنو و EABIHF.
تولچین آماده استفاده کنیم یا خودمون بسازیم؟
اگه واسه پردازندهای که دارید استفاده میکنید شرکت سازنده پردزانده و یا شرکت طراح معماری پردازنده یا شرکت سازنده برد، تولچینی ارائه داده باشه بهتره از اون استفاده کنید. در کل به جز شرایط خاص هیچ وقت نرید سراغ ساختن تولچین چون کار تخصصی هست.
خب این سایتها چیا هستن؟ بهترینش واسه پردازندههای Cortex-A سایت Linaro هست. واسه بقیه پردازندهها هم جوینده یابنده ست!
تمرین
با توجه به اینکه دو تا برد رو انتخاب کردیم برای کار کردن باهاشون، با توجه به ویژگیهای ذکر شده در بخش |رابطه بین تولچین (Toolchain) و پردازنده| برای جفتشون چهارتا ویژگی رو مشخص کنید و بعد تولچین آماده رو واسه جفتشون پیدا کنید.
پایان بخش چهارم از فصل دوم.
سلام برای bare metal چرا باید toolchain نوشت ؟
برای bootloader هست مثلا
چون توی arm stm32 مثلا لایبراری های hal و ll هست یا حتی خود arduino که گویا به کد بوتلودر اشون ربط داره
تولچین نباید نوشت ولی لازمه که تولچین برای اون پردازنده بیلد بشه
البته ما خیلی وقت ها از تولچین های بیلد شده استفاده می کنیم
برای Raspberry PI 3 چهار ویژگی به صورت زیر هست :
armv7l-broadcom-linux-gnueabihf
و اینم لینک گیت هاب برای دانلود تولچین:
https://github.com/raspberrypi/tools
بر اساس اطلاعات مستند
F1C100 معماری ARM هست با طراحی Little Endian، ممیز شناور رو نتونستم تشخیص بدم داره یا نه (اما فکر کنم جایی خوندم که نداره، شایدم داشته باشه، زیاد سر ننداختم، فعلا در حال مطالعه سریع و چند باره این فصل هستم تا مقداری موضوعاتش رو بیشتر درک کنم)
سلام بر شما و دنبال کردن مقاله ها
این پردازنده ممیز شناور ندارد
سلام
منتظر قسمت بعدی هستیم
ممنون از آموزش با ارزشی که گذاشتید
امیدوارم زودتر قسمت های بعدی هم ارسال بشه
سلام بر احسان عزیز و پیگیری که دارید
خیلی عالی ممنونم.
سلام و تشکر