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

Yocto - Raspberry - PIGPIO - Qt

pigpio लाइब्रेरी और Qt टूलचेन वाला Linux

pigpio के लिए बिटबेक रेसिपी

pigpio लाइब्रेरी के लिए रेसिपी बनाएँ

इस प्रोजेक्ट के लिए हमें एक लाइब्रेरी के ज़रिए I2C, SPI और अन्य GPIO को ऐक्सेस करने के लिए pigpio लाइब्रेरी की ज़रूरत होगी।

दुर्भाग्य से हमें Yocto के कॉमन मेटा-लेयर में इसके लिए कोई रेसिपी नहीं मिली, इसलिए हमें यह खुद ही बनानी पड़ेगी।

pigpio_git.bb recipe

Yocto के लिए कस्टम रेसिपी बनाना कोई बहुत मुश्किल काम नहीं है - लेकिन अगर इसे विस्तृत रूप से देखा जाए, तो हो सकता है।

इसकी मानक प्रक्रिया यह है कि सोर्स को लेकर बिटबेक किया जाए:

DESCRIPTION = "pigpio"
SECTION = "devel/libs"
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = "file://UNLICENCE"

COMPATIBLE_MACHINE = "^rpi$"

SRC_URI = "git://github.com/joan2937/pigpio.git;protocol=https;tag=v79 \
"

S = "${WORKDIR}/git"

inherit pkgconfig cmake

लेकिन अगर आप "pigpio को बिटबेक करते हैं", तो आपको कुछ गड़बड़ियाँ नज़र आती हैं, क्योंकि वर्ज़न वाली कोई भी लाइब्रेरी कॉन्फ़िगर नहीं की गई है और मैनपेज (manpages) फ़ाइलों की लोकेशन को सही ढंग से हैंडल नहीं किया जाता।

मैनपेज से संबंधित गड़बड़ी

सबसे पहले यह गड़बड़ी दिखाई देती है:

ERROR: pigpio-git-r0 do_package: QA Issue: pigpio: Files/directories were installed but not shipped in any package:
  /usr/man
  /usr/man/man1
  ...

आप नीचे बताई गई सेटिंग का इस्तेमाल करके इस गड़बड़ी को ठीक कर सकते हैं:

FILES:${PN}-doc += "\
     /usr/man/man1/pigs.1 \
     /usr/man/man1/pig2vcd.1 \
     /usr/man/man1/pigpiod.1 \
     /usr/man/man3/pigpio.3 \
     /usr/man/man3/pigpiod_if.3 \
     /usr/man/man3/pigpiod_if2.3 \
"

नॉन-सिमलिंक गड़बड़ी

मैनपेज फ़ाइलों से संबंधित गड़बड़ी को ठीक करने के बाद, अगली गड़बड़ी सामने आती है:

ERROR: pigpio-git-r0 do_package_qa: QA Issue: pigpio rdepends on pigpio-dev [dev-deps]
ERROR: pigpio-git-r0 do_package_qa: QA Issue: -dev package pigpio-dev contains non-symlink .so '/usr/lib/libpigpio.so'
-dev package pigpio-dev contains non-symlink .so '/usr/lib/libpigpiod_if2.so'
-dev package pigpio-dev contains non-symlink .so '/usr/lib/libpigpiod_if.so' [dev-elf]

ऐसा इसलिए होता है, क्योंकि "CMakeLists.txt" से वर्ज़न वाली कोई भी लाइब्रेरी जनरेट नहीं की गई है। इसे ठीक करने के लिए, हम यह जोड़ते हैं:

SOLIBS = ".so"
FILES_SOLIBSDEV = ""

systemd pigpiod को ऑटोस्टार्ट करें

pigpio डेमॉन को ऑटोस्टार्ट करने के लिए, हम यह जोड़ते हैं:

do_install() {
    install -d ${D}${bindir}
    install -d ${D}${libdir}
    install -d ${D}${PYTHON_SITEPACKAGES_DIR}
     
    install -m 0644 ${S}/pigpio.py ${D}${PYTHON_SITEPACKAGES_DIR}

    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${S}/util/pigpiod.service ${D}${systemd_system_unitdir}

    cmake_do_install
}

SYSTEMD_SERVICE:${PN} = "pigpiod.service"

ध्यान दें

अगर आपको डेवलपमेंट के लिए हेडर फ़ाइलें इंस्टॉल करने की ज़रूरत है, तो आपको IMAGE_FEATURES "dev-pkgs इंस्टॉल करना होगा

IMAGE_FEATURES += "package-management dev-pkgs doc-pkgs"

meta-interelectronix-rpi से रेसिपी के साथ ज़िप किया गया मेटा-लेयर डाउनलोड करें।

ग्लोबल इमेज कॉन्फ़िगरेशन

local.conf सेटिंग

rpi4-build से ज़िप की गई बिल्ड कॉन्फ़िगरेशन फ़ाइलें डाउनलोड करें।

सबसे पहले आइए bblayers.conf फ़ाइल पर नज़र डालें। अंदर आपको अपनी ज़रूरत के मेटा-लेयर मिल जाएँगे। अगर आपने पहले मेटा-लेयर डाउनलोड नहीं किया था, तो ऐसा कर लें और अपनी bblayers.conf फ़ाइल को एडजस्ट करें।

दूसरा काम है local.conf फ़ाइल पर नज़र डालना।

I2C सेटिंग

अगर आप I2C से कनेक्ट किए गए सेंसर चिप का इस्तेमाल करना चाहते हैं (जैसे कि तापमान सेंसर), तो आपको local.conf फ़ाइल में I2C को एनेबल करना होगा।

ENABLE_I2C = "1"
KERNEL_MODULE_AUTOLOAD_rpi += " i2c-dev"

X11 और Wayland को हटाएँ

अगर हम X11 और Wayland को नहीं हटाते, तो बिटबेक प्रोसेस में कई गड़बड़ियाँ हो सकती हैं

हमारे मामले में - हमें एक से ज़्यादा विंडो की ज़रूरत नहीं है, इसलिए हम उन्हें हटा देते हैं।

DISTRO_FEATURES:remove = "ptest x11 wayland vulkan directfb"

eglfs का सही ढंग से इस्तेमाल करने के लिए, हम यह जोड़ते हैं:

VC4DTBO ?= "vc4-fkms-v3d"

Raspberry इमेज को बिटबेक करें

इमेज कॉन्फ़िगरेशन फ़ाइल बनाएँ

"rpi4-64-qt5-gpio-image.bb" फ़ाइल में हम यह डिफ़ाइन करते हैं कि हमें अपने linux डिस्ट्रिब्यूशन में कौन-कौन से पैकेज चाहिए। जैसा कि पहले बताया गया था - यहाँ आप - IMAGE_FEATURES "dev-pkgs" को शामिल कर सकते हैं।

यह फ़ाइल कई सेक्शन में बँटी होती है, जैसे कि DEV-SDK, EXTRA_TOOLS वगैरह, ताकि उन पैकेज को आसानी से जोड़ा जा सके, जिनकी अक्सर ज़रूरत पड़ती है।

pigpio पैकेज

यह पैकेज CUSTOM_STUFF के तहत जोड़ा जाता है:

CUSTOM_STUFF = " \
    pigpio \
"

Qt पैकेज

Qt के लिए ज़रूरी पैकेज को पैकेज ग्रुप में जोड़ा जाता है और ये पैकेज ग्रुप यहाँ जोड़े जाते हैं:

IMAGE_INSTALL:append += " packagegroup-qt5 packagegroup-qt5-toolchain-target packagegroup-qt5-qtcreator-debug"

आपको "packagegroup-qt5.bb" फ़ाइल में "packagegroup-qt5" मिल जाएगा और आप Qt पैकेज को जोड़ या मिटा सकते हैं।

meta-interelectronix-rpi-qt से मिली इमेज के साथ ज़िप किया गया मेटा-लेयर डाउनलोड करें।

इसके बाद आप इमेज को बिटबेक कर सकते हैं:

bitbake rpi4-64-qt5-gpio-image

SDK को बिटबेक करें

SDK टूलचेन बनाएँ

अगर आप इस कस्टम Linux डिस्ट्रिब्यूशन के लिए एक Qt ऐप्लिकेशन डेवलप करना चाहते हैं, तो आप यकीनन टूलचेन को अपने QtCreator कॉन्फ़िगरेशन में जोड़ने के लिए उसे क्रॉस कम्पाइल करवाना चाहेंगे।

आप नीचे दिए गए बिटबेक कमांड का इस्तेमाल करके आसानी से SDK बना सकते हैं:

bitbake -c populate_sdk rpi4-64-qt5-gpio-image

हमने इमेज कॉन्फ़िगरेशन फ़ाइल में "packagegroup-qt5-toolchain-target packagegroup-qt5-qtcreator-debug" पैकेज ग्रुप जोड़ दिया है।

SDK इंस्टॉल करें

आपको जनरेट किया गया SDK नीचे दी गई डायरेक्टरी में मिलेगा:

/tmp/deploy/sdk

हमारे मामले में इसका नाम "poky-glibc-x86_64-rpi4-64-qt5-gpio-image-cortexa72-raspberrypi4-64-toolchain-3.4.3.sh" है।

इस फ़ाइल में सेटअप के निर्देश और सभी ज़रूरी फ़ाइलें मौजूद होती हैं (कम्प्रेस्ड फ़ॉर्मेट में)।

इस फ़ाइल को अपने डेवलपमेंट कंप्यूटर पर कॉपी करके एक्ज़िक्यूट करें:

./poky-glibc-x86_64-rpi4-64-qt5-gpio-image-cortexa72-raspberrypi4-64-toolchain-3.4.3.sh

SDK इंस्टॉल करने के निर्देशों का पालन करें।

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

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