خوب! توی قسمت قبل با crosstool-NG و menuconfig آشنا شدیم و همین طور تونستیم برای “رسپبری پای سه بی پلاس – Raspberry Pi 3 B Plus” و “لیچی پای نانو – Lichee Pi Nano” هم تولچین ساختیم. توی این قسمت میخوایم اجزا تولچین رو بررسی کنیم و کمی بیشتر با ابزار های داخل اون آشنا بشیم.
در قسمتهای قبلی آموزش، مسیر حرکت و فصلهای پیش رو، بسیاری از مفاهیم مورد نیاز و سؤالها و ابهامات شما در این دوره پاسخ داده شده است.
پس اگر اولین بار است که این آموزش را شروع میکنید، با توجه به سلسله مراتب پیش بینی شده برای آموزشها، بهتر است از جلسه اول شروع کنید! جلسه اول آموزش، ورود به دنیای امبدد لینوکس همه آموزشهای امبدد لینوکس
آناتومی تولچین
سلامی دوباره!
الآن که من دارم قسمت جدید رو مینویسم عید هست پس سال نوتون مبارک و امیدوارم در سال جدید مهارتی جدید به تواناییهاتون اضافه بشه 🙂
آخرین جمله قبلیمون این بود «خوب الان همه چیز رو برای ساختن همه چیز دارید!» علاوه بر همه چیز زمان زیادی هم داشتین تقریبا شش ماه!
امیدوارم که یک کارهایی کرده باشین 🙂
بیاید یه سری اطلاعات از اجزا تولچین که ساختیم کسب کنیم.
اول مسیر تولچینی که ساختیم رو به فایل at00exports.sh اضافه میکنیم:
واسه sysroot معادل فارسی سراغ نداشتم 🙂 Sysroot درحقیقت یه دایرکتوری هست با یه سری زیردایرکتوریها که توشون کتابخانهها و فایلهای سرآیند و فایلهای تنظیماتی هست. Sysroot رو میشه در زمان کامپایل برای کامپایلرمون با آرگومان –sysroot ست کنیم.
محتویات sysroot معمولا اینهاست:
C++
1
2
3
4
5
6
7
You will find the following subdirectories insysroot:
lib:Contains the shared objects fortheClibrary andthe dynamic linker/loader,ld-linux
usr/lib:the staticlibrary archive files fortheClibrary,andany other libraries that may be installed subsequently
usr/include:Contains the headers forall the libraries
usr/bin:Contains the utility programs that run on the target,such asthe ldd command
sbin:Provides the ldconfig utility,used tooptimize library loading paths
سوال: خوب که چی؟
جواب: بعضی از این محتویات بدرد تارگت میخوره در زمان اجرای برنامه. برخی هم بدرد هاست میخوره در زمان کامپایل و بیلد کردن برنامه ولی در کل بدانید و آگاه باشید سیسروتی هست تا زمانی که گیر افتادین راه حل داشته باشین!
تولچین به جز کامپایلر دیگه چیا داره؟
خیلی چیزا!
برای شناخت اجزا تولچین کافیه یه نگاه به محتویات فولدر bin بندازین؟ (کدوم bin؟ همونی که توش کامپایلر هست.)
اجزا تولچین
اجزای کتابخانه
کتابخانه C یک کتابخانه نیست و در حقیقت از چهارتا بخش تشکیل شده که باهم APIی POSIX رو پیاده سازی میکنن:
libc: The main C library that contains the well-known POSIX functions such as printf , open , close , read , write , and so on libm: Contains maths functions such as cos , exp , and log libpthread: Contains all the POSIX thread functions with names beginning with pthread_ librt: Has the real-time extensions to POSIX, including shared memory and asynchronous I/O
از این چهار تا کتابخانه فقط libc به صورت پیش فرض با کامپایلر لینک هست بقیه رو در صورتی که توی برنامه ازشون استفاده کرده باشیم باید به کامپایلرمون بگیم، چه جوری؟ اینجوری که –l میذاریم و بدون اسم کتابخانه رو که lib ازش حذف شده در ادامهش مینویسم، البته این قانون معمولا در مورد بقیه کتابخانهها هم صدق میکنه. مثلا اگه از توابع ریاضیاتی استفاده کرده باشیم در برنامهمون این جوری کامپایلش میکنیم:
C++
1
$GCC myprog.c-omyprog–lm
سوال: یه وقتایی یه برنامههایی هست که هی میگه این کتابخونه نیست اون یکی نیست، این ورژنش نمیخونه و … چه کنیم؟
جواب با دو تا دستور اول ببینید چه کتابخونههایی با چه ورژنهایی میخواد و بعد برید دنبال یافتنشون و گذاشتنشون سرجاش!
مثلا این برنامه رو در نظر بگیرید:
انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ بلامانع است.
شما نیز میتوانید یکی از نویسندگان سیسوگ باشید. همکاری با سیسوگ
Rich_Dad IRANEMBEDDED
طراحی، بهینه سازی و تولید محصولات الکترونیکی، درحوزه های تجاری،صنعتی و تجهیزات پزشکی، مجری سیستم های امبدد لینوکس *
(فروش قطعات الکترونیک https://aniroot.com)
درباره sysroot یکی از بزرگان لینوکس حرف جالبی زد یبار (راب لندلی): حدود ۶۰ درصد از کراس کامپایل، هنر چگونه دروغ گفتن به نرم افزار بیلد کننده هست، درباره اینکه path هدر ها و lib ها کجاست!!
یعنی استفاده sysroot توی host یجوری شبیه سازی rootfs در مواقع نیاز هست بطوری که در مرحله بیلد هر چیزی از target که نیاز هست توی sysroot قرار گرفته.
سوالی که دارم اینکه برد Lichee Pi Nano توانایی اجرای برنامه ای که با کیوت نوشتیم و روی بورد دیپلوی کردیم را دارد؟ منظورم برنامه گرافیکی که امکان کار با LCD و تاچ را داشته باشد و آیا سرعت اجرا خوب خواهد بود؟ و سال دیگه اینکه همه فایلها سیستم عامل و برنامه Qt روی همان فلش روی بورد جا میشود یا حتما باید از SD-Card استفاده کرد؟
جواب سوال شما هم بله است هم خیر 🙂
باید به محدودیت رم موجود روی پردازنده دقت کنید معمولا برنامه های نوشته شده با qt رم بالایی نیاز دارند – پس اولین محدودیت محدودیت رم است
در مورد استفاده از sd کارت باید بگم احتمال این که نورفلش بتونه کتابخانه مورد نیاز رو درخودش جا بده کمه ولی باز مطمئن نیستم و تا تست نکنید نخواهید دانست.
ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموتهای درب بازکن تا ریموتهای دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی میکنند و آنهم ارسال اطلاعات بهصورت بیسیم است....
امنیت همیشه و در همهی اعصار، مقولهی مهم و قابلتوجه ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموتهای کنترل خواهیم پرداخت....
درباره sysroot یکی از بزرگان لینوکس حرف جالبی زد یبار (راب لندلی): حدود ۶۰ درصد از کراس کامپایل، هنر چگونه دروغ گفتن به نرم افزار بیلد کننده هست، درباره اینکه path هدر ها و lib ها کجاست!!
یعنی استفاده sysroot توی host یجوری شبیه سازی rootfs در مواقع نیاز هست بطوری که در مرحله بیلد هر چیزی از target که نیاز هست توی sysroot قرار گرفته.
سلام بر جناب مهندس قربانی عزیز
بله دقیقاً همین هست که فرمودید 😊
سلام، ممنونم از مطلب عالی.
سوالی که دارم اینکه برد Lichee Pi Nano توانایی اجرای برنامه ای که با کیوت نوشتیم و روی بورد دیپلوی کردیم را دارد؟ منظورم برنامه گرافیکی که امکان کار با LCD و تاچ را داشته باشد و آیا سرعت اجرا خوب خواهد بود؟ و سال دیگه اینکه همه فایلها سیستم عامل و برنامه Qt روی همان فلش روی بورد جا میشود یا حتما باید از SD-Card استفاده کرد؟
جواب سوال شما هم بله است هم خیر 🙂
باید به محدودیت رم موجود روی پردازنده دقت کنید معمولا برنامه های نوشته شده با qt رم بالایی نیاز دارند – پس اولین محدودیت محدودیت رم است
در مورد استفاده از sd کارت باید بگم احتمال این که نورفلش بتونه کتابخانه مورد نیاز رو درخودش جا بده کمه ولی باز مطمئن نیستم و تا تست نکنید نخواهید دانست.
سلام جناب حامد طاهری و زئوس عزیز
تشکر از زئوس عزیز برای پاسخ دهی،
دقیقا همون طور که زئوس فرمودن هم بله هم نه!
برای گرافیک با Qt سراغ پردازنده های قوی تر بروید بهتر است