एम्बेडेड सॉफ्टवेयर - Yocto निर्माण रास्पबेरी पाई 4 एक कंप्यूटर का स्क्रीनशॉट

Yocto ने Raspberry Pi 4 को बनाया

डॉकर एनवायर्नमेंट में

ओपन सोर्स योक्टो प्रोजेक्ट गाइड

Docker के साथ रास्पबेरी पाई पर सेटअप युक्तियाँ कस्टम Linux

डॉकर सेटअप युक्तियों के साथ रास्पबेरी पाई पर कस्टम लिनक्स के लिए ओपन सोर्स योक्टो प्रोजेक्ट गाइड

किसी भी हार्डवेयर पर कस्टम लिनक्स सिस्टम के लिए योक्टो प्रोजेक्ट में गोता लगाएँ। डेवलपर्स और एम्बेडेड सिस्टम उत्साही के लिए बिल्कुल सही। अभी निर्माण शुरू करें!

Yocto Project का अन्वेषण करें, जो किसी भी हार्डवेयर आर्किटेक्चर के लिए कस्टम Linux सिस्टम बनाने के लिए एक ओपन-सोर्स पहल है। क्रॉस-प्लेटफ़ॉर्म विकास के लिए CROPS का उपयोग करना सीखें, डॉकर कंटेनर सेट करें, और एम्बेडेड और IoT उपकरणों के लिए अनुरूप Linux छवियां बनाएं। हमारे गाइड में macOS पर सेटअप, बिल्ड वातावरण को कॉन्फ़िगर करना और रास्पबेरी पाई के लिए अनुकूलन शामिल है। चाहे आप नौसिखिए हों या विशेषज्ञ, अपनी लिनक्स परियोजना की जरूरतों के लिए सर्वोत्तम प्रथाओं, उपकरणों और सामुदायिक समर्थन प्राप्त करें।

Yocto डॉकर कंटेनर में चल रहा है

yocto डॉक्स के चैप्टर (2.2.2) में बताया गया है कि CROss PlatformS (CROPS) को नेटिव linux pc के विकल्प के तौर पर सेट अप किया जा सकता है। जैसे, यह विकल्प Raspberry Pi के लिए कस्टमाइज़्ड सिस्टम इमेज बनाने के लिए डॉकर कंटेनर का इस्तेमाल करता है।

बदकिस्मती से इस दस्तावेज़ में कुछ गलतियाँ हैं, जिसके कारण मुझे Mac OS X (मॉन्टेरे) पर अपने लिए इस एनवायर्नमेंट को सेट अप नहीं करते नहीं बन रहा है।

Mac OS X के लिए डॉकर कंटेनर सेटअप करें

Linux Windows और Mac OS X पर CROPS का इस्तेमाल करने के लिए, कुछ खास सेटिंग की ज़रूरत होती है। Yocto के लिए कंटेनर सेट अप करने से पहले, आपको नतीजे स्टोर करने के लिए एक डॉकर वॉल्यूम बनाना होगा। इसके अलावा Mac OS X में फ़ाइलें देने के लिए एक डॉकर साम्बा कंटेनर का इस्तेमाल किया जाता है।

डॉकर वॉल्यूम बनाएँ

टर्मिनल विंडो में, नीचे दिए गए कमांड लिखें:

docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir

साम्बा कंटेनर बनाएँ और रन करें

OSX आपको लोकल रूप से रन हो रहे साम्बा शेयर से कनेक्ट नहीं होने देगा। इसलिए, पहले आपको 127.0.0.1 of 127.0.0.2 के लिए एलियस बनाना होगा।

sudo ifconfig lo0 127.0.0.2 alias up

फिर साम्बा कंटेनर बनाएँ, जिससे आप डॉकर वॉल्यूम में मौजूद फ़ाइलों को देख सकेंगे:

docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba

चूँकि आपको साम्बा कंटेनर से कनेक्ट होने के लिए हमेशा एलियस की ज़रूरत होगी, इसलिए आप साम्बा की शुरुआत और एलियस को कुछ इस तरह कम्बाइन कर सकते हैं :

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

अब आप फ़ाइल ब्राउज़र में workdir को खोल सकते हैं। फ़ाइंडर में, "Command-K" दबाएँ और सर्वर एड्रेस बॉक्स में "smb://127.0.0.2/workdir" टाइप करें और "कनेक्ट" पर क्लिक करें। अब आपको फ़ाइंडर में डॉकर वॉल्यूम का कंटेंट दिखाई देगा।

Yocto कंटेनर बनाएँ और स्टार्ट करें

Yocto कंटेनर बनाने और/या स्टार्ट करने के लिए टर्मिनल विंडो में यह टाइप करें:

docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir

कंटेनर में बिल्ड एनवायर्नमेंट सेटअप करें

जब डॉकर कंटेनर स्टार्ट किया जाता है, तो आपके टर्मिनल पर एक प्रॉम्प्ट नज़र आता है, जो ऐसा दिखाई देता है: "pokyuser@d4ddfe042587:/workdir".

अब आप बिल्ड एनवायर्नमेंट सेटअप कर सकते हैं।

पोकी वर्ज़न का क्लोन बनाएँ

मेरे मामले में, मैं "Honister" नाम से Yocto के वर्ज़न 3.4 का इस्तेमाल करता हूँ, क्योंकि इस समय नए पोकी वर्ज़न के लिए meta-raspberry लेयर उपलब्ध नहीं हैं। पहली बार आपको पोकी रिपॉज़िटरी को क्लोन करना होगा:

git clone -b honister git://git.yoctoproject.org/poky poky-honister

अगर आप पोकी से लेटेस्ट वर्ज़न पर अपडेट करना चाहते हैं, तो:

cd poky-honister
git pull --all --prune

Raspberry Pi के लिए अतिरिक्त मेटा लेयर

"poky-honister" में बदलें और इन रिपॉज़िटरीज़ को क्लोन करें: meta-raspberry, meta-openembedded और ज़रूरत हो तो meta-qt5

cd poky-honister
git clone -b honister git://git.yoctoproject.org/meta-raspberrypi
git clone -b honister git://git.openembedded.org/meta-openembedded
git clone -b honister https://github.com/meta-qt5/meta-qt5.git

बिल्ड कॉन्फ़िग सेटअप करें

poky-honister डायरेक्टरी से बाहर निकलकर /workdir में आ जाएँ। अब oe-init-build-env स्क्रिप्ट वाले बिल्ड एनवायर्नमेंट को सोर्स करें।

cd ..
source poky-honister/oe-init-build-env rpi-build

"rpi-build" नाम की एक नई डायरेक्टरी (आप चाहें तो अपनी मर्ज़ी से इसका कोई भी नाम रख सकते हैं) और bblayers.conf, local.conf और templateconf.cfg फ़ाइलों के साथ एक conf डायरेक्टरी बना दी जाती है।

चूँकि कंटेनर में कोई भी टेक्स्ट एडिटर इंस्टॉल नहीं किया गया है, इसलिए या तो आपको Mac OS X में माउंट किए गए साम्बा वॉल्यूम में कॉन्फ़िग फ़ाइलों को एडिट करना होगा या फिर कंटेनर में एक टेक्स्ट एडिटर इंस्टॉल करना होगा। ऐसा करने के लिए, आपको एक दूसरी टर्मिनल विंडो तब खोलनी होगी - जब yocto कंटेनर रन हो रहा हो - और रूट प्रिविलेजेस के साथ कंटेनल में एक bash shell स्टार्ट करना होगा:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit

फिर आप एक पोकीयूज़र की हैसियत से yocto कंटेनर में कॉन्फ़िग फ़ाइलों को एडिट कर सकते हैं।

ध्यान दें

एडिटर स्थायी रूप से इंस्टॉल नहीं किया जाता। कंटेनर छोड़ने के बाद उसमें दोबारा एंटर करने के बाद, आपको उसे फिर से इंस्टॉल करना होगा

सबसे पहले bblayers.conf फ़ाइल में meta-raspberry जोड़ें

nano conf/bblayers.conf

"/workdir/poky-honister/meta-raspberrypi " जोड़ें, ताकि वह ऐसा नज़र आए

BBLAYERS ?= " \
  /workdir/poky-honister/meta \
  /workdir/poky-honister/meta-poky \
  /workdir/poky-honister/meta-yocto-bsp \
  /workdir/poky-honister/meta-raspberrypi \
  "

फिर उसे सेव कर लें।

दूसरा काम है local.conf को एडिट करना

local.conf फ़ाइल को एडिट करें:

nano conf/local.conf

नीचे दी गई लाइनें बदलें:

  • MACHINE ??= "qemux86-64" -> MACHINE ??= "raspberrypi4-64"

बदलाव इसके आधार पर करें कि आप Raspberry का कौन-सा वर्ज़न इस्तेमाल करते हैं (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, वगैरह)

नीचे दी गई लाइनों को अनकमेंट करें:

  • DL_DIR ?= "${TOPDIR}/downloads"
  • SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
  • TMPDIR = "${TOPDIR}/tmp"

SD-कार्ड को फ़्लैश करने वाला sdimg हासिल करने के लिए, आखिर में ये लाइनें जोड़ें:

  • IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
  • SDIMG_ROOTFS_TYPE = "ext4.xz"

local.conf फ़ाइल को सेव करें.

पहली इमेज को Bitbake करें

अब आपके पास पहली इमेज बनाने के लिए ज़रूरत की सभी सेटिंग मौजूद हैं:

bitbake -k core-image-minimal

Yocto डॉक्युमेंटेशन में आपको उपलब्ध इमेज डिस्क्रिप्शन के बारे में संक्षिप्त जानकारी मिलेगी।

जैसे कि:

  • core-image-minimal: एक छोटी-सी इमेज, जो किसी डिवाइस को बूट करने में सक्षम है।
  • core-image-base: एक कंसोल-ओनली इमेज, जो टार्गेट डिवाइस के हार्डवेयर को पूरी तरह सपोर्ट करती है।
  • core-image-full-cmdline: एक कंसोल-ओनली इमेज, जिसमें और भी ज़्यादा फ़ीचर वाली Linux सिस्टम फ़ंक्शनैलिटी इंस्टॉल होती है।

कुछ समय के बाद (अगर यह पहली बार है, तो यह अवधि कई घंटों की हो सकती है) bitbake का काम पूरा हो एगा और आपको नीचे दी गई डायरेक्टरी में sdimg फ़ाइल दिखाई देगी:

/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64

अतिरिक्त कॉन्फ़िगरेशन

अतिरिक्त Raspberry हार्डवेयर कॉन्फ़िगरेशन

विशिष्ट हार्डवेयर सेटिंग सेट करने के लिए, आप extra-apps.md और extra-build-config.md पर नज़र डाल सकते हैं। ये फ़ाइलें आपको meta-raspberrypi/docs डायरेक्टरी में भी मिलेंगी।

मेटा लेयर bitbake के साथ इस्तेमाल करने के लिए एक इमेज कॉन्फ़िगरेशन "rpi-test-image" भी देता है। यह इमेज "core-image-base" पर आधारित होती है, जिसमें meta-raspberrypi के अधिकांश पैकेज और कुछ मीडिया सैम्पल शामिल होते हैं।

bitbake -k rpi-test-image

अतिरिक्त सॉफ़्टवेयर कॉन्फ़िगरेशन

आप कौन-से बिल्ड कॉन्फ़िगरेशन का इस्तेमाल कर रहे हैं इसके आधार पर आपको अतिरिक्त सॉफ़्टवेयर पैकेज इंस्टॉल करने की ज़रूरत पड़ सकती है।

आप local.conf फ़ाइल में कुछ सेटिंग जोड़कर ऐसा कर सकते हैं।

जैसे कि ssh-server, pi-user और systemd को सेट करने के लिए ये लाइनें जोड़ें:

## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"

## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME:init_manager = "systemd"
VIRTUAL-RUNTIME:initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES:append = " systemd"

या python जोड़ें:

IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"

ध्यान दें

" python3 python3-pip rpi-gpio raspi-gpio" में मौजूद शुरुआती स्पेस महत्त्वपूर्ण होता है, क्योंकि टेक्स्ट मौजूदा कॉन्फ़िगरेशन में जोड़ा जाता है और उसे अलग करने के लिए इसी स्पेस का इस्तेमाल किया जाता है।

कॉपीराइट लाइसेंस

कॉपीराइट © 2022 Interelectronix e.K.
प्रोजेक्ट का सोर्स-कोड GPL-3.0 लाइसेंस के तहत लाइसेंस पर दिया जाता है।

आभार

इस निर्देश को बनाने में इस्तेमाल किए गए सोर्स:

सभी को धन्यवाद।