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

GitHub पर सोर्स देखें

बिना किसी शुल्क के और सार्वजनिक तौर पर डेवलपमेंट को बढ़ावा देने के लिए, OpenThread, बिल्ड टूलचेन में CMake का इस्तेमाल करता है. फ़िलहाल, इस टूलचेन की ज़रूरत, OpenThread को नए हार्डवेयर प्लैटफ़ॉर्म पर पोर्ट करने के लिए होती है.

आने वाले समय में, अन्य बिल्ड टूलचेन के साथ भी काम किया जा सकता है. हालांकि, वे इस पोर्टिंग गाइड के दायरे में नहीं आते.

नया रिपॉज़िटरी बनाना

सबसे पहले, अपने हार्डवेयर प्लैटफ़ॉर्म के लिए एक नया होम सेट अप करें. इस गाइड में, हम ot-efr32 नाम की एक नई रिपॉज़िटरी बनाएंगे. इसमें प्लैटफ़ॉर्म एब्स्ट्रैक्शन लेयर, हार्डवेयर प्लैटफ़ॉर्म का SDK टूल, और कुछ काम की स्क्रिप्ट शामिल होंगी.

इस उदाहरण में, हमने GitHub पर SiliconLabs/ot-efr32 डेटा स्टोर करने की जगह बनाई और उसे ~/repos/ot-efr32 पर क्लोन किया.

mkdir -p ~/repos
cd ~/repos
git clone git@github.com:SiliconLabs/ot-efr32.git
Cloning into 'ot-efr32'...
remote: Enumerating objects: 99, done.
remote: Counting objects: 100% (99/99), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 333 (delta 65), reused 39 (delta 39), pack-reused 234
Receiving objects: 100% (333/333), 170.78 KiB | 5.69 MiB/s, done.
Resolving deltas: 100% (194/194), done.
git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

रिपॉज़िटरी का स्ट्रक्चर

OpenThread GitHub संगठन में मौजूदा प्लैटफ़ॉर्म रिपॉज़िटरी के साथ एक जैसा बनाए रखने के लिए, अपनी रिपॉज़िटरी को इस तरह से व्यवस्थित किया जा सकता है:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
फ़ोल्डर ब्यौरा
examples ऐप्लिकेशन के उदाहरण ज़रूरी नहीं है
openthread openthread रिपॉज़िटरी को सब-मोड्यूल के तौर पर इस्तेमाल करना
script प्रोग्राम बनाने, टेस्ट करने, और उसे लिंट करने के लिए स्क्रिप्ट
src प्लैटफ़ॉर्म ऐब्स्ट्रैक्शन लेयर को लागू करना
third_party तीसरे पक्ष के किसी भी सोर्स के लिए जगह

सब-मोड्यूल जोड़ना

अगला चरण, openthread और अन्य ज़रूरी रिपॉज़िटरी को सब-मोड्यूल के तौर पर जोड़ना है

git submodule add git@github.com:openthread/openthread.git
Cloning into '/home/user/repos/ot-efr32/openthread'...
remote: Enumerating objects: 78281, done.
remote: Counting objects: 100% (1056/1056), done.
remote: Compressing objects: 100% (488/488), done.
remote: Total 78281 (delta 639), reused 864 (delta 556), pack-reused 77225
Receiving objects: 100% (78281/78281), 76.62 MiB | 35.24 MiB/s, done.
Resolving deltas: 100% (61292/61292), done.

इस उदाहरण के लिए, हम third_party में Silicon Labs Gecko SDK टूल का लाइट वर्शन, सब-मोड्यूल के तौर पर जोड़ेंगे.

cd third_party
git submodule add git@github.com:SiliconLabs/sdk_support.git
Cloning into '/home/user/repos/ot-efr32/third_party/sdk_support'...
remote: Enumerating objects: 32867, done.
remote: Counting objects: 100% (8181/8181), done.
remote: Compressing objects: 100% (3098/3098), done.
remote: Total 32867 (delta 4945), reused 7469 (delta 4732), pack-reused 24686
Receiving objects: 100% (32867/32867), 128.83 MiB | 30.91 MiB/s, done.
Resolving deltas: 100% (19797/19797), done.

स्क्रिप्ट

सामान्य टास्क आसानी से करने के लिए, script फ़ोल्डर में कुछ स्क्रिप्ट बनाई जा सकती हैं. इसमें, बूटस्ट्रैप करने, बिल्ड करने, कोड-लिंटर चलाने, और GitHub CI की जांच के लिए टेस्ट स्क्रिप्ट जैसे टास्क के लिए स्क्रिप्ट शामिल हो सकती हैं.

यहां कुछ स्क्रिप्ट के उदाहरण दिए गए हैं, जो मौजूदा प्लैटफ़ॉर्म के ज़्यादातर रिपॉज़िटरी के लिए स्टैंडर्ड हैं.

bootstrap

इस स्क्रिप्ट से, आपके हार्डवेयर प्लैटफ़ॉर्म के लिए ज़रूरी सभी टूल और पैकेज इंस्टॉल हो जाने चाहिए. यह openthread की बूटस्ट्रैप स्क्रिप्ट को भी चलाना चाहिए, ताकि यह पक्का किया जा सके कि उपयोगकर्ता के पास OpenThread स्टैक बनाने के लिए ज़रूरी सभी चीज़ें हों.

उदाहरण के लिए, ot-efr32 में बूटस्ट्रैप स्क्रिप्ट देखें.

build

CMake बिल्ड स्क्रिप्ट की मदद से, उपयोगकर्ता आपके प्लैटफ़ॉर्म के लिए OpenThread स्टैक बना सकते हैं. अगर आपकी रिपॉज़िटरी में किसी उदाहरण के तौर पर कोई ऐप्लिकेशन मौजूद है, तो यह स्क्रिप्ट उन ऐप्लिकेशन को भी बना सकती है. इस स्क्रिप्ट में, सिस्टम कॉन्फ़िगरेशन के बुनियादी विकल्प होने चाहिए. इनमें, प्लैटफ़ॉर्म के हिसाब से मैक्रो की परिभाषाएं भी शामिल होनी चाहिए.

उदाहरण के लिए, ot-efr32 में बिल्ड स्क्रिप्ट देखें.

test

टेस्ट स्क्रिप्ट से, उपयोगकर्ताओं को आपके तय किए गए किसी भी टेस्ट का इस्तेमाल करके, बदलावों की जांच करने में मदद मिल सकती है. यह कोई भी काम हो सकता है. जैसे, सही तरीके से काम करने की जांच करने वाले बिल्ड चलाना या यूनिट-टेस्ट सुइट लॉन्च करना.

ot-efr32 में, स्क्रिप्ट हर efr32 प्लैटफ़ॉर्म पर काम करने वाले हर बोर्ड के लिए, build स्क्रिप्ट को आसानी से लागू करती है.

उदाहरण के लिए, ot-efr32 में टेस्ट स्क्रिप्ट देखें.

make-pretty

एक जैसी स्टाइल बनाए रखने के लिए, इस स्क्रिप्ट में कोड, स्क्रिप्ट, और मार्कडाउन फ़ाइलों को फ़ॉर्मैट करना चाहिए.

इस स्क्रिप्ट को खुद से तय किया जा सकता है. हालांकि, मौजूदा प्लैटफ़ॉर्म के रिपॉज़िटरी में इस्तेमाल की जा रही make-pretty स्क्रिप्ट का इस्तेमाल करना सबसे आसान हो सकता है. यह स्क्रिप्ट, openthread की स्टाइल स्क्रिप्ट को कॉल करती है. साथ ही, यह पक्का करने में मदद करती है कि सभी OpenThread रिपॉज़िटरी में एक जैसी स्टाइल हो.

लिंकर स्क्रिप्ट का कॉन्फ़िगरेशन

GNU लिंकर स्क्रिप्ट, इनपुट फ़ाइलों (.o "ऑब्जेक्ट" फ़ाइलें, जिन्हें GNU कंपाइलर कलेक्शन (GCC) से जनरेट किया जाता है) के सभी सेक्शन को फ़ाइनल आउटपुट फ़ाइल (उदाहरण के लिए, .elf) से मैप करने का तरीका बताती है. यह, किसी प्रोग्राम के हर सेगमेंट के स्टोरेज की जगह और एंट्री पते का भी पता लगाती है. प्लैटफ़ॉर्म के हिसाब से लिंकर स्क्रिप्ट, अक्सर प्लैटफ़ॉर्म के बीएसपी के साथ दी जाती है.

ld टूल को कॉन्फ़िगर करें, ताकि वह src/CMakeLists.txt में अपने प्लैटफ़ॉर्म के CMake टारगेट पर target_link_libraries का इस्तेमाल करके, प्लैटफ़ॉर्म के हिसाब से लिंकर स्क्रिप्ट पर ले जाए:

set(LD_FILE "${CMAKE_CURRENT_SOURCE_DIR}/efr32mg12.ld")

target_link_libraries(openthread-efr32mg12
    PRIVATE
        ot-config
    PUBLIC
        -T${LD_FILE}
        -Wl,--gc-sections -Wl,-Map=$.map
)

टूलचेन का स्टार्टअप कोड

टूलचेन का स्टार्टअप कोड, अक्सर प्लैटफ़ॉर्म के बीएसपी के साथ दिया जाता है. आम तौर पर, यह कोड:

  1. यह, चलाए जा सकने वाले प्रोग्राम के एंट्री फ़ंक्शन (Reset_Handler) को लागू करता है
  2. इंटरप्ट वेक्टर टेबल तय करता है
  3. हीप और स्टैक को शुरू करता है
  4. .data सेक्शन को नॉन-वॉलेटाइल मेमोरी से रैम में कॉपी करता है
  5. ऐप्लिकेशन लॉजिक को लागू करने के लिए, ऐप्लिकेशन के मुख्य फ़ंक्शन पर जाता है

स्टार्टअप कोड (C या असेंबली सोर्स कोड) को आपके प्लैटफ़ॉर्म की openthread-platform-name लाइब्रेरी में शामिल करना ज़रूरी है. ऐसा न करने पर, लिंकर स्क्रिप्ट में इस्तेमाल किए गए कुछ मुख्य वैरिएबल को सही तरीके से कोट नहीं किया जा सकता:

  • src/CMakeLists.txt

उदाहरण: ot-cc2538 में startup-gcc.c - src/CMakeLists.txt

add_library(openthread-cc2538
    alarm.c
...
    startup-gcc.c
...
    system.c
    logging.c
    uart.c
    $
)