آموزش رزبری پای رزبری پای سخت افزار گنو/لینوکس

کراس کامپایل Qt 5.6.X برای رزبری پای ۲

نوشته شده توسط حامد طاهری

کراس کامپایل کردن Qt 5.6.x برای رزبری پای

Cross-compiling

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

معرفی مختصر Qt

یکی از بزرگترین نقطه ضعف های زبان برنامه نویسی قدرتمند ++C در گذشته ، نبود کتابخانه های گرافیکی قوی برای ساخت رابط کاربری بود و این نکته باعث به وجود آمدن Qt (تلفظ کنید کیوت) شد . Qt یک فریم ورک کراس پلتفورم برای زبان ++C می باشد و دارای کتابخانه های بسیار قدرتمند در زمینه رابط کاربری ، گرافیک دو بعدی و سه بعدی ، شبکه ، ارتباط با سخت افزار ، پردازش موازی و … است ، کراس پلتفرم بودن Qt این امکان را به ما می دهد که یک بار در یک سیستم عامل کد را نوشته و در سیستم عامل های دیگر به سادگی همان کد را کامپایل کرده و برنامه را اجرا کرد ، امروز Qt اکثر سیستم عامل های محبوب را پشتیبانی می کند از جمله (iOS,Windows,Windows CE,Windows RT,Linux, FreeBSD, HP-UX, Solaris,Android,OS X,Embedded Linux…) از مزیت دیگر Qt منبع باز بودن و وجود نسخه رایگان آن است که به محبوبیت این ابزار قدرتمند بسیار کمک کرده است .

Qt در دنیای Embedded

Qt در دنیای سیستم های درونه ای پا را فراتر گذاشته و با معرفی QtQuick و زبان اسکریپتی QML بستر بسیار مناسبی برای گسترش برنامه های کاربردی با ظاهری کاربر پسند فراهم کرده است به طوری که با وجود این تکنولوژی می توان برنامه هایی با رابط کاربری بسیار مدرن برای دستگاه هایی مثل انواع گوشی های هوشمند ، خودروها ، سیستم های مونیتورینگ صنعتی و ابزارهایی با صفحات لمسی و … با کمک پردازنده‌ی گرافیکی گسترش داد ، در ویدئو زیر می توانید نمونه ای از این برنامه ها را درسخت افزار های مختلف از جمله رزبری پای ببینید.

 

شروع کار و ابزارهای مورد نیاز

در این آموزش ما قصد داریم از طریق کامپیوتر شخصی خود (هاست) که روی آن سیستم عامل ویندوز نصب است کراس کامپایل را انجام دهید ، به این صورت که ابتدا ابزار مورد نیاز برای کراس کامپایل Qt را بر روی هاست نصب و Qt را از سورس آن برای رزبری پای کراس کامپایل می کنیم و بعد از ساخته شدن فایلها ، آنها را به رزبری پای انتقال می دهیم از آن به بعد تنها نیاز است شما در محیط Qt روی هاست پروژه را ایجاد کنید و با زدن دکمه اجرا برنامه روی رزبری پای اجرا خواهد شد (از طریق شبکه انتقال انجام می شود) ، بدین منظور مراحل زیر را به ترتیب و با دقت طی کنید.

۱ – دانلود آخرین نسخه ایمیج RASPBIAN و رایت کردن آن روی SD کارت (آخرین نسخه در این زمان RASPBIAN JESSIE WITH PIXEL  ۲۰۱۶-۰۹-۲۳).

۲- دانلود cross-toolchain متناسب با ایمیج RASPBIAN و نصب آن (از ستون سمت راست raspberry-gcc-4.9.2-r4.exe ۷۳۸ MB) ، توجه کنید در هنگام نصب به هیچ وجه مسیر و تنظیمات پیشفرض را تغییر ندهید و دقیقا مانند تصویر زیر انجام دهید.

 

نصب ابزار cross-toolchain , Cross-compiling،Qt،raspberry pi،آموزش حرفه ای رزبری پای،کراس کامپایل،کیوت

 

۳ – دانلود و نصب MinGW toolchain نسخه (mingw32-gcc4.8.1.exe) ، مسیر پیشفرض و تنظیمان تغییر نکند.

 

نصب ابزار MinGW toolchain

 

۴ – دانلود و نصب Python 2.7 for Windows و بعد از نصب حتما مطمئن شوید که محل نصب به متغیر Path ویندوز اضافه شده باشد (معمولا باید به صورت دستی اضافه شود).

 

اضافه کردن مسیر نصب پایتون به Path ویندوز

۵ – دانلود پکیج سورس Qt نسخه qt-everywhere-opensource-src-5.6.1.tar.xz و انتقال فایل به مسیر C:\Qt

۶ – در این مرحله قصد داریم کتابخانه های لازم برای کراس کامپایل را بر روی رزبری پای خود نصب کنید ، برای این منظور ابتدا نیاز است که رزبری پای خود را از طریق شبکه بی سیم یا به صورت کابلی با هاست خود شبکه کنید. وسپس از مسیر  C:\SysGCC\Raspberry\TOOLS\PortableSmartty در هاست نسخه قابل حمل برنامه SmarTTY را که یک کلاینت SSH است اجرا کرده و یک کانکشن به رزبری پای خود ایجاد کنید (مطمئن شوید SSH بر روی رزبری پای فعال باشد) ، حال میتوانید از طریق این برنامه دستورات لازم را بر روی رزبری پای اجرا کنید و همچنین فایل های لازم را انتقال دهید.

به ترتیب دستورات زیر را بر روی رزبری پای اجرا کنید

در فایل sources.list خط deb-src را از حالت کامنت خارج کنید و با زدن کلید های Ctrl+O و بعد Enter فایل را ذخیره و با Ctrl+X از برنامه nano خارج شوید.

deb-src

دستورات زیر را به ترتیب اجرا کنید ، منتظر شوید تا پکیج های مورد نیاز نصب شوند.

۷ – قبل از شروع کامپایل Qt نیاز داریم که همه کتابخانه ها ی روی رزبری پای را با پوشه sysroot روی هاست سینک کنیم تا مطمئن شویم که در هنگام کامپایل همه کتابخانه های مورد نیاز در دسترس کامپایلر خواهند بود ، برای این منظور از مسیر C:\SysGCC\Raspberry\TOOLS

اسکریپت UpdateSysroot.bat را اجرا کنید از قسمت Targeted Linux Machin اتصال SSH که قبلا ایجاد کرده اید را انتخاب و روی دکمه Synchronize کلیک کنید و منتظر شوید تا همه فایلها انتقال پیدا کنند.

 

UpdateSysroot

۸ – برنامه Msys را از مسیر زیر اجرا کنید (شبیه ساز شل لینوکس)

C:\SysGCC\MinGW32\msys\1.0\msys.bat

۹ – از طریق دستور cd /c/Qt به مسیری که در آن فایل پکیج سورس Qt را ذخیره کرده بودید وارد شوید و با دستور tar xf qt-everywhere-opensource-src-5.6.1.tar.xz پکیج را استخراج کنید .

 

استخراج سورس Qt

 

۱۰ – مطمئن شوید که مسیر های مربوط به MinGW gcc compiler و Raspberry Pi cross-compile در متغیر Path ویندوز اضافه شده اند ، برای این کار کافیست در msys دستورات زیر را وارد کنید و نتیجه را مشاهده کنید.

مسیر های مربوط به MinGW gcc compiler و Raspberry Pi cross-compile

۱۱ – حال باید یک سری تنظیمات روی فایلهای سورس Qt انجام بدهید ، وارد مسیر زیر بشوید و فایل qmake.conf را از طریق ++notdepad یا یک ویرایشگر متن دیگر باز کنید و مقادیر arm-linux-gnueabi به arm-linux-gnueabihf تبدیل کنید (با کلید های Ctrl+H ریپلیس کنید) و فایل را ذخیره کنید.

 C:\Qt\qt-everywhere-opensource-src-5.6.1\qtbase\mkspecs\linux-arm-gnueabi-g++

linux-arm-gnueabi-g++

۱۲ – وارد مسیر

++C:\Qt\qt-everywhere-opensource-src-5.6.1\qtbase\mkspecs\win32-g

شوید و فایل qmake.conf باز کنید به دنبال کلید QMAKE_CXXFLAGS بگردید و مقدار آن را به صورت زیر تغییر دهید

++win32-g

بعد از آن فایل qplatformdefs.h را در همان مسیر باز کرده و به دنبال کد زیر بگردید

و به صورت زیر تغییر دهید

qplatformdefs.h

۱۳ – حال همه چیز برای مرحله اول کامپایل آماده است در msys در حالی که در مسیر C:\Qt هست ، مسیر qtbuild را ایجاد و وارد آن شده و دستور کانفیگ زیر را وارد کنید.

به نحوه پاسخ گویی سوالات توجه کنید ، بعد از اجرا دستور به پیغام Failed to process makespec توجه نکنید و اگر خروجی مثل زیر بود دستور با موفقیت اجرا شده است و فایل Qmake ساخته شده است.

 

qt-build

 

۱۴ – برای اطمینان میتوانید دستور qtbase/bin/qmake -v را وارد کنید .

qtbase/bin/qmake -v

۱۵ – حال به مسیر C:\Qt\qt-everywhere-opensource-src-5.6.1\qtbase رفته و فایل configure را ویرایش کنید به دنبال

 echo “Creating qmake…”

بگردید و شرط قبل از آن را به صورت زیر تغییر دهید و فایل را ذخیره کنید

if [ ‘!’ f “$outpath/bin/qmake.exe” ]; then

if [ '!' -f "$outpath/bin/qmake.exe" ]; then

۱۶ – حال در msys در مسیر قبل دستور زیر را وارد کنید

سوالات را به صورت قبل پاسخ دهید و منتظر شوید.

Start Configure

Finish Configure

۱۷ – بعد از اینکه مراحل کانفیگ به پایان رسید می توانید مرحله اصلی کامپایل را انجام دهید ، برای این کار فقط کافیست دستور make را وارد کنید تا کامپایل شروع شود ، توجه کنید که این مرحله چند ساعتی طول می کشد و به دلیلی که نمی دانم استفاده از حالت چند پروسسی دراین مرحله جواب نمی دهد (make -j) .

make

اگر کامپایل با موفقیت انجام شد ، شما بخش مشکل کار را به انجام رسانده اید و در صورتی که خطایی ظاهر شد میتوانید با توجه به پیغامها آن را اصلاح کنید و مجددا دستور make را اجرا کنید .

تمام شدن مرحله make

۱۸ – بعد از پایان کامپایل Qt با زدن دستون make install فایهای کامپایل شده را به مسیر کراس کامپایلر انتقال دهید و این مرحله هم چند دقیقه ای زمان می گیرد ، اگر از توان سیستم خود مطمئن هستید 😉 می توانید این مرحله را به صورت چند پروسسی اجرا کنید (make install -j)

و  زمان را سیو کنید.

make install -j

 

۱۹ – مجددا برنامه SmarTTY اجرا کنید و به رزبری پای خود متصل شوید و با دستورات زیر مسیری برای انتقال فایلهای Qt به روی رزبری پای ایجاد کنید.

انتقال فایلهای Qt

 

۲۰ – از طریق SmarTTY و از منوی SCP->Upload directory فایلهای کامپایل شده را از هاست به مسیری که بر روی رزبری پای ایجاد کردید انتقال دهید ،

از مسیر C:\SysGCC\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5 بر روی هاست

به مسیر /usr/local/qt5 بر روی رزبری پای

SCP->Upload directory

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

۲۱ – بعد از اتمام کار انتقال اکنون شما می توانید برنامه های نمونه Qt را بر روی رزبری پای اجرا کنید برای این کار در همان اتصال جاری SmarTTY به مسیر زیر بروید

/usr/local/qt5/examples/opengl/qopenglwidget

و فایل qopenglwidget (دستور qopenglwidget/.)  را اجرا کنید و میتوانید نتیجه بر روی نمایشگری که به HTMI رزبری پای یا DSI رزبری پای متصل است را ببینید .

 

qopenglwidget

توجه داشته باشید که به این روش برنامه هایی که با Qt ساخته شده و  بر روی رزبری پای اجرا می شوند مستقیما بر روی فرم بافر نمایشگر رزبری پای نمایش داده شده و شما نمی توانید بر روی VNC و یا برنامه های remote دیگر خروجی آنها را مشاهده کنید ، همچنین در این صورت برنامه ها توسط Windows Manager سیستم عامل مدیریت نمی شوند و شما دکمه های بستن یا کوچک کردن پنچره برنامه را در اختیار ندارید و برنامه به صورت تمام صفحه بر روی هر چیز دیگری که در صفحه نمایش رزبری پای در حال نمایش است ، نمایش داده می شود و برای خارج شدن از برنامه باید منو یا دکمه ای برای بستن در نظر گرفته باشید ، این خصوصیات به دلیل استفاده از کلید opengl es2 در هنگام کانفیگ سورس Qt می باشد ، در این حالت حتی نیاز نیست که محیط گرافیکی سیستم عامل اجرا شده باشد و شما می توانید برای کار برد های خاص پکیج های مربوط به محیط گرافیکی سیستم عامل را حذف کنید و برنامه را طوری تنظیم کنید که بعد از بوت شدن سیستم عامل به صورت خودکار اجرا شده در این صورت هم سرعت اجرا و هم کارایی برنامه بالاتر می رود.

تصویر زیر برنامه نمونه اجرا شده بر روی رزبری پای می باشد ، برای توقف برنامه ها می توانید از کلید های ترکیبی Ctrl+C در برنامه SmarTTY استفاده کنید .

qopenglwidget app

۲۲ – مرحله آخر ، نصب IDE فریم ورک Qt در هاست خود و همچنین اضافه کردن کیت کراس کامپایلر رزبری پای بر روی آن است . برای این کار از اینجا  آخرین نسخه Qt برای ویندوز دانلود و نصب کنید ، بعد از نصب QtCreator را اجرا کنید وارد منوی Tools – > Options شده و به تپ Devices و Build & Run رفته و تنظیمات را مانند زیر انجام دهید .

 

Devices

Kits

Qt Versions

Compilers

Debuggers

حال بعد از ایجاد پروژه و اضافه کردن Kit رزبری پای کافیست کد زیر را به فایل پروژه  اضافه کنید تا بعد از کامپایل ، فایل به رزبری پای انتقال پیدا کند و اجرا بشود

target.path = /home/pi/     <- محل انتقال فایل بر روی رزبری
INSTALLS += target

target.path

ویدئو زیر یکی دیگر از برنامه های نمونه Qt که بر روی زربری پای اجرا شده است را نمایش می دهد.

 

بعد از اتمام همه مراحل می توانید نسخه پستیبانی از دایرکتوری C:\SysGCC تهیه کنید تا در استفاده های آتی بر روی کامپیوتر خود یا حتی کامپیوتر های دیگر ، نیاز به طی کردن همه مراحل از ابتدا نباشد و در آن صورت فقط کافیست مسیر C:\SysGCC را ایجاد کرده و محتویات فایل پشتیبان را به آن انتقال دهید و مراحل ۶-۱۹-۲۰-۲۲ را بر روی کامپیوتر جدید و رزبری پای جدید اعمال کنید و باز هم راه حل ساده تر تهیه ایمیج از نسخه فعلی رزبین آماده شده برای کراس کامپایل از روی رزبری پای و تهیه پشتیبان از دایرکتوری C:\SysGCC از کامپیوتر است ، که در کامپیوتر جدید فقط نیاز به باز گردانی نسخه پشتیبان C:\SysGCC و انجام مرحله ۲۲ به تنهایی و در رزبری پای جدید رایت ایمیج تهیه شده بر روی SD کارت می باشد . و اما لازم به ذکر است که شما می توانید Qt را از طریق منابع رسمی رزبری پای بر روی خود رزبری پای به راحتی نصب کنید ولی در آن صورت باید از خود رزبری پای برای توسعه برنامه استفاده کنید ، از این روش با ایجاد تغییرات جزئی در مرحله کانفیک سورس می توانید Qt برای برد های دیگر مثل بیگل بن و … کامپایل کنید.

در صورت استقبال ، کراس کامپایل Qt برای رزبری پای از طریق هاست لینوکس را هم آماده می کنم در ضمن کل این آموزش ها در صورت تقاضا به صورت ویدئو هم قابل ارایه است .

در مقاله بعدی با هم می بینیم که چطور می توان از طریق Qt و با استفاده از کتابخانه قدرتمند WiringPi با سخت افزار رزبری پای ارتباط برقرار کرد .

 

امیدوارم مفید بوده باشد.

درباره نویسنده

حامد طاهری

علاقه زیادی به تکنولوژی دارم و دانش آموخته رشته مهندسی برق الکترونیک هستم ، تخصصم هر چیزی در زمینه های الکترونیک ، کامپیوتر ، برنامه نویسی ، وب ، شبکه و سیستم های embedded است.

۱۲ دیدگاه

  • با سلام و تشکر از این مطلب ارزنده تان
    جناب آقای طاهری بنده با قسمت ۱۱ کمی مشکل دارم، لطفا راهنمایی دقیق تر بفرمایید. وقتی وارد مسیر زیر میشوم.
    C:\Qt\qt-everywhere-opensource-src-5.6.1\qtbase\mkspecs\linux-arm-gnueabi-g

    فایل qmake.conf را نمیتونم پیدا کنم. چه باید بکنم؟

    • سلام
      آدرسی که شما نوشتید در سورس Qt وجود ندارد ، شما باید به این آدرس بروید
      ++qt-everywhere-opensource-src-5.6.1\qtbase\mkspecs\linux-arm-gnueabi-g
      و اگر در این آدرس فایل qmake.conf وجود ندارد ! یا اینکه فایل سورس Qt مشکل دارد و یا به صورت صحیح اکسترکت نشده است.

  • سلام خیلی خوب بود لطفا این مباحث را بصورت ویدیویی و حتی فروشی هم که شده آماده کنید منتظریم
    باز هم متشکرم perfect

  • سلام. من روی رزبری این دستور رو که اجرا میکنم خطا میده
    sudo apt-get build-dep qt4-x11
    و هر بار هم که اجرا میکنم خطا میده یعنی یکسری از پکیجهاش رو نصب میکنه و چند تا رو خطا میده. حتی گفته بود که این رو اجرا کنم ولی نشد :
    sudo dpkg –configure -a
    ولی باز هم آخرش همون خطاها رو میده.
    یکبار دیگه روی یه میکرو sd دیگه هم رزبین رو ریختم ولی بام نشد.

دیدگاهتان را بنویسید