github tock/tock release-1.6
Tock 1.6

latest releases: release-2.1.1, release-2.1, tock-registers-v0.8...
3 years ago

The 1.6 release of Tock includes numerous improves as we work towards the 2.0 release of Tock. Tock 2.0 will include breaking syscall changes, and before those changes we wanted to ensure the changes over the last couple months made their way into a 1.x release. So here it is!

Tock Has a Scheduler!

The major change in this release is in PR #1767 which added a Scheduler trait allowing Tock to cleanly support different schedulers. That PR also included four different schedulers that boards can choose from when configuring the kernel.

New Platforms

As Tock continues to run on more and more hardware, 1.6 is no different. This release includes support for:

Internal Interface Refactors

Tock's HIL interfaces go through periodic re-designs as bugs come up and new hardware platforms expose issues or oversights. The time.rs HIL (alarms and timers) saw the major update in 1.6 (#2089).

Non-PIC Userspace Tooling Support

While Tock was originally designed for userspace processes to be compiled with PIC (meaning they can be executed at any address), both LLVM and RISC-V do not (yet?) support the PIC mode that Tock requires. While we wait, we use statically compiled TBF apps, and the tooling and kernel support for apps compiled for fixed addresses has improved significantly (#1845, #1928, #1930).

USB Stack Improvements

There has been some renewed interest in USB stack developments, and 1.6 includes support for UART over USB (using CDC-ACM) (#1902), as well as USB support on OpenTitan (#1846).

Changes Since RC1

Release testing exposed a few minor bugs and configuration mishaps. There were a couple MPU changes between RC1 and the release, however. First, when restarting apps the MPU is correctly reconfigured. Second, the RISC-V PMP restricts access to the grant region now.

Many Other Updates!

Of course those are just some highlights of development since 1.5. There have been a whole host of improvements:

All merged pull requests
  • #2116: chips: e310: improve interrupt handling
  • #2134: riscv mtimer: don't directly modify interrupt enables
  • #2136: doc: OurOfTree.md typo conneciton -> connection
  • #1963: deprecate launchxl, cc26x2
  • #2133: chips/earlgrey: Use the peripheral clock frequency
  • #2091: Nano33 apds9960
  • #2127: Create core-notes-2020-09-25.md
  • #2128: opentitan: Disable USB support by default
  • #2129: fix rustdoc CI, force bash for Makefile.common
  • #2126: Earlgrey: dont call debug in interrupt top half
  • #2117: Fix kernel work counting when processes are stopped or faulted
  • #2089: Time redesign v3
  • #2047: Virtual ADC support
  • #2119: Add Tock core WG notes for 2020-09-18.
  • #2120: arch/cortex-m3: Allow the kernel to access protected memory
  • #2121: capsules: hmac: Replace the digest buffer after completion
  • #1873: PMP and MPU Improvements
  • #2107: Scheduler timer bugfix + documentation updates
  • #1973: Remove reborrows?
  • #2104: opentitan: Makefile: Use riscv64-elf-objcopy to prepare images
  • #2053: Add utilities for allocating dynamic grants.
  • #2083: Stm32f3: add flash support
  • #2101: RFC: Remove AppPtr::Drop() and Owned::Drop()
  • #2103: OpenTitan: A collection of USB fixes
  • #2114: STM32 Readme Fix
  • #2105: Core WG notes for September 11
  • #2109: Core WG notes for 2020-09-04
  • #2110: Makefile: Bump the OpenTitan ROM file
  • #2092: arch/cortex-m: change a few llvm_asm!s to asm!s
  • #2102: Add links to out-of-tree boards to boards/README.md.
  • #2073: RISC-V: Update panic debug print
  • #2080: OpenTitan: Add support for detecting the USB device
  • #2100: Mask USB interrupt to avoid hardware bug in OpenTitan
  • #2082: capsules: usb/cdc: Fixup the CDC control message logic
  • #2090: Make .storage alignment configurable
  • #2098: Kernel work increment/decrement prevents MCU going to sleep
  • #2077: Add TakeCell::get_mut function
  • #2085: Allow creating a Spi Peripheral
  • #2095: Update tock-registers README.md
  • #2086: MLFQ scheduler bug fix
  • #2066: Msp432: DMA-support
  • #2088: Core notes for August 28th
  • #2087: opentitan: README: Update the OpenTitan minimum version SHA
  • #2027: Remove duplicated code in cortex-m crates
  • #2074: Add ability to get full address bytes & address type to nrf52 Ficr
  • #2081: MSP432: Change SMCLK from 750kHz to 1.5MHz
  • #2075: Create core-notes-2020-08-14.md
  • #2076: rv32: pmp: Fix bounds
  • #2060: Ft6x06 touch status fix and impoved report efficency
  • #2071: Update tock-registers doc to fix mistake
  • #2064: pmp: add PMP struct
  • #2072: Makefile: Update the OpenTitan ROM download location
  • #2070: core wg notes august 7
  • #2068: schedulers: store references to slots in processes array instead of AppIds
  • #1928: kernel: process: try to use memory fixed address
  • #2067: Msp432: Platform fixes
  • #2062: kernel: sched: add and update comments
  • #2045: rt0: Convert uses of u32 to usize
  • #2061: core notes july 31
  • #2022: kernel: process: use slice for app memory
  • #2065: hifive1: Document required revb parameter for qemu
  • #2038: arch/rv32i: pmp: Make the PMP struct as long as required
  • #1942: Console: Check for receive length just in case
  • #2043: cortex-m: fix warning about volatile keyword in incorrect position
  • #2059: kernel: return correct time used
  • #2054: fix bug in round robin scheduling logic
  • #2050: Boards: RISC-V: Update the QEMU README
  • #2048: kernel: sched: priority: invert logic
  • #1767: Scheduler trait + transition all boards to round robin scheduler
  • #2010: Remove OptionalCell's dependency on feature(const_fn) using impl<T: Copy>
  • #2032: riscv: check for stack overflow
  • #1911: New Platform: Msp432
  • #1986: Touch Panel HIL and ft6x06 driver
  • #2001: boards: Make .app section default, do not include it in kernel binary
  • #2015: tock-registers: use UnsafeCell in writeable registers
  • #2021: arch/rv32i: Don't sort PMP regions when we configure the MPU
  • #2024: Makefile: Don't run the setup commands inside bash
  • #2035: OpenTitan: USB support cleanup
  • #1994: kernel: expose APIs for external ProcessTypes
  • #2026: boards: nrf52840dk: add flash-openocd
  • #2029: tools: fix update rust script
  • #1965: hil: gpio: remove 'static
  • #2002: cortex-m: Detect stack overflow
  • #2033: sifive: uart: make sure tx enabled
  • #2014: docs: porting: add new platform checklist
  • #2011: Makefile: Split QEMU build to a seperate directory
  • #2031: Notes from Core WG call, July 17
  • #2020: arch/rv32i: Reduce PMP stack usage
  • #2019: riscv: pmp: disable all entries
  • #1741: boards/opentitan: Build OpenTitan with target device specific parameters
  • #2004: Adding ADC support for stm323f4xx
  • #2000: Adding ADC support for stm323f303xc
  • #1887: sched: Add a watchdog
  • #1991: boards: make: quiet sha256sum from cargo
  • #2025: kernel::hil: time: fixed wrong implementation of is_oneshot()
  • #1985: Update Systick trait, implement it for e310x and ibex
  • #2013: Add Core Meeting Notes of 2020-07-10
  • #2017: Makefile: Bump the OpenTitan boot ROM
  • #1930: kernel: process: omit debug addrs for fixed apps
  • #2008: riscv: remove old feature
  • #1971: Use mainline QEMU
  • #2003: kernel: grant: do not pass T::default()
  • #1988: chips: apollo3: Allow a few tries to set the stimer
  • #1980: doc: ot: notes: June meetings
  • #1989: chips: apollo3: Enable the I and D cache
  • #1997: chip: rename Ibex to EarlGrey
  • #1999: add core notes 2020-07-03
  • #1996: Core working group notes, June 26
  • #1987: Added support for external clock source and systick user-defined clock value for ARM
  • #1978: Makefile: Fix the temp directory creation when cloning OT ROM
  • #1961: Create core-notes-2020-06-19.md
  • #1992: doc: remove allow(unused_doc_comments)
  • #1981: LowRISC: Initial commit of Pad Controller
  • #1962: Use linker file to create APP_MEMORY slice.
  • #1916: Added STM32F412G Discovery kit
  • #1983: USB: CDC: Allow boards to specify vendor id, product id, and strings.
  • #1982: Correct memop documentation
  • #1975: rv32i: Add support for 64 PMP regions
  • #1967: Makefile.common: use system sha256sum if available
  • #1917: hil: ble_advertising: Pass the transmit buffer on callback
  • #1934: Initial support for Apollo3 BLE
  • #1933: Bind AppSlice to app instance (AppId), fixes #1914
  • #1979: add --strip-sections to objcopy flags
  • #1943: kernel: TBF parsing: match the threat model
  • #1951: ci: run miri where we can
  • #1974: tools: pick toolchain that has all our components
  • #1909: Add Nano 33 BLE Board
  • #1970: rv32i: add Display trait for PMPRegion/Config
  • #1969: Fix PMP use for RISC-V
  • #1968: Stm32f4 I2C HAL
  • #1964: hil: remove 'static from ble_advertising
  • #1889: Apollo3: Add an alarm
  • #1896: apollo3: uart: Fix the UART callback
  • #1926: Prepare for 64 PMP config registers
  • #1949: CDC: Wait for CDC messages, add delay to nRF USB RESET
  • #1959: HIL: remove 'static from sensors
  • #1957: Remove core_intrinsics offset feature
  • #1955: kernel: remove panic_info_message feature
  • #1956: CRC HIL: make lifetime 'a, not 'static
  • #1958: Remove core::intrinsics::math
  • #1960: Increase delay in Segger RTT debugging (fix #1697).
  • #1907: nrf52: usb: handle control OUT transfer
  • #1837: Frame buffer HIL and ST7735 screen support
  • #1946: Add USB CDC Component, Move set_client() to USB HIL
  • #1952: components: Add debug writer that doesn't use a UART mux
  • #1950: remove all uses of lang_items unstable feature
  • #1939: Make the Field::mask and FieldValue::mask fields private.
  • #1947: nrf52: usb: better check state on IN resume
  • #1945: nrf52: usb: do not print debug!() info on startup
  • #1929: add core notes 2020-06-12
  • #1902: USB: Add CDC support, update capsule stack
  • #1771: boards/Makefile.common: tool-chain customization
  • #1935: Makefile: Update the OpenTitan boot ROM
  • #1927: Many updates to comments in capsules/
  • #1936: ci: Add missing echo suppress
  • #1925: Add support for the MLX90614 IR Temperature Sensor
  • #1882: chips: ibex: Enable low power state
  • #1910: Add meeting notes
  • #1919: Core working group notes from June 05
  • #1897: Apollo3: Add support for the I2C device
  • #1892: Remove nrf52dk_base, initialize nordic boards independently.
  • #1924: Import changes in kernel/src/common/utils.rs from #1618.
  • #1906: OpenTitan: Document and support flashing apps
  • #1899: Add support for SMBus
  • #1908: Update Rust To June 2020 Nightly
  • #1915: Update nucleo documentation and deleted sudo for make program
  • #1879: OpenTitan: Initial support for I2C
  • #1901: sam4l: usb: don't just queue resume in
  • #1894: sam4l: usb: handle return code, long buffers
  • #1822: kernel: configure MPU only if switching to a different process
  • #1903: nrf52: usb: correct register matching
  • #1888: nRF52: uart fixes for unknown bootloader configurations
  • #1880: Overhaul Tock CI
  • #1904: Fix broken link to board 'arty_e21'
  • #1881: ci: actually deny warnings in doc builds
  • #1898: add core wg notes 05-29-2020
  • #1646: rust: remove all uses of unstable pragma "in_band_lifetimes"
  • #1895: capsules: usb: change config descriptor to 1
  • #1883: Core WG notes from May 22
  • #1831: Allow/subscribe null pointer doc clarifications
  • #1885: remove empty .gitmodules file
  • #1884: Remove unused asm feature flags
  • #1857: Initial support for the Artemis platform
  • #1878: Make nrf52 15.4 driver standards compliant; create generic 15.4 component
  • #1863: cortex-m: Add missing ISB after CONTROL writes
  • #1650: kernel: remove unstable crate_visibility_modifier, aka crate -> pub(crate)
  • #1872: [RFC] Codify CI policy
  • #1801: RISC-V: Add automated QEMU testing
  • #1874: nrf52: dont write to read only register
  • #1858: Set interrupt pending bit manually
  • #1870: move duplicated unhandled_interrupt code to cortex-m4 crate
  • #1853: Components for all things nrf52
  • #1868: Remove emulation-check from travis-ci.
  • #1866: Small improvements to QEMU Make step
  • #1845: TBF: Add "Fixed Addresses" TLV
  • #1862: Enforce doc warnings.
  • #1859: Run OpenTitan tests in the CI
  • #1825: Run Clippy in CI
  • #1846: Initial work on OpenTitan USB controller
  • #1856: tock-rt0 related cosmetic changes.
  • #1702: Add HMAC support to Tock and OpenTitan
  • #1805: rv32i: pmp: Remove power of two allignment constraint
  • #1821: RISC-V: General PMP Improvements
  • #1847: hifive1: Upgrade to the revB board
  • #1852: doc: add OT WG notes
  • #1823: Fix Tock register interface to allow large unsigned values as bitmasks
  • #1855: doc: add explicit AUTHORS file & update
  • #1690: added the possibility to add None gpio pins
  • #1828: OpenTitan: Add support for receiving data over the UART
  • #1840: OpenTitan: HMAC: Convert to being interrupt driven
  • #1754: stm32f3xx I2C, lsm303dlhc sensor and secondary drivers of ninedof
  • #1851: Fix bors by updating status names to include OS
  • #1841: kernel: move restart logic to function
  • #1625: CI: build OS X on master and bors merges to it
  • #1832: Convert QEMU testing to use rexpect
  • #1784: Update nordic board documentation [was: Rename nrf52dk_base to nrf52_base]
  • #1836: Added init() function to stm32f4 crates
  • #1842: remove clone/copy from StoredState
  • #1817: Fix one byte UART transmissions for lowrisc (maybe)
  • #1838: Create core-notes-2020-05-08.md
  • #1826: kernel: use MapCell for Process::stored_state
  • #1799: nRF52 spi: fix get_rate
  • #1568: Reorg stm32f3xx crates and CI: enforce no-warnings on test builds
  • #1800: Remaining clippy allows/fixes
  • #1765: Remove &dyn references from GPIO-related HILs and capsules.
  • #1797: Add a git-diff line to tools/post_size_changes_to_github.sh
  • #1824: doc: add nrf52840-dongle to boards list
  • #1815: Run CI on Github Actions
  • #1818: travis: remove deprecated sudo key
  • #1820: Fix typos in CodeReview.md
  • #1819: Fix typos in CONTRIBUTING.md
  • #1802: Updated SPI hold_low and release_low for STM
  • #1803: refactor stmf32f4xx chip code into multiple crates
  • #1766: Unify arithmetic implementation of field registers and add unit tests.
  • #1816: Core working group notes from May 01
  • #1808: kernel: Check for interrupts and deferred calls
  • #1795: tools: update makefile to partition CI
  • #1770: propagate additional process loading errors to main.rs
  • #1744: Spi: Move SPI buffer size into SPI capsule
  • #1807: kernel: Update comments to mention Process Control Block
  • #1780: doc: use copy-on-write for docs
  • #1777: refactor buffer copy logic to reduce flash memory usage
  • #1762: [RFC] Private TBF TLV tag entry
  • #1790: capsule: process console: fix printout ordering
  • #1775: doc: ot: notes: 2020-04-09 and 2020-04-16
  • #1811: update changelog for 1.5

Don't miss a new tock release

NewReleases is sending notifications on new releases.