1. Giới thiệu
Thread, OpenThread, OTNS và Silk là gì?
Thread là một giao thức mạng lưới không dây không dây công suất thấp dựa trên IP, cho phép giao tiếp an toàn giữa các thiết bị và giữa các thiết bị. Mạng Thread có thể thích ứng với những thay đổi về cấu trúc liên kết để tránh một điểm lỗi.
OpenThread do Google phát hành là một cách triển khai nguồn mở của Thread. Mặc dù có kích thước mã và mức sử dụng bộ nhớ nhỏ, nhưng OpenThread hỗ trợ tất cả tính năng được xác định trong Thông số kỹ thuật luồng.
Bạn có thể sử dụng Trình mô phỏng mạng OpenThread (OTNS) để mô phỏng mạng Thread bằng cách chạy các nút OpenThread mô phỏng trên nền tảng posix. OTNS cung cấp giao diện Web (OTNS-Web) dễ sử dụng để trực quan hoá và vận hành mạng Thread mô phỏng.
Silk là một nền tảng kiểm thử hoàn toàn tự động để xác thực chức năng, tính năng và hiệu suất hệ thống của OpenThread với các thiết bị thực.
Kiến thức bạn sẽ học được
- Khung xác minh chức năng của OpenThread: Silk
- Xây dựng OpenThread cho các thiết bị thực có bật tính năng OTNS
- Sử dụng giao diện OTNS-Web để theo dõi trạng thái của mạng Thread hình thành bằng cách chạy các trường hợp kiểm thử Silk
Lớp học lập trình này tập trung vào việc sử dụng Silk với OTNS. Các tính năng khác của Silk và OTNS sẽ không được đề cập.
Bạn cần có
Phần cứng:
- 6 Bảng mạch bán dẫn Bắc Âu nRF52840 dev
- 6 cáp USB sang Micro-USB để kết nối các bo mạch
- bộ chia USB
Phần mềm:
- Linux x86_64.
- Git.
- Chuyển sang phiên bản 1.11 trở lên.
- Trình duyệt web. OTNS-Web sử dụng trình duyệt web để hiển thị các mô phỏng.
Điều kiện tiên quyết:
2. Điều kiện tiên quyết
Hoàn thành các lớp học lập trình cơ bản trước đây
- Cẩm nang chủ đề. Bạn sẽ cần phải biết các khái niệm cơ bản về Thread để hiểu nội dung được dạy trong Lớp học lập trình này.
- Xây dựng mạng Thread bằng các bảng nRF52840 và OpenThread. Lớp học lập trình này giả định rằng bạn đã xây dựng thành công một mạng Thread.
- Mô phỏng mạng luồng bằng OTNS. Lớp học lập trình này giả định rằng bạn đã chạy thành công công cụ OTNS.
Kiểm tra các điều kiện tiên quyết của gói
Hãy đảm bảo tất cả các điều kiện tiên quyết đều được đáp ứng.
- Chạy
which otns
để kiểm tra xem tệp thực thiotns
có tìm kiếm được trong$PATH
hay không. - Chạy
which wpantund
để đảm bảo bạn có thể sử dụngwpantund
. - Đảm bảo rằng các gói chuỗi công cụ ARM GNU, J-Link và
nrfjprog
đều có sẵn.
Lưu ý: Vui lòng tham khảo các tài liệu được liên kết để xem hướng dẫn về cách thiết lập. Điều kiện tiên quyết số 1 là ở bài viết Mô phỏng mạng Thread bằng OTNS và các trường khác là ở bài viết Tạo mạng Thread bằng các bảng nRF52840 và OpenThread.
3. Thiết lập lụa
Để sao chép Silk và thiết lập môi trường, hãy chạy các lệnh sau trong thư mục nguồn của bạn:
$ git clone https://github.com/openthread/silk.git $ cd silk $ ./bootstrap.sh $ sudo make install-cluster
Xác định tệp cấu hình phần cứng
Để cho phép Silk thu thập các tài nguyên phần cứng kiểm thử hiện có được kết nối với máy của bạn, hãy xác định tệp hwconfig.ini
ở định dạng sau:
[DEFAULT] ClusterID: 0 LayoutCenter: 300, 300 LayoutRadius: 100 [Dev-8A7D] HwModel: Nrf52840 HwRev: 1.0 InterfaceSerialNumber: E1A5012E8A7D USBInterfaceNumber: 1 DutSerial: 683536778
Một công cụ có tên usbinfo
được cài đặt như một phần của Silk. Công cụ này có thể dùng để tìm Số sê-ri của giao diện và Số giao diện USB. DutSerial là số SN được in trên chip hoặc được usbinfo
hiển thị cho các sản phẩm J-Link.
Các trường LayoutCenter
và LayoutRadius
trong phần [DEFAULT]
xác định hình dạng của bố cục khi các thiết bị được hiển thị trên giao diện người dùng web. Việc đặt các biến đó thành các giá trị trình bày ở đây có thể là một điểm khởi đầu tốt.
Theo đó, tệp này xác định một phần cho mỗi thiết bị kiểm thử và cung cấp thông tin phần cứng có liên quan.
4. Biên dịch OpenThread khi bật OTNS
Hình ảnh toà nhà và việc nhấp nháy
Theo mặc định, các thiết bị OpenThread không phát đi các thông báo liên quan đến OTNS. Để cho phép các bảng nhà phát triển phát thông báo trạng thái đến các giao diện cần thiết cho việc trực quan hoá OTNS, hãy chạy lệnh sau trong thư mục nguồn OpenThread để tạo hình ảnh FTD và chuyển đổi hình ảnh đó sang định dạng hex.
$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive $ cd ot-nrf528xx $ ./script/bootstrap $ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON $ cd ./build/bin $ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex
Để cài đặt ROM bảng, hãy làm theo hướng dẫn trong bước 4 của Lớp học lập trình về xây dựng mạng Thread để sử dụng nrfjprog
. Sau đó, kết nối tất cả các bo mạch qua cổng USB nRF với máy chủ. Cùng một bộ cáp USB sang Micro-USB có thể được ngắt kết nối từ các cổng J-Link và được kết nối với các cổng USB nRF của bảng phát triển nRF52840. Do đó, chỉ với 6 cáp này là có thể thực hiện kiểm thử. Để tránh sự phiền hà, hãy sử dụng 12 cáp và kết nối với cả hai cổng.
5. Chạy máy chủ OTNS ở chế độ thực
Việc chạy OTNS với các tham số mặc định cho phép người dùng mô phỏng mạng Thread. Để sử dụng trình phân tích cú pháp làm công cụ trực quan hoá cho một mạng thực tế thực tế, hãy chạy trình chạy bằng:
otns -raw -real -ot-cli otns-silk-proxy
Các đối số này cho OTNS biết rằng thông báo gRPC và UDP mô tả cách trực quan hoá mạng Thread, thay vì chạy nhiều quy trình ot-cli
để mô phỏng mạng. Trình duyệt của bạn sẽ tự động mở trang hiển thị với một canvas trống.
6. Chạy các trường hợp kiểm thử Silk có hỗ trợ OTNS
Silk là một nền tảng kiểm thử hoàn toàn tự động dùng để xác thực chức năng, tính năng và hiệu suất hệ thống của OpenThread với các thiết bị thực. Hướng dẫn trong dự án README trình bày cách sử dụng tệp này.
Tệp silk_run_test.py
nằm tại silk/unit_tests
sẽ mang đến cho bạn một khởi đầu thuận lợi. Silk hỗ trợ OTNS khi chạy một trường hợp kiểm thử. Vì dịch vụ ở chế độ thực OTNS đã chạy cục bộ, nên chúng ta chỉ cần sửa đổi tệp silk_run_test.py
với các vị trí mong muốn cho tệp nhật ký đầu ra, tập lệnh kiểm tra đầu vào và tệp hwconfig.ini
. Đối số -s localhost
yêu cầu Silk gửi thông báo OTNS tới localhost
.
Ví dụ: bạn có thể chạy chương trình kiểm thử có tên ot_test_form_network.py
bằng cách sửa đổi tệp silk_run_test.py
như sau. /opt/openthread_test/
là đường dẫn mặc định mà Silk sử dụng cho đầu ra nhật ký và tệp cấu hình, nhưng bạn có thể dùng đường dẫn bất kỳ.
silk_run_test.py
import datetime
import os
from silk.tests import silk_run
RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'
os.chdir('~/src/silk/silk/tests/')
timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')
run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'
argv = [
'tests/silk_run.py',
'-v2',
'-c', CONFIG_PATH + 'hwconfig.ini',
'-d', run_log_path,
'-s', 'localhost',
'ot_test_form_network.py'
]
silk_run.SilkRunner(argv=argv)
Hình ảnh cấu trúc liên kết của mạng đã tạo sẽ xuất hiện trên giao diện người dùng web của OTNS.
Góc trên cùng bên trái hiện số liệu thống kê về hình ảnh trực quan, phiên bản còn thiếu và tiêu đề thử nghiệm. Góc dưới cùng bên trái có các tuỳ chọn điều khiển cửa sổ nhật ký hiển thị ở bên phải. Ban đầu, các nút được thêm vào nhưng chưa có mạng nào được hình thành. Khi quá trình kiểm thử diễn ra, các chế độ và vai trò của mỗi nút sẽ thay đổi và các liên kết sẽ được tạo.
7. Xin chúc mừng
Xin chúc mừng! Bạn đã chạy thành công một quy trình kiểm thử Silk trên các thiết bị Thread thực và trực quan hoá nó bằng OTNS!
Bạn đã thực thi quy trình kiểm thử Silk bằng các bảng phát triển được cài đặt ROM bằng chương trình cơ sở có hỗ trợ OTNS. Các hội đồng này sẽ báo cáo trạng thái của mình cho một máy chủ Silk. Máy chủ này sẽ giám sát và tổng hợp tất cả thông tin rồi gửi đến dịch vụ OTNS cùng với các thông tin kiểm thử khác. OTNS chạy ở chế độ thực sẽ trực quan hoá mạng Thread trên giao diện web.
Tiếp theo là gì?
Hãy thử chạy các trường hợp kiểm thử OpenThread khác có trong gói Silk.
Tài liệu đọc thêm
Hãy truy cập openthread.io và Silk để tham khảo nhiều tài nguyên OpenThread.