বিল্ড এনভায়রনমেন্ট সেট আপ করুন

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 নির্মাণ, পরীক্ষা, linting জন্য স্ক্রিপ্ট
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 Linker স্ক্রিপ্ট বর্ণনা করে কিভাবে ইনপুট ফাইলের ( .o "অবজেক্ট" ফাইলগুলি GNU কম্পাইলার কালেকশন (GCC) দ্বারা উত্পন্ন) চূড়ান্ত আউটপুট ফাইলে (উদাহরণস্বরূপ, .elf ) সমস্ত বিভাগকে ম্যাপ করতে হয়। এটি একটি এক্সিকিউটেবল প্রোগ্রামের প্রতিটি সেগমেন্টের স্টোরেজ অবস্থানের পাশাপাশি এন্ট্রি ঠিকানাও নির্ধারণ করে। প্ল্যাটফর্ম-নির্দিষ্ট লিঙ্কার স্ক্রিপ্ট প্রায়ই প্ল্যাটফর্মের BSP-এর সাথে প্রদান করা হয়।

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
)

টুলচেন স্টার্টআপ কোড

টুলচেন স্টার্টআপ কোড প্রায়ই প্ল্যাটফর্মের BSP-এর সাথে প্রদান করা হয়। এই কোড সাধারণত:

  1. এক্সিকিউটেবল প্রোগ্রামের এন্ট্রি ফাংশন ( Reset_Handler ) প্রয়োগ করে
  2. ইন্টারপ্ট ভেক্টর টেবিল সংজ্ঞায়িত করে
  3. হিপ এবং স্ট্যাক শুরু করে
  4. .data বিভাগটিকে অ-উদ্বায়ী মেমরি থেকে RAM-তে কপি করে
  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
    $
)
,

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 নির্মাণ, পরীক্ষা, linting জন্য স্ক্রিপ্ট
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 Linker স্ক্রিপ্ট বর্ণনা করে কিভাবে ইনপুট ফাইলের ( .o "অবজেক্ট" ফাইলগুলি GNU কম্পাইলার কালেকশন (GCC) দ্বারা উত্পন্ন) চূড়ান্ত আউটপুট ফাইলে (উদাহরণস্বরূপ, .elf ) সমস্ত বিভাগকে ম্যাপ করতে হয়। এটি একটি এক্সিকিউটেবল প্রোগ্রামের প্রতিটি সেগমেন্টের স্টোরেজ অবস্থানের পাশাপাশি এন্ট্রি ঠিকানাও নির্ধারণ করে। প্ল্যাটফর্ম-নির্দিষ্ট লিঙ্কার স্ক্রিপ্ট প্রায়ই প্ল্যাটফর্মের BSP-এর সাথে প্রদান করা হয়।

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
)

টুলচেন স্টার্টআপ কোড

টুলচেন স্টার্টআপ কোড প্রায়ই প্ল্যাটফর্মের BSP-এর সাথে প্রদান করা হয়। এই কোড সাধারণত:

  1. এক্সিকিউটেবল প্রোগ্রামের এন্ট্রি ফাংশন ( Reset_Handler ) প্রয়োগ করে
  2. ইন্টারপ্ট ভেক্টর টেবিল সংজ্ঞায়িত করে
  3. হিপ এবং স্ট্যাক শুরু করে
  4. .data বিভাগটিকে অ-উদ্বায়ী মেমরি থেকে RAM-তে কপি করে
  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
    $
)