ĐẠ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.
ĐẠ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 TỔNG QUAN VỀ HỆ ĐIỀU HÀNH CONTIKI 1.1 Giới thiệu 1.2 Hệ điều hành Contiki 1.3 Lịch sử phát triển Contiki 1.4 Tại sử dụng Contiki Chương CÁC TÍNH NĂNG CỦA CONTIKI OS .8 2.1 Các tính Contiki OS Chương CẤU TRÚC HỆ ĐIỀU HÀNH CONTIKI 10 3.1 Cấu trúc hệ điều hành Contiki 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 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 Contiki OS 18 Chương SO SÁNH VỚI TINY OS 22 Chương DEMO .24 5.1 Giới thiệu công cụ mô Cooja 24 Chương 1: Tổng quan hệ điều hành Contiki 1.Giới thiệu Các đối tượng thông minh thiết bị đơn giản, nhỏ gọn, giá thành thấp, sử dụng nguồn lượng hạn chế Một đặc điểm bật nút mạng đối tượng thông minh hạn chế tài ngun tính tốn, nguồn lượng cung cấp giá thành sản xuất Với số lượng dày đặc nút cảm biến, việc kiểm nghiêm đánh giá xác hiệu hoạt động thách thức mạng cảm biến khơng dây q trình triển khai thực tế Nhằm khắc phục khó khăn này, nhiều hướng nghiên cứu tập trung vào phát triển công cụ mô cách thức hoạt động nút mạng cảm biến Trong báo cáo trình bày hệ điều hành Contiki 2.Contiki OS Contiki hệ điều hành mã nguồn mở thiết kế cho hệ thống mạng nhúng nói chung mạng lưới thiết bị đo nói riêng Hệ điều hành Contiki phát triển Adam Dunkels đến từ nhóm Embedded Systems 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, nhiều tổ chức trường đại học khác giới Hệ điều hành Contiki thiết kế cho vi điều khiển có nhớ nhỏ, với thơng số 2KB RAM 40KB ROM Nhờ đó, Contiki sử dụng cho hệ thống nhúng Contiki hệ điều hành cho hệ thống mạng, hạn chế nhớ Các ứng dụng Contiki bao gồm hệ thống chiếu sáng đường phố, giám sát âm cho thành phố thông minh, giám sát xạ báo động Contiki 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 cho phép phần mềm phát hành theo giấy phép tích hợp vào sản phẩm độc quyền) Hệ điều hành Contiki lập trình ngơn ngữ C, hoạt động dựa chế event-driven có đặc điểm phù hợp với hệ thống nhúng mạng cảm biến không dây 3.Lịch sử phát triển Contiki Hình 1: Lịch sử phát triển Contiki Contiki bắt đầu nghiên cứu từ năm 2001 phát hành phiên Contiki 1.0 năm 2003 Phiên Contiki 2.4 với nhiều thay đổi, bổ sung phát triển vượt bậc Nhiều chế, ý tưởng Contiki ứng dụng rộng rãi công nghiệp Điển mơ hình uIP phát hành năm 2001 sử dụng hệ thống ứng dụng hàng trăm công ty lĩnh vực hang hải, thông tin vệ tinh, khai thác dầu mỏ, …; mơ hình Protothread cơng bố năm 2005, sử dụng nhiều giải mã kĩ thuật số thiết bị cảm biến rung không dây Tại sử dụng Contiki? Internet Standards: Contiki hệ điều hành mã nguồn mở cho Internet of Things Nó kết nối vi điều khiển cơng suất thấp, chi phí thấp với internet 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 IPv4 với 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 Contiki viết C, tải với Instant Contiki cung cấp mơi trường để phát triển Contiki cịn cung cấp công cụ mô Cooja Hardware Selection: Contiki hoạt động nhiều loại thiết bị không dây có cơng suất thấp, phần cứng dễ dàng mua Active Community Support: Contiki phát triển nhóm nhà nghiên cứu phát triển tồn giới với đóng góp Cisco, Atmel, Redwire LLC, ETH, Thingsqure, SAP nhiều nhà phát triển khác Adam Dunkels of Thingsquare lãnh đạo Chương 2: Các tính Contiki OS 1.Các tính Contiki OS Memory Allocation: Contiki thiết kế cho hệ thống nhỏ, có vài kilobyte nhớ khả dụng Full IP Networking: Contiki cung cấp ngăn xếp mạng IP đầy dủ, với giao thức IP tiêu chuẩn UDP, TCP, HTTP, tiêu chuẩn low-power 6lowpan, RPL CoAP Power Awareness: Contiki thiết kế để hoạt động hệ thống tiêu thu điện cực thấp, hệ thống cần chạy nhiều năm với pin AA Để hỗ trợ phát triển hệ thống tiêu thụ điện thấp, Contiki cung cấp chế để ước tính mức tiêu thụ điện hệ thống hiểu nguồn điện sử dụng đâu The Cooja Network Simulator: Các thiết bị Contiki thường tạo nên mạng không dây lớn Việc phát triển gỡ lỗi phần mềm cho mạng khó Do vậy, Cooja, trình mơ mạng Contiki làm cho điều trở nên dễ dàng cách cung cấp môi trường mô cho phép nhà phát triển xem ứng dụng họ chạy mạng quy mô lớn chi tiết trước đưa phần cứng Hardware Platforms: Contiki chạy loạt tảng nhỏ, từ hệ thống chạy chip 8051 thông qua MSP430 AVR nhiều thiết bị ARM khác Protothreads: Để tiếp kiệm nhớ cung cấp luồng điều khiển tốt Code, Contiki sử dụng chế gọi Protothreads, loại lập trình đa luồng lập trình hướng kiện Coffee flash file system: Contiki cung cấp hệ thống tệp flash nhẹ, gọi Coffee Các chương trình ứng dụng hệ thống tập tin thực nhiều thao tác mở, đóng, đọc,ghi nối vào tập tin flash ngồi mà khơng phải lo lắng việc xóa thành phần flash trước ghi The Contiki shell: Contiki hỗ trợ trình bao dịng lệnh tùy chọn, chưa tập hợp lệnh hữu ích q trình triển khai mã gỡ lỗi hệ thống Contiki Regression Tests: Để đảm bảo Code hoạt động mong đợi, nhà phát triển Contiki sử dụng tập hợp test để kiểm tra khía cạnh quan trọng Contiki trình mơ Cooja The Rime Stack: Trong tình băng thơng mức cao mạng IPv6 stack bị đầy mức, Contiki cung cấp wireless networking stack có tên Rime Build System: Hệ thống xây dựng Contiki giúp dễ dàng biên dịch ứng dụng cho tảng Contiki có sẵn Điều giúp bạn dễ dàng dùng thử ứng dụng nhiều tảng khác Examples: Có nhiều ví dụ Contiki source code tree để giúp cho người bắt đầu Chương trình hiển thị cách tương tác với phần cứng, số chương trình hiển thị network code, chương trình khác trình bày khía cạnh khác hệ thống Contiki trình mơ Cooja tương ứng có sẵn Chương 3: Cấu trúc hệ điều hành Contiki 3.1 Cấu trúc hệ điều hành Contiki Bất kỳ phiên Contiki gồm thư mục là: apps, core, cpu, docs, example, platform tools Thư mục apps: Chứa tập tin nguồn tiện ích phát triển cho Contiki Chúng có sẵn để sử dụng bao gồm thiết lập ứng dụng cho mạng đối tượng thông minh Ứng dụng tiêu biểu thư mục trình duyệt web, máy chủ Web, FTP, email Thư mục Core: Như tên gọi cho thấy, chứa hạt nhân hệ điều hành Contiki Nó chứa khoảng 300 files, gần nửa số tập tin tiêu đề chứa khai báo lại tập tin nguồn chứa cài đặt Thư mục CPU: Chứa xử lý cụ thể cho việc thực chức khác sử dụng hệ điều hành Thư mục Docs: Được sử dụng việc chuẩn bị tài liệu cho Contiki Nó chứa thơng tin sử dụng hệ thống tài liệu điển Doxygen Thư mục Examples: Chứa chương trình ví dụ đơn giản bắt đầu với “Hello-world”, bước hướng tới lập trình ứng dụng Contiki Thư mục Platform: Bao gồm thông tin cụ thể liên quan đến tảng phần cứng cho nút cảm biến ESB, Sky mote,… Thư mục Tools: Là thư mục chứa cơng cụ phần mềm đặc biệt Ví dụ 'Cooja' chương trình Java để mơ cho Contiki.Thư mục chứa công cụ cho tảng phần cứng cụ thể 3.2 Kiến trúc phân lớp hệ điều hành Contiki 10 hệ thống nhúng 16 bit Do vậy, up thiết kế dựa ngôn ngữ C với mục tiêu tối ưu hóa tuyệt đối đặc tính cần thiết cho stack TCP/IP đầy đủ uIP hoạt động với giao diện mạng bao gồm giao thức: IP, ICMP, UDP, TCP Ngăn xếp RIME: Rime stack cung cấp cấu trúc phân tầng giao thức mạng cảm biến không dây, từ phát quảng bá đơn giản tới việc định tuyến rắc rối toàn mạng Rime triển khai giao thức phức tạp, với nhiều phần, phần lại gồm module phức tạp tạo nên từ module nhỏ lẻ đơn giản Hình 4: Tổ chức RIME Rime stack cung cấp cấu trúc phân tầng giao thức mạng cảm biến không dây, từ phát quảng bá đơn giản tới việc định tuyến rắc rối toàn mạng Rime triển khai giao thức phức tạp, với nhiều phần, phần lại gồm 14 module phức tạp tạo nên từ module nhỏ lẻ đơn giản Toàn thể tổ chức giao thức Rime bao gồm : - Abc: phát sóng quảng bá, gửi gói tin qua trình điều khiển vơ tuyến nhận tất gói tin từ trình điều khiển vơ tuyến khác - Broadcast: phát sóng xác định, thêm địa người gửi để gửi gói liệu chuyển vào module abc - Unicast: module cho biết thêm địa đích cho gói tin truyền cho khối phát sóng Ở bên nhận, địa đích gói tin khơng phù hợp với địa nút gói tin bị loại bỏ - Stunicast: unicast “cứng đầu “, hỏi để gửi gói tin đến nút, gửi nhiều lần với khoảng thời gian định yêu cầu dừng lại - Runicast: unicast đáng tin cậy, gửi gói tin cách sử dụng stunicast chờ gói tin xác nhận Khi nhận được, dừng việc truyền tải liên tục gói tin Một số lượng tối đa gói tin truyền lại phải xác định, để tránh gửi vô hạn - Polite ipolite: hai module gần giống hệt nhau, gói tin gửi khung thời gian định, module chờ nửa thời gian, kiểm tra xem có nhận gói tin định gửi hay khơng Nếu trùng, gói tin khơng gửi đi, khơng gửi gói tin Điều hữu ích cho kỹ thuật flooding để tránh việc truyền lại không cần thiết - Multihop: module đòi hỏi chức bảng định tuyến, định gửi gói tin, yêu cầu bảng định tuyến cho hop gửi gói tin đến cách unicast .Khi nhận gói tin, hop đích, gói tin truyền tới lớp trên, khơng 15 u cầu thơng tin hop từ bảng định tuyến chuyển tiếp gói tin đến Khi gửi gói, ứng dụng lưu gói vào nhớ đệm gọi hàm xử lý liên quan để gửi gói Khi nhận gói, gói nhận được lưu đệm gói, đồng thời RIME stack gọi hàm “callback” tương ứng để xử lý gói đầu vào 3.4 Protothreads Protothreads cấu trúc code cho phép hệ thống chạy hoạt động khác đợi điều xảy Protothreads khai thác trực tiếp hệ điều hành contiki, ngồi sử dụng tốt lĩnh vực khác Protothread cho phép sử dụng hàm có C giống threads mà khơng bị tràn nhớ Nó giảm dung lượng nhớ điều quan trọng hệ thống có nhớ khiêm tốn sử dụng Contiki Protothread hàm C Hàm bắt đầu kết thúc lệnh PT_BEGIN() và PT_END() Với Protothreads, chương trình cấu trúc theo Protothreads thực hiệu ngôn ngữ lập trình C mà khơng cần ngơn ngữ lập trình bậc thấp hay thay đổi với trình biên dịch Protothreads kết hợp chế Multi-threaded Event-driven, Gồm loại Protothreads bản: - PT_INIT(pt): Khởi tạo Protothread - PT_BEGIN (pt): bắt đầu Protothread - PT_WAIT_UNTIL (pt, điều kiện): điều khiển đợi kiện - PT_END (pt): kết thúc Protothread 16 Hình 5: Các hàm protothread 3.5 Protothreads in Processes Trong Contiki, Protothread sử dụ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 khỏi process PROCESS_WAIT_EVENT():Đợi event PROCESS_WAIT_EVENT_UNTIL():Đợi event có điều kiện PROCESS_YIELD():Tương tự PROCESS_WAIT_EVENT() PROCESS_WAIT_UNTIL():Chờ điều kiện, khơng thực PROCESS_PAUSE(): Tạm dừng process thực 17 3.6.Một số thư viện Contiki OS Hình 6: Random Number Library Thư viện Random Number sử dụng chương trình Contiki hệ thống Contiki để lấy số ngẫu nhiên Thư viện thường triển khai cách sử dụng trình tạo số ngẫu nhiên cung cấp thư viện C hệ thống thời gian chạy trình biên dịch Void randonm_init(unsigned short seed): Khởi tạo tạo số ngẫu nhiên Unsigned short random_rand(void): Nhận số ngẫu nhiên từ đến RANDOM_RAN_MAX API cung cấp hai hàm: random_init() gọi hệ thống trình khởi động random_rand(),RANDOM_RAND_MAX xác định 65535 18 Hình 7: LEDs Library ledv: Các vector LED độc lập: #define LEDS_GREEN #define LEDS_YELLOW #define LEDS_RED #define LEDS_ALL leds_on(): Lấy đối số vector đèn LED ledv bật đèn LED đặt vetor leds_off(): Lấy đối số LED ledv tắt 19 led_invert(): Đảo ngược trạng thái đèn LED void leds_init(void): Khởi tạo trình điều khiển đèn LED leds_get(void): Nhận trạng thái đèn LED leds_on(unsigned char ledv): Bật đèn LED leds_off (unsigned char ledv): Tắt đèn LED led_toggle (unsigned char ledv): Chuyển đổi trạng thái đèn LED Hình 8: Timer Library 20 Thư viện Contiki timer cung cấp hàm để tinh chỉnh, khởi động lại timer, kiểm tra timer kết thúc chưa Một ứng dụng phải kiểm tra timers kết thúc chưa tay, khơng làm tự động Các thư viện timer sử dụng clock_time() để có thời gian hệ thống Một timer khái báo struct timer truy cập thông qua địa trỏ Void timer_set(struct timer *t, clock_time_t interval): Khởi tạo timer Void timer_reset(struct timer *t) : Khởi động lại timer hết hạn Void timer_restart (struct timer *t) : Khởi động lại timer Int timer_expired(struct timer *t) : Kiểm tra timer có hết hạn khơng Clock_time_t timer_remaining(struct timer *t): Trả giá trị lại đến timer hết hạn 21 Chương 4: So sánh với Tiny OS Hình 9:Tóm tắt hệ điều hành Hệ điều hành TinyOS phát triển UC Berkeley, hệ điều hành nhúng cho đối tượng thơng minh sớm Nó cho phép kiến trúc mềm dẻo tiêu thụ tài nguyên thấp, việc lập trình TinyOS dựa thành phần kết nối với để tạo ứng dụng thời điểm thiết kế Những tương tác thành phần xảy theo hai chiều, tức thành phần sử dụng lệnh cung cấp thành phần khác; ngồi ra, thành phần báo hiệu kiện tới thành phần khác Mơ hình thực thi TinyOS bao gồm ngắt (interrupt) nhiệm vụ (task) Các nhiệm vụ TinyOS viết theo kiểu run-to- 22 completion (chạy đến hồn thành)và chúng khơng thể giành quyền ưu tiên trước (preempt) tạm ngưng (suspend) Vì lý này, việc xuất nhập (I/Os) chia thành giai đoạn Tức yêu cầu (request) thực vào lúc kết thúc nhiệm vụ tín hiệu (signal) gọi đến bắt đầu nhiệm vụ Để hỗ trợ tốt cho kiến trúc thành phần mơ hình thực thi TinyOS ngơn ngữ nesC thiết kế cho việc lập trình dựa TinyOS Hình 10: So sánh Contiki OS Tiny OS Trong hệ thống tĩnh, người lập trình ứng dụng phải định tài nguyên thời điểm thiết kế (Tiny OS), mặt khác hệ thống động (Contiki OS) người lập trình ứng dụng định vị lại tài nguyên thời điểm chạy ứng dụng Đơn khối hay module hóa: Một ứng dụng biên dịch với hệ điều hành khối chương trình (Tiny OS) biên dịch thành phần chương trình riêng lẻ mà chúng nạp nhân hệ điều hành (Contiki OS) 23 Chương 5:Chạy mô triển khai thiết bị thật 5.1.Giới thiệu công cụ mô Cooja Cooja phần mềm mô hệ thống mạng tích hợp hệ điều hành Contiki Công cụ cho phép người sử dụng thay đổi thơng số vị trí, phạm vi kết nối, tỉ lệ truyền gói thành cơng,… Nhờ người sử dụng mơ đánh giá kết cách hiệu Hình 7: Giao diện mơ Cooja Từ hình nhận thấy giao diện chương trình dễ sử dụng, với hình cho phép hiển thị trình hoạt động node, có khả thay đổi vị trí, phạm vi phủ sóng node Bên cạnh Cooja cung cấp số cửa sổ theo dõi kiện Log listener, Radio listener cho phép người sử dụng tìm kiếm kiện theo số thơng số định, theo dõi giao tiếp số node cụ thể, ….Có thể nói, công cụ mô trực quan dễ sử dụng, phục vụ tốt cho q trình nghiên cứu, mơ phỏng, đánh giá 24 Network: Hiển thị vị trí node mạng, trực quan hóa trạng thái nút bao gồm đèn LED, địa chỉ,… Simulation Control: Bảng sử dụng để bắt đầu, tạm dừng, tải lại thực bước mơ phỏng, hiển thị thời gian thực tốc độ mô Notes: Đây notepad đơn giản để ghi mô Mote output: Hiển thị tất đầu giao diện nối tiếp nút, kích hoạt cửa sổ đầu Mote cho nút mô Timeline: Dịng thời gian mơ nơi thơng báo kiện thay đổi kênh, đèn LED thay đổi, … hiển thị Hình 11: Cấu trúc chương trình 25 ... trường đại học khác giới Hệ điều hành Contiki thiết kế cho vi điều khiển có nhớ nhỏ, với thông số 2KB RAM 40KB ROM Nhờ đó, Contiki sử dụng cho hệ thống nhúng Contiki hệ điều hành cho hệ thống mạng, ... Contiki hệ điều hành mã nguồn mở thiết kế cho hệ thống mạng nhúng nói chung mạng lưới thiết bị đo nói riêng Hệ điều hành Contiki phát triển Adam Dunkels đến từ nhóm Embedded Systems Viện Khoa học. .. hoạt động hệ thống tiêu thu điện cực thấp, hệ thống cần chạy nhiều năm với pin AA Để hỗ trợ phát triển hệ thống tiêu thụ điện thấp, Contiki cung cấp chế để ước tính mức tiêu thụ điện hệ thống hiểu