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

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

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

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

एक नया डेटा स्टोर बनाएं

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

इस उदाहरण में, हमने GitHub पर SiliconL कदम/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 में एक सबमॉड्यूल के रूप में सिलिकॉन लैब्स गेको 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). यह किसी एक्ज़ीक्यूटेबल प्रोग्राम के हर सेगमेंट के साथ-साथ, एंट्री पते को भी तय करती है. प्लैटफ़ॉर्म के लिए खास लिंकर स्क्रिप्ट, अक्सर प्लैटफ़ॉर्म के बीएसपी के साथ दी जाती है.

src/CMakeLists.txt में, अपने प्लैटफ़ॉर्म CMake टारगेट पर 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. ऐप्लिकेशन के लॉजिक को लागू करने के लिए, ऐप्लिकेशन के मुख्य फ़ंक्शन पर जाता है

स्टार्टअप कोड (सी या असेंबली सोर्स कोड) को आपके प्लैटफ़ॉर्म की 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
    $
)