ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG ĐỒ ÁN MÔN HỌC HỆ THỐNG NHÚNG MẠNG KHÔNG DÂY Giảng viên hướng dẫn Đặng Lê Bảo Chương Lớp NT131 M12 MMCL EN Thành viên Đỗ Phương Thảo 18521420 Võ Duy Phúc – 19522046 Nguyễn Minh Thọ 19522293 Năm học 2021 2022 MỤC LỤC Chương 1 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH CONTIKI 4 1 1 Giới thiệu 4 1 2 Hệ điều hành Contiki 5 1 3 Lịch sử phát triển của Contiki 6 1 4 Tại sao sử dụng Contiki 7 Chương 2 CÁC TÍNH NĂNG CỦA.
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG
ĐỒ ÁN MÔN HỌC
HỆ THỐNG NHÚNG MẠNG KHÔNG DÂY
Giảng viên hướng dẫn: Đặng Lê Bảo Chương
Lớp: NT131.M12.MMCL.EN
Thành viên:
Đỗ Phương Thảo - 18521420
Võ Duy Phúc – 19522046 Nguyễn Minh Thọ - 19522293
Trang 3MỤC LỤC
Chương 1 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH CONTIKI 4
1.1 Giới thiệu 4
1.2 Hệ điều hành Contiki 5
1.3 Lịch sử phát triển của Contiki 6
1.4 Tại sao sử dụng Contiki 7
Chương 2 CÁC TÍNH NĂNG CỦA CONTIKI OS 8
2.1 Các tính năng của Contiki OS 8
Chương 3 CẤU TRÚC HỆ ĐIỀU HÀNH CONTIKI 10
3.1 Cấu trúc hệ điều hành Contiki 9
3.2 Kiến trúc phân lớp hệ điều hành Contiki 11
3.3 Ngăn xếp truyền thông trong hệ điều hành Contiki 12
3.4 Protothread 16
3.5 Protothread in processes 17
3.6 Một số thư viện trong Contiki OS 18
Chương 4 SO SÁNH VỚI TINY OS 22
Chương 5 DEMO 24
5.1 Giới thiệu về công cụ mô phỏng Cooja 24
Trang 4Chương 1: Tổng quan về hệ điều hành Contiki
1.Giới thiệu
Các đối tượng thông minh là các thiết bị đơn giản, nhỏ gọn, giá thành thấp, sử dụng nguồn năng lượng hạn chế Một trong những đặc điểm nổi bật của nút mạng các đối tượng thông minh là sự hạn chế về tài nguyên tính toán, nguồn năng lượng cung cấp và giá thành sản xuất
Với số lượng dày đặc các nút cảm biến, việc kiểm nghiêm và đánh giá chính xác hiệu quả hoạt động là một trong những thách thức của mạng cảm biến không dây trong quá trình triển khai thực tế Nhằm khắc phục những khókhăn này, nhiều hướng nghiên cứu đã tập trung vào phát triển những công cụ
mô phỏng cách thức hoạt động các nút trong mạng cảm biến Trong bài báo cáo này sẽ trình bày về hệ điều hành Contiki
Trang 52.Contiki OS
Contiki là một hệ điều hành mã nguồn mở được thiết kế cho các hệ thống mạng nhúng nói chung và mạng lưới các thiết bị đo nói riêng Hệ điều hành Contiki được phát triển bởi Adam Dunkels đến từ nhóm Embedded Systems của Viện Khoa học Máy tính Thụy Điển Nhóm phát triển Contiki gồm nhiều thành viên đến từ SICS, CISCO, cùng nhiều tổ chức và các trường đại học khác trên thế giới Hệ điều hành Contiki được thiết kế cho các vi điều khiển có bộ nhớ nhỏ, với thông số 2KB RAM và 40KB ROM Nhờ đó,
Contiki có thể được sử dụng cho các hệ thống nhúng
Contiki là một hệ điều hành cho các hệ thống mạng, hạn chế bộ nhớ Các ứng dụng Contiki bao gồm hệ thống chiếu sáng đường phố, giám sát âm thanh cho thành phố thông minh, giám sát bức xạ và báo động Contiki được phát hành theo giấy phép BSD (Một loại giấy phép cho phép sử dụng độc quyền và cho phép phần mềm được phát hành theo giấy phép được tích hợp vào các sản phẩm độc quyền) Hệ điều hành Contiki được lập trình bằng ngôn
Trang 6ngữ C, hoạt động dựa trên cơ chế event-driven và có những đặc điểm phù hợpvới các hệ thống nhúng và mạng cảm biến không dây.
3.Lịch sử phát triển của Contiki
Hình 1: Lịch sử phát triển ContikiContiki bắt đầu được nghiên cứu từ năm 2001 và phát hành phiên bản đầu tiên Contiki 1.0 năm 2003 Phiên bản hiện nay của Contiki là 2.4 với nhiều thay đổi, bổ sung và phát triển vượt bậc Nhiều cơ chế, ý tưởng Contiki
đã được ứng dụng rộng rãi trong công nghiệp Điển hình như mô hình uIP được phát hành năm 2001 đã được sử dụng trong hệ thống ứng dụng của hàngtrăm công ty trong các lĩnh vực hang hải, thông tin vệ tinh, khai thác dầu mỏ,
…; mô hình Protothread được công bố đầu tiên năm 2005, sử dụng nhiều trong bộ giải mã kĩ thuật số và thiết bị cảm biến rung không dây
Trang 7Internet Standards: Contiki là một hệ điều hành mã nguồn mở cho Internet of Things Nó kết nối các bộ vi điều khiển công suất thấp, chi phí thấp với internet và cung cung cấp mạng giao tiếp công suất thấp mạnh mẽ Contiki hỗ trợ đầy đủ tiêu chuẩn IPv6 và IPv4 cùng với các tiêu chuẩn không dây công suất thấp gần đây: 6lowpan, RPL, CoAP.
Rapid Development: Các ứng dụng của Contiki được viết bằng C, tải
về với Instant Contiki cung cấp môi trường để phát triển Contiki còn cung cấp những công cụ mô phỏng như Cooja
Hardware Selection: Contiki hoạt động trên nhiều loại thiết bị không dây có công suất thấp, các phần cứng có thể dễ dàng mua được
Active Community Support: Contiki được phát triển bởi một nhóm các nhà nghiên cứu phát triển trên toàn thế giới với sự đóng góp của Cisco,
Atmel, Redwire LLC, ETH, Thingsqure, SAP và nhiều nhà phát triển khác doAdam Dunkels of Thingsquare lãnh đạo
Chương 2: Các tính năng của Contiki OS
Trang 81.Các tính năng của Contiki OS
Memory Allocation: Contiki được thiết kế cho các hệ thống nhỏ, chỉ cóvài kilobyte bộ nhớ khả dụng
Full IP Networking: Contiki cung cấp một ngăn xếp mạng IP đầy dủ, với các giao thức IP tiêu chuẩn như UDP, TCP, HTTP, ngoài các tiêu chuẩn low-power như 6lowpan, RPL và CoAP
Power Awareness: Contiki thiết kế để hoạt động trong các hệ thống tiêu thu điện năng cực thấp, các hệ thống có thể cần chạy trong nhiều năm vớipin AA Để hỗ trợ sự phát triển của các hệ thống tiêu thụ điện năng thấp, Contiki cung cấp các cơ chế để ước tính mức tiêu thụ điện năng của hệ thống
và hiểu được nguồn điện đã được sử dụng ở đâu
The Cooja Network Simulator: Các thiết bị Contiki thường tạo nên các mạng không dây lớn Việc phát triển và gỡ lỗi phần mềm cho các mạng như vậy rất khó Do vậy, Cooja, trình mô phỏng mạng Contiki làm cho điều này trở nên dễ dàng hơn bằng cách cung cấp một môi trường mô phỏng cho phép các nhà phát triển xem các ứng dụng của họ chạy trong các mạng quy mô lớn hoặc cực kỳ chi tiết trước khi đưa ra phần cứng
Hardware Platforms: Contiki chạy trên một loạt các nền tảng nhỏ, từ các hệ thống chạy trên chip 8051 thông qua MSP430 và AVR cho đến nhiều thiết bị ARM khác nhau
Protothreads: Để tiếp kiệm bộ nhớ và cung cấp một luồng điều khiển tốt trong Code, Contiki sử dụng cơ chế gọi là Protothreads, nó là loại lập trình
đa luồng và lập trình hướng sự kiện
Coffee flash file system: Contiki cung cấp hệ thống tệp flash nhẹ, gọi làCoffee Các chương trình ứng dụng hệ thống tập tin này có thể thực hiện
Trang 9nhiều thao tác mở, đóng, đọc,ghi và nối vào các tập tin trên flash ngoài mà không phải lo lắng về việc xóa các thành phần flash trước khi ghi.
The Contiki shell: Contiki hỗ trợ một trình bao dòng lệnh tùy chọn, chưa tập hợp các lệnh hữu ích trong quá trình triển khai mã và gỡ lỗi trong hệ thống Contiki
Regression Tests: Để đảm bảo rằng Code hoạt động như mong đợi, các nhà phát triển Contiki sử dụng một tập hợp các bài test để kiểm tra các khía cạnh quan trọng của Contiki trong trình mô phỏng Cooja
The Rime Stack: Trong các tình huống khi băng thông ở mức cao hoặc khi mạng IPv6 stack bị đầy quá mức, Contiki cung cấp wireless networking stack có tên là Rime
Build System: Hệ thống xây dựng Contiki giúp dễ dàng biên dịch các ứng dụng cho bất kỳ nền tảng Contiki nào có sẵn Điều này giúp bạn dễ dàng dùng thử các ứng dụng trên nhiều nền tảng khác nhau
Examples: Có rất nhiều ví dụ trong Contiki source code tree để giúp cho những người mới bắt đầu Chương trình hiển thị cách tương tác với phần cứng, một số chương trình hiển thị network code, và chương trình khác trình bày các khía cạnh khác nhau của hệ thống Contiki và trình mô phỏng Cooja tương ứng có sẵn
Chương 3: Cấu trúc hệ điều hành Contiki
Trang 103.1 Cấu trúc hệ điều hành Contiki
Bất kỳ phiên bản Contiki nào cũng gồm 7 thư mục là: apps, core, cpu,docs, example, platform và tools
Thư mục apps: Chứa các tập tin nguồn của các tiện ích phát triển cho
Contiki Chúng có sẵn để sử dụng và bao gồm các thiết lập cơ bản của cácứng dụng cho mạng các đối tượng thông minh Ứng dụng tiêu biểu trongthư mục này là trình duyệt web, máy chủ Web, FTP, email
Thư mục Core: Như tên gọi cho thấy, nó chứa các hạt nhân của hệ điều
hành Contiki Nó chứa khoảng 300 files, gần một nửa trong số đó là tập tintiêu đề chứa các khai báo và còn lại là các tập tin nguồn chứa cài đặt
Thư mục CPU: Chứa các bộ xử lý cụ thể cho việc thực hiện các chức
năng khác nhau được sử dụng trong hệ điều hành
Thư mục Docs: Được sử dụng trong việc chuẩn bị tài liệu cho Contiki Nó
chứa thông tin sẽ được sử dụng bởi một hệ thống tài liệu điển hình nhưDoxygen
Thư mục Examples: Chứa các chương trình ví dụ đơn giản bắt đầu với
“Hello-world”, như là bước đầu tiên hướng tới lập trình ứng dụng trênContiki
Thư mục Platform: Bao gồm thông tin cụ thể liên quan đến nền tảng
phần cứng cho các nút cảm biến như ESB, Sky mote,…
Thư mục Tools: Là thư mục chứa các công cụ phần mềm đặc biệt Ví dụ
như 'Cooja' là một chương trình Java để mô phỏng cho Contiki.Thư mụcnày cũng chứa các công cụ cho các nền tảng phần cứng cụ thể
3.2 Kiến trúc phân lớp hệ điều hành Contiki.
Trang 11Hệ điều hành Contiki theo kiểu kiến trúc module Nhân Contiki bao gồm một bộ lập lịch sự kiện làm nhiệm vụ gửi đi các sự kiện tới các tiến trình đang chạy Các tiến trình thực thi được kích hoạt bằng các sự kiện gửi đi bởi hạt nhân tới các tiến trình hoặc bằng cơ chế hỏi vòng Cơ chế hỏi vòng được
sử dụng để tránh các điều kiện tranh đua (race conditions) Bất kì sự kiện nào
đã được lập lịch sẽ chạy cho đến khi nó hoàn thành
Có hai loại sự kiện được hỗ trợ bởi hệ điều hành Contiki: Các sự kiệnđồng bộ và không đồng bộ Sự kiện đồng bộ được gửi đi ngay lập tức tới tiếntrình đích bởi vì nó đã được lập lịch Đối với các sự kiện không đồng bộ thìchậm hơn, thủ tục gọi được xếp vào hàng đợi và sau đó cũng được gửi đếntiến trình đích Cơ chế hỏi vòng được sử dụng trong Contiki có thể xem như
là các sự kiện có ưu tiên cao nó đã được lập lịch giữa mỗi sự kiện không đồng
bộ Khi một hỏi vòng đã được lập lịch thì tất cả các tiến trình đó thực hiệnmột trình xử lý hỏi vòng được gọi là thứ tự ưu tiên của chúng
Trang 12Hình 2: Kiến trúc hệ điều hành Contiki.
3.3 Ngăn xếp truyền thông trong hệ điều hành Contiki
Contiki cơ bản gồm 2 stack truyền thông là uIP với TCP/UDP, IPV4,IPV6 giúp hệ điều hành truyền thông qua mạng Internet và Rime được thiết
kế cho những liên kết không dây năng lượng thấp, nó cung cấp một phạm virộng lớn các truyền thông nguyên thủy từ những cách thức quảng bá nội vùnghiệu quả cao đến flooding dữ liệu đáng tin cậy trên nhiều nút mạng
Trang 13Hình 3: Kiến trúc giao thức mạng
Ngăn xếp uIP: Trong những năm gần đây, cùng với sự thành công củaInternet, giao thức TCP/IP đã trở thành tiêu chuẩn toàn cầu trong lĩnh vựctruyền thông, TCP/IP là giao thức cơ bản được sử dụng cho những mục đíchtruyền tải các trang web, gửi và nhận email, truyền dữ liệu…Các hệ thốngnhúng sử dụng TCP/IP có khả năng kết nối những hệ thống trực tiếp đến mộtmạng nội bộ, hoặc thậm chí là một mạng toàn cầu
Những thiết bị nhúng có khả năng đáp ứng được đầy đủ những đặc tínhcủaTCP/IP sẽ là những thiết bị có tính ưu việt, có khả năng giao tiếp một cáchđầy đủ với tất cả các thiết bị khác trong mạng
Nhưng, việc triển khai giao thức TCP/IP truyền thống đòi hỏi quá nhiềutài nguyên gồm cả dung lượng code và bộ nhớ sử dụng, không thể được đáp
Trang 14trong các hệ thống nhúng 8 hoặc 16 bit Do vậy, up được thiết kế dựa trên ngôn ngữ C với mục tiêu tối ưu hóa tuyệt đối các đặc tính cần thiết cho một stack TCP/IP đầy đủ uIP chỉ có thể hoạt động với một giao diện mạng duy nhất bao gồm các giao thức: IP, ICMP, UDP, TCP.
Ngăn xếp RIME: Rime stack cung cấp một cấu trúc phân tầng của giaothức mạng cảm biến không dây, từ một bộ phát quảng bá đơn giản tới việcđịnh tuyến rắc rối trong toàn mạng Rime triển khai một giao thức phức tạp,với nhiều phần, mỗi phần lại gồm những module phức tạp được tạo nên từnhững module nhỏ lẻ đơn giản hơn
Hình 4: Tổ chức của RIME
Rime stack cung cấp một cấu trúc phân tầng của giao thức mạng cảm biếnkhông dây, từ một bộ phát quảng bá đơn giản tới việc định tuyến rắc rối trong toàn
mạng Rime triển khai một giao thức phức tạp, với nhiều phần, mỗi phần lại gồm
Trang 15những module phức tạp được tạo nên từ những module nhỏ lẻ đơn giản hơn Toàn thể tổ chức của giao thức Rime bao gồm :
- Abc: phát sóng quảng bá, nó chỉ gửi một gói tin qua các trình điều
khiển vô tuyến và nhận tất cả các gói tin từ các trình điều khiển vô tuyến khác
- Broadcast: phát sóng xác định, nó thêm địa chỉ người gửi để gửi đi
các gói dữ liệu và chuyển nó vào module abc
- Unicast: module này cho biết thêm một địa chỉ đích cho các gói tin
được truyền cho khối phát sóng Ở bên nhận, nếu địa chỉ đích của gói tin không phù hợp với địa chỉ của nút thì gói tin đó sẽ bị loại bỏ
- Stunicast: là các unicast “cứng đầu “, khi được hỏi để gửi một gói tin
đến một nút, nó sẽ gửi nhiều lần với một khoảng thời gian nhất định cho đến khi yêu cầu dừng lại
- Runicast: là các unicast đáng tin cậy, nó sẽ gửi một gói tin bằng cách
sử dụng các stunicast chờ một gói tin xác nhận Khi nhận được, nó dừng việc truyền tải liên tục của các gói tin Một số lượng tối đa các góitin truyền lại phải được xác định, để tránh gửi vô hạn
- Polite và ipolite: hai module gần như giống hệt nhau, khi một gói tin
đã được gửi đi trong một khung thời gian nhất định, module chờ một nửa thời gian, kiểm tra xem nó có nhận được gói tin nó định gửi hay không Nếu trùng, gói tin không được gửi đi, nếu không nó sẽ gửi gói tin Điều này rất hữu ích cho các kỹ thuật flooding để tránh việc truyền lại không cần thiết
- Multihop: module này đòi hỏi chức năng bảng định tuyến, và khi định
gửi một gói tin, nó yêu cầu bảng định tuyến cho hop tiếp theo và gửi gói tin đến nó bằng cách unicast. Khi nó nhận được một gói tin, nếu
Trang 16yêu cầu thông tin về hop tiếp theo từ bảng định tuyến và chuyển tiếp các gói tin đến nó Khi gửi gói, các ứng dụng lưu gói vào bộ nhớ đệm
và gọi các hàm xử lý liên quan để gửi gói đi Khi nhận được một gói, gói nhận được được lưu trong bộ đệm gói, đồng thời RIME stack gọi các hàm “callback” tương ứng để xử lý gói đầu vào
3.4 Protothreads
Protothreads là một cấu trúc code cho phép hệ thống chạy các hoạtđộng khác khi đợi một điều gì đó xảy ra Protothreads ở đây khai thác trựctiếp trong hệ điều hành contiki, ngoài ra nó được sử dụng tốt trong các lĩnhvực khác
Protothread cho phép sử dụng các hàm có trong C giống như trongthreads mà không bị tràn bộ nhớ Nó giảm dung lượng bộ nhớ và là điều rấtquan trọng trong các hệ thống có bộ nhớ khiêm tốn sử dụng Contiki
Protothread là 1 hàm C Hàm này bắt đầu và kết thúc bởi 2 lệnh
PT_BEGIN() và PT_END()
Với Protothreads, chương trình được cấu trúc theo tuần tự Protothreads
có thể thực hiện được hiệu quả trong ngôn ngữ lập trình C mà không cần bất
kỳ ngôn ngữ lập trình bậc thấp hay các thay đổi nào với trình biên dịch
Protothreads là sự kết hợp giữa cơ chế Multi-threaded và Event-driven,Gồm 4 loại Protothreads cơ bản:
- PT_INIT(pt): Khởi tạo một Protothread
- PT_BEGIN (pt): bắt đầu một Protothread
- PT_WAIT_UNTIL (pt, điều kiện): điều khiển đợi một sự kiện
- PT_END (pt): kết thúc một Protothread
Trang 17Hình 5: Các hàm của protothread
3.5 Protothreads in Processes
Trong Contiki, Protothread được sử dụng dưới những câu lệnh riêng PROCESS_BEGIN(): Khai báo bắt đầu process protothread
PROCESS_END():Khai báo kết thúc process protothread
PROCESS_EXIT():Thoát ra khỏi process
PROCESS_WAIT_EVENT():Đợi 1 event nào đó
PROCESS_WAIT_EVENT_UNTIL():Đợi 1 event nào đó nhưng cóđiều kiện
PROCESS_YIELD():Tương tự như PROCESS_WAIT_EVENT()PROCESS_WAIT_UNTIL():Chờ 1 điều kiện, có thể không thực hiệnPROCESS_PAUSE(): Tạm dừng process đang thực hiện