Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Thiết lập môi trường tạo dựng

Xem nguồn trên GitHub

Để thúc đẩy sự phát triển mở và miễn phí, Openthread sử dụng CMake trong chuỗi công cụ xây dựng. Hiện tại, chuỗi công cụ này là bắt buộc để chuyển Chuỗi mở rộng sang một nền tảng phần cứng mới.

Trong tương lai, bạn có thể hỗ trợ các công cụ xây dựng khác, nhưng chúng không nằm trong phạm vi của hướng dẫn chuyển đổi này.

Tạo kho lưu trữ mới

Bước đầu tiên là thiết lập ngôi nhà mới cho nền tảng phần cứng của bạn. Trong hướng dẫn này, chúng tôi sẽ tạo một kho lưu trữ mới có tên là ot-efr32. Lớp này chứa lớp trừu tượng nền tảng, SDK của nền tảng phần cứng và một vài tập lệnh hữu ích.

Trong ví dụ này, chúng tôi đã tạo kho lưu trữ SiliconLabs/ot-efr32 trên GitHub và sao chép vào ~/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

Cấu trúc lưu trữ

Để giúp duy trì tính nhất quán với các kho lưu trữ nền tảng hiện có trong tổ chức GitHub để mở chuỗi, bạn có thể muốn định cấu trúc kho lưu trữ của mình như sau:

tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
Thư mục Mô tả
examples tùy chọn Các ứng dụng mẫu
openthread Kho lưu trữ openthread dưới dạng một mô-đun con
script Tập lệnh để tạo, thử nghiệm, phát hiện mã
src Triển khai lớp trừu tượng nền tảng
third_party Vị trí cho mọi nguồn bên thứ ba

Thêm mô-đun con

Bước tiếp theo là thêm openthread và bất kỳ kho lưu trữ bắt buộc nào khác làm mô-đun con

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.

Đối với ví dụ này, chúng tôi sẽ thêm phiên bản thu gọn của SDK Gecko Labs Gecko làm một mô-đun phụ trong 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.

Tập lệnh

Để dễ dàng thực hiện các công việc thông thường, bạn nên tạo một số tập lệnh trong thư mục script. Nội dung này có thể bao gồm các tập lệnh cho các tác vụ như khởi động, tạo, chạy mã liên kết và tập lệnh thử nghiệm để kiểm tra GitHub CI.

Dưới đây là một số ví dụ về tập lệnh chuẩn cho hầu hết các kho lưu trữ nền tảng hiện tại.

bootstrap

Tập lệnh này phải cài đặt tất cả các công cụ và gói mà nền tảng phần cứng của bạn yêu cầu. API này cũng nên thực thi tập lệnh boottrap của openthread để đảm bảo người dùng có mọi thông tin cần thiết để tạo ngăn xếp OpenThread.

Xem tập lệnh khởi động trong ot-efr32 để xem ví dụ.

build

Tập lệnh bản dựng CMake sẽ cho phép người dùng xây dựng ngăn xếp OpenThread cho nền tảng của bạn. Nếu kho lưu trữ của bạn xác định bất kỳ ứng dụng mẫu nào, tập lệnh này cũng nên tạo các ứng dụng đó. Tập lệnh này phải chứa các tùy chọn cấu hình cơ bản của hệ thống, bao gồm mọi định nghĩa macro theo nền tảng cụ thể.

Xem tập lệnh xây dựng trong ot-efr32 để biết ví dụ.

test

Tập lệnh thử nghiệm có thể hữu ích cho người dùng thử nghiệm các thay đổi bằng cách sử dụng bất kỳ thử nghiệm nào bạn đã xác định. Việc này có thể đơn giản như chạy các bản dựng kiểm tra sự ổn định hoặc phức tạp như khởi chạy một bộ thử nghiệm đơn vị.

Trong ot-efr32, tập lệnh chỉ thực thi tập lệnh build cho mọi bảng được hỗ trợ trên mỗi nền tảng efr32.

Xem tập lệnh thử nghiệm trong ot-efr32 để xem ví dụ.

make-pretty

Để duy trì kiểu nhất quán, tập lệnh này phải định dạng mã, tập lệnh và tệp đánh dấu.

Bạn có thể tự định nghĩa tập lệnh này, nhưng dễ nhất là sử dụng tập lệnh make-pretty mà tập lệnh nền tảng hiện có đang sử dụng. Tập lệnh sẽ gọi vào tập lệnh kiểu của openthread và giúp đảm bảo kiểu nhất quán trên tất cả các kho lưu trữ Openthread.

Cấu hình tập lệnh của trình liên kết

Tập lệnh Trình liên kết GNU mô tả cách liên kết tất cả các mục trong tệp nhập (tệp "đối tượng" .o do Bộ sưu tập trình biên dịch GNU (GCC) tạo ra với dữ liệu đầu ra cuối cùng (ví dụ: .elf). Mã này cũng xác định vị trí lưu trữ cho mỗi phân đoạn của một chương trình có thể thực thi, cũng như địa chỉ mục nhập. Tập lệnh trình liên kết dành riêng cho nền tảng thường được cung cấp cùng với LGPD của nền tảng đó.

Định cấu hình công cụ ld để trỏ đến tập lệnh trình liên kết dành riêng cho nền tảng bằng cách sử dụng target_link_libraries trên mục tiêu CMake platform của bạn trong src/CMakeLists.txt:

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
)

Mã khởi động công cụ

Mã khởi động chuỗi công cụ thường được cung cấp cùng với LGPD của nền tảng. Mã này thường là:

  1. Triển khai chức năng nhập (Reset_Handler) của chương trình thực thi
  2. Xác định bảng vectơ ngắt
  3. Khởi chạy vùng nhớ khối xếp và vùng nhớ khối xếp
  4. Sao chép phần .data từ bộ nhớ không biến động đến RAM
  5. Chuyển đến hàm chính của ứng dụng để thực thi logic ứng dụng

Bạn phải thêm mã khởi động (mã C hoặc mã nguồn tập hợp) vào thư viện openthread-platform-name của nền tảng, nếu không, bạn không thể trích dẫn chính xác một số biến chính dùng trong tập lệnh trình liên kết:

  • src/CMakeLists.txt

Ví dụ: startup-gcc.c trong ot-cc2538src/CMakeLists.txt

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