در قسمت قبلی از سری آموزش کار با تراشه V3s به بررسی بیلد سیستم یوکتو پرداختیم و ویژگی هاش رو بررسی کردیم، همچنین روند ساخته شدن ایمیج توسط یوکتو رو بررسی کردیم، حالا توی این قسمت میخوایم نحوه ساخت ایمیج لینوکسی به کمک یوکتو، برای برد SINUX V3 رو بررسی کنیم. با سیسوگ همراه باشید.
شاید برای شما مفید باشد: آموزش الکترونیک از 0 تا 100ساخت ایمیج لینوکسی در یوکتو
برای ساخت ایمیج از این ریپازیتوری کمک میگیریم. (ما توی این آموزش با Ubuntu 18.04 پیش میریم.)
مرحله اول نصب یکسری پکیج هست که با این دستور انجام میشه.
1 | sudo apt-get install gawk wget git-core diffstat unzip texinfogcc-multilib build-essential chrpath socat libsdl1.2-dev xtermlibmpc-dev libgmp3-dev |
بعد از اون یک فولدر با نام yocto در پوشه home خودمون میسازیم، اگر این پوشه رو در جایی دیگه بسازید باید در دستوراتی که در ادامه وارد میکنیم رو هم اصلاح کنید، پس اگه تازه کار هستید مسیر رو تغییر ندید.
1 2 3 4 5 6 7 8 9 | cd ~ mkdir yocto cd yocto mkdir build git clone git://git.yoctoproject.org/poky --depth 1 -b dunfell cd poky git clone git://git.openembedded.org/meta-openembedded --depth 1 -b dunfell git clone https://github.com/meta-qt5/meta-qt5.git --depth 1 -b dunfell git clone https://github.com/mahdi2001h/meta-sinux --depth 1 -b dunfell |
همونطور که در دستورات هم مشخصه ما از نسخه dunfell یوکتو استفاده کردیم و layer های مورد نیاز رو با کمک دستورات گیت دانلود کردیم.
با کمک این دستور پوشه ای رو برای ذخیره کانفیگ های ایمیجمون مشخص میکنیم.
1 | source oe-init-build-env ~/yocto/build/sinux_v3 |
حالا فایل bblayers.conf
رو در مسیر ~/yocto/build/sinux_v3/conf/
به این صورت تغییر میدیم.
1 2 3 4 5 6 7 8 9 | BBLAYERS ?= " \ ${HOME}/yocto/poky/meta \ ${HOME}/yocto/poky/meta-poky \ ${HOME}/yocto/poky/meta-openembedded/meta-oe \ ${HOME}/yocto/poky/meta-openembedded/meta-networking \ ${HOME}/yocto/poky/meta-openembedded/meta-python \ ${HOME}/yocto/poky/meta-qt5 \ ${HOME}/yocto/poky/meta-sinux \ " |
بعد از اون لازمه که یکسری متغیر رو در فایل local.conf که کنار فایل قبلی هست تغییر بدیم.
1 2 3 4 | MACHINE = "sinux_v3" DL_DIR = "${HOME}/yocto/downloads" SSTATE_DIR = "${HOME}/yocto/sstate-cache" TMPDIR = "${HOME}/yocto/tmp" |
متغیر اول که مشخص کننده بردی هست که میخوایم ایمیج براش بسازیم. سه متغیر بعدی اما فایل هایی هستند که ممکنه با برد های دیگه مشترک باشند، پس اگه یه موقع با کمک آموزش دیگه ای برای برد دیگه ای از یوکتو استفاده کردید بهتره که این آدرس ها رو در اون هم قرار بدید تا فایل هایی که مشترک هستند دوباره دانلود نشند و … .
حالا با کمک این دستور شروع به کامپایل ایمیج میکنیم.
1 | bitbake console-image |
بعد از کامپایل ، ایمیج ما در این آدرس قابل دسترسی هست.
1 | ~/yocto/tmp/deploy/images/sinux_v3 |
برای اینکه ایمیج رو روی کارت حافظه بریزیم روی اون راست کلیک میکنیم و گزینه Open with disk image writer رو میزنیم. (فایل console-image-sinux_v3.sunxi-sdimg رو باید انتخاب کنید.)
دقت کنید که sdcard را از قبل به سیستم وصل کرده باشید(یه موقع هاردتون رو فرمت نکنیدا !! )،حالا sd رو انتخاب کرده و Start Restoring…. را میزنیم.
در پنجره باز شده restore را زده و در پنجره بعدی هم رمزمون را وارد میکنیم.
بعد از اینکه رایت کردن تمام شد eject را میزنیم و sd را خارج میکنیم.
حالا کافیه که sd را به برد وصل کرده و منتظر بوت شدن باشیم.
برای مشاهده مراحل بوت شدن باید با استفاده از یک رابط usb به سریال پایههای UAR0 RX و UAR0 TX برد sinux v3 رو به سیستم وصل کنید.
دو ال ای دی رو برد هست که یکی متصل بودن تغذیه رو نشون میده و اون یکی هم اگر سیستم عامل در حال نوشتن و خواندن از حافظه sd باشه چشمک میزنه.
نام کاربری root هست و رمز عبورم نداره.
1 2 3 4 5 6 7 8 9 10 | [ 20.600254] Bluetooth: L2CAP socket layer initialized [ 20.605361] Bluetooth: SCO socket layer initialized * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon ...done. Starting Telephony daemon Starting Linux NFC daemon Poky (Yocto Project Reference Distro) 3.1.16 sinux_v3 /dev/ttyS0 sinux_v3 login: root root@sinux_v3:~# |
این هم از صفحه lcd هنگام بوت شدن (نمایشگری که در حال حاضر متصل میباشد، دارای رزولوشن 800*480 هست.)
مرحله بعدی وصل کردن شبکه برد هست، در حالت عادی شبکه فعال میباشد و روی حالت dhcp است، یعنی باید به مودم به طور مثال وصل بشه و از اون آیپی بگیره، در صورتی که به مودم وصلش کردید با این دستور میتونید آیپی برد رو چک کنید.
1 | ip a |
اما برای اینکه بتونید مستقیم به سیستمتون وصلش کنید باید یه آیپی ثابت بهش بدید که برای اینکار خط 17 فایل interfaces رو با ادیتور vi تغییر میدیم.
1 2 3 4 5 6 | vi /etc/network/interfaces #line 17 from iface eth0 inet dhcp #to iface eth0 inet static |
بعد از اینکار این دستور رو باید بزنید تا تنظیمات شبکه بروز شود.
1 | /etc/init.d/networking restart |
در حال حاظر آیپی برد 192.168.5.78 هست و لازمه آیپی سیستمی که میخواید باهاش به برد وصل بشید هم توی همین رنج قرار بدیم، مثلا 192.168.5.75 بزاریم.
حالا میخوایم یک پکیج به ایمیجمون اضافه کنیم، برای اینکار باید سراغ فایل console-image.bb در مسیر poky/meta-sinux/recipes-images/images بریم . داخل متغیر IMAGE_INSTALL میتونید پکیج های دلخواهتون رو اضافه کنید، به طور مثال بعد از اضافه کردن پکیج htop این متغیر به این صورت در میاد.
1 2 3 4 5 6 7 8 | IMAGE_INSTALL += " \ ${SYSTEM_TOOLS_INSTALL} \ ${UTILITIES_INSTALL} \ ${NETWORK_APP} \ ${WIFI_SUPPORT} \ ${KERNEL_EXTRA_INSTALL} \ htop \ " |
حالا لازمه که دوباره این دستور رو بزنیم تا ایمیجمون کامپایل بشه و بعد دوباره روی کارت حافظه بریزیم.
1 | bitbake console-image |
در این بخش میتونید به همه قسمتهای سری آموزش کار با تراشه V3S دسترسی پیدا کنید:
- کار با تراشه V3S – قسمت اول – سخت افزار
- کار با تراشه V3S – قسمت دوم – مقدمه ای بر yocto
- کار با تراشه V3S – قسمت سوم – ساخت ایمیج
شاید برای شما مفید باشد: آموزش امبدد لینوکس از 0 تا 100
دانلود رایگان شماتیک و PCB برد توسعه SINUX V3
فایلهای طراحی را میتوانید بهصورت رایگان از گیت هاب من دریافت کنید!
سلام
من ایمیج رو درست کردم و ال سی دی هم وصل کردم اما همچین چیزی نشون نمی ده. فقط ی صفحه سیاه که دو تا نوشته نشون داده.
خب تا اینجا درسته دیگه 🙂
سلام دوباره خدمت شما.
این پروژه گرافیکی لینوکسی خیلی جالبه.
قبلا با f1c100s و بیلد روت تست کردم سرعت بالا اومدنش خوب بود..
نمیدونم آیا یوکتو هم با همون سرعت بوت میشه یا نه.
میشه در موردش توضیح بدید. تشکر میکنم.
سلام
یوکتو و بیلدروت هر دو قابلیت شخصی سازی ایمیج دارند
اینکه شما چه قابلیت هایی رو توی ایمیج فعال کنید باعث افزایش یا کاهش زمان بوت میشه
نه بیلد سیستم
سلام آقای مهدی.
خیلی ممنون از جوابتون .
بله ویدیو پیدا کردم تو ۲ ثانیه بوت میشد.
ولی baremetal با lvgl خیلی فوق العاده میشه.
فقط اگر میشید sdk رو هم پیدا کنم میتونستم شروع کنم .برای f1c100s اس دی کا بود.
این یکی v3s رو میتونید منبعی پیدا کنید ..
خیلی لطف میکنید.
تشکر.
همین لینکی که فرستادم baremetal برای تراشه های مختلف هست که f1c100 , v3s و خیلی تراشه های دیگه رو داخلش داره
اینم لینک گیت هابش
https://github.com/xboot/xboot
بعد از اجرا این دستور bitbake console-image این ارور را می دهد:
ERROR: Unable to start bitbake server (None)
ERROR: Server log for this session (/home/saeed/yocto/build/sinux_v3/bitbake-cookerdaemon.log):
— Starting bitbake server pid 12807 at 2023-10-03 09:49:54.824721 —
ERROR: The following layer directories do not exist:
ERROR: /home/saeed/yocto/poky/meta
ERROR: /home/saeed/yocto/poky/meta-poky
ERROR: /home/saeed/yocto/poky/meta-openembedded/meta-oe
ERROR: /home/saeed/yocto/poky/meta-openembedded/meta-networking
ERROR: /home/saeed/yocto/poky/meta-openembedded/meta-python
ERROR: /home/saeed/yocto/poky/meta-qt5
ERROR: /home/saeed/yocto/poky/meta-sinux
ERROR: Please check BBLAYERS in /home/saeed/yocto/build/sinux_v3/conf/bblayers.conf
کسی با این مشکل روبرو شده است؟
اگر انتهای ارور رو بررسی کنید ، نوشته آدرس دهی هایی که در فایل bblayers.conf کردید اشتباه هست و این فولدر ها رو پیدا نمیکنه
باید آدرس دهیتون رو چک کنید و اگر بر اساس آموزش نرفتید و مسیر ها رو تغییر دادید ، در این فایل هم آدرس دهی ها رو اصلاح کنید.
سلام و وقت بخیر
تشکر فراوان از اموزش بسیار عالیتون
یک مشکل در دایرکتوری گیت git://github.com/megous/linux.git وجود داره که جابه جا شده این لینک و لینک جدید هم در Recipe قرار نداره برای همین مشکل fetch در مرحله اخر bitbake ایجاد میشه امکانش هست راهنمایی کنید که چطور این لینک رو تغییر بدیم در فایل ها
ممنون.
سلام
اصلاح شد
تست کنید اگر مشکلی بود بگید
سلام
وقتی ابزارها را می خواهم نصب کنم این خطا را می دهد:
Note, selecting ‘git’ instead of ‘git-core’
E: Unable to locate package texinfogcc-multilib
E: Unable to locate package xtermlibmpc-dev
زمانی که می خواهم این دستور را می زنم source oe-init-build-env ~/yocto/build/sinux_v3
این خطا را می دهد:
Error: TEMPLATECONF value points to nonexistent directory ‘meta-canexp/conf’
متاسفانه در داخل نت هم نتوانستم مشکلات را پیدا کنم.
سلام
از چه توزیع لینوکس و چه نسخه ای استفاده میکنید ؟
اوبونتو Ubuntu 20.04.3 LTS
سلام خسته نباشید
یه تغییر باید در recipe کرنل که قرار دادید بدید .
لینک git://github.com/megous/linux.git برای کلن کردن لینوکس با branch orange-pi-5.8 حذف شده و در لینک دیگه ای قرار داره
متاسفانه دوستان یکی از خطاهایی که تو bitbake میگیرن do_fetch کردن این کرنل هست .
ممنون از آموزشتون
سلام
ممنون از شما
مثل اینکه هفته پیش این اتفاق افتاده
اولین فرصت اصلاحش میکنم
سلام وقت بخیر ممنون از اموزش عالیتون
این مشکلی مجید جان گفته بودن رو چطور میشه حل کرد تو Recipe کرنل و جایگزین کرد با لینک سالم؟
سلام
اصلاح شد
تست کنید اگر مشکلی بود بگید
با سلام و خسته نباشید
امکان اصلاح یا ارسال لینک جدید رو دارین؟
با سلام لطف میکنین آدرس جدید رو بذارین
سلام
اصلاح شد
تست کنید اگر مشکلی بود بگید
سلام
اصلاح شد
تست کنید اگر مشکلی بود بگید
سلام – لازمه عرض کنم
bitbake console-image
کلی خطا میده و مراحل کلا قطع میشه
scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
make[3]: *** [scripts/Makefile.host:106: scripts/dtc/dtc] Error 1
make[3]: *** Waiting for unfinished jobs….
و کلی خطای دیگه… آیا خودتون این رو تست کرده بودین..
تشکر.
بله تست کردم و مشکلی نداره
این ارور به نظر دلیلش نسخه اشتباه gcc هست
توی انجمن سیسوگ مراحلی که طی کردید رو به همراه نسخه لینوکس و .. توی یک موضوع بنویسید تا مراحل رو با هم چک کنیم
سلام و عرض خسته نباشید.
git://git.openembedded.org/meta-openembedded
این لینک کارنکرد من حالا از سایت خودش یه لینک جایگزین رو \دا کردم
ولی برای ساخت ایمج دستور بیت بیک خطا داد میگه بیت بیک وجود نداره..
درحالیکه جزی از بوکی هست و باید قاعدتا باشه..
حالا اگر میشه یه راهنمایی بفرمایید. مرسی
سلام
به جاش از این لینک میتونید استفاده کنید
git clone https://github.com/openembedded/meta-openembedded --depth 1 -b dunfell
برای اینکه دستور bitbake کار بده هم حتما قبلش باید این دستور زده بشه
source oe-init-build-env ~/yocto/build/sinux_v3
سلام،
از چه ابزاری خواندن داده سریال از برد به کامپیوتر را انجام می دهید. من از این دستور استفاده می کنم:
sudo putty /dev/ttyUSB0 -serial -sercfg 115200,8,n,1,N
سلام
به شخصه از gtkterm استفاده میکنم
سلام
خدا قوت
بسیار عالی
ممنون از شما
عالی👍🏻
ممنون از شما 🙂