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

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.

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

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 Linker स्क्रिप्ट इनपुट फ़ाइलों (.o "ऑब्जेक्ट" फ़ाइलों) (GNU कंपाइलर कलेक्शन (GCC) से जनरेट हुई फ़ाइलों) (जैसे, .elf) और सभी एंट्री को एक्ज़ीक्यूटेबल प्रोग्राम के हर सेगमेंट की स्टोरेज की जगह और एंट्री के पते को मैप करने का तरीका बताती है. प्लैटफ़ॉर्म के हिसाब से लिंक करने वाली स्क्रिप्ट अक्सर प्लैटफ़ॉर्म की बीएसपी से मिलती है.

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

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
    $
)