2023-12-28 11:35:06 +00:00
|
|
|
---
|
|
|
|
tags:
|
|
|
|
- linux
|
|
|
|
- iot
|
|
|
|
---
|
2023-12-22 12:45:16 +00:00
|
|
|
- Linux-based
|
|
|
|
- Small memory (~20 kB)
|
2023-12-28 11:35:06 +00:00
|
|
|
- Wide network stacks #net
|
2023-12-22 12:45:16 +00:00
|
|
|
- TCP/IP
|
|
|
|
- IPv6
|
|
|
|
- 6LoWPAN
|
|
|
|
- IPv6-based
|
|
|
|
- Header compression
|
|
|
|
- CoAP
|
|
|
|
- Application layer protocol
|
|
|
|
- RPL
|
|
|
|
- Routing for low power
|
|
|
|
- Lossy networks
|
|
|
|
- SSL/TLS
|
|
|
|
- RIME
|
|
|
|
- Own communication solution
|
|
|
|
- Instant Contiki
|
|
|
|
- Dev environment
|
|
|
|
- Whole VM
|
|
|
|
|
|
|
|
# Functional
|
|
|
|
- Separates basic system from dynamically loadable and programmable services
|
|
|
|
- Processes
|
|
|
|
- Event-driven kernel
|
|
|
|
- Multi-threading supported by library
|
|
|
|
- Hybrid OS
|
|
|
|
- No hardware abstractions
|
|
|
|
- Services communicate by posting kernel events
|
|
|
|
- Refer to stack with pointer to process state
|
|
|
|
- Each service has state in private memory space
|
|
|
|
|
|
|
|
![](../../img/iot-os-stack.png)
|
|
|
|
|
|
|
|
# Process
|
|
|
|
- Cooperative
|
|
|
|
- Code running sequentially with respect to other coop code
|
|
|
|
- Pre-emptive
|
|
|
|
- Temporarily stops cooperative code
|
|
|
|
- Normal processes run cooperatively
|
|
|
|
- Interrupts and real-time timers run pre-emptively
|
|
|
|
- Higher priority
|
|
|
|
- Programs are processes
|
|
|
|
- Started on boot
|
|
|
|
- When module containing process loaded
|
|
|
|
- Processes run on timer firing or external events
|
|
|
|
|
|
|
|
# Timers
|
|
|
|
- Libraries
|
|
|
|
- Used by applications and system
|
|
|
|
- Check for timer completion
|
|
|
|
- Waking system from low power
|
|
|
|
- Real-time task scheduling
|
|
|
|
- Allows cooperation when threads sleep
|
|
|
|
- Low power mode
|
|
|
|
- timer and stimer
|
|
|
|
- Simplest
|
|
|
|
- See if time period passed
|
|
|
|
- Need querying
|
|
|
|
- etimer
|
|
|
|
- Event timers
|
|
|
|
- Scheduling
|
|
|
|
- Uses clock time from clock module
|
|
|
|
- struct etimer
|
|
|
|
## Clock
|
|
|
|
- System time starts from zero when the Contiki system starts
|
|
|
|
- clock_time()
|
|
|
|
- In ticks
|
|
|
|
- clock_seconds()
|
|
|
|
- In seconds
|
|
|
|
- CLOCK_SECOND
|
|
|
|
- Ticks per second
|
|
|
|
|
|
|
|
# Power Saving Mode
|
|
|
|
- Kernel does not provide any power saving abstractions
|
|
|
|
- Need to implement in application
|
|
|
|
- To help an application decide when to power down the system
|
|
|
|
- The event scheduler exposes the size of event queue
|
|
|
|
- If there were not events scheduled, this information can be used to power down the processor
|