Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Releases: tock/tock

Tock 2.2

06 Jan 16:42
9554639

Choose a tag to compare

Tock 2.2

Tock 2.2 represents two years of Tock development since v2.1.1. This release contains almost 3900 commits made across 840 PRs by 90 contributors (of which 48 are new contributors!). It is the first Tock release that can compile on a stable Rust toolchain, and contains many other important fixes, new subsystems, new platforms, new drivers, and major refactors.

Backwards Compatibility

Tock 2.2 extends its system call interface through one new system call (Yield-WaitFor), but retains backwards compatibility with Tock 2.1.1 for its core system call interface and all stabilized drivers.

In this release, we revised Tock's alarm system call driver implementation to predictably wrap its ticks values at (2**32 - 1) ticks, across all platforms. Before this change, hardware alarm implementations that were less than 32 bit wide would wrap before reaching (2**32 - 1) ticks, which complicated correct alarm handling in userspace. In Tock 2.2, these alarm implementations are scaled to 32 bit, while also scaling their advertised frequency appropriately. While this change is non-breaking and compatible with the previous alarm implementation, it can expose such scaled alarms to userspace at significantly higher advertised frequency values. Userspace alarm implementations that did not correctly handle such high frequencies may need to be fixed to support this new driver implementation.

Relevant PRs:
  • [RFC] Yield-WaitFor syscall by @ppannuto in #3577
  • kernel/hil/time,capsules/alarm: pad Ticks to 32 bit for predictable wrapping by @lschuermann in #3973
  • capsules/alarm: left-justify 32 bit ticks, re-architect alarm, add unit tests by @lschuermann in #3975

Security and arch-crate Fixes

Tock 2.2 includes important and security-relevant fixes for its Cortex-M and RISC-V architecture support.

  • When switching between applications, the RISC-V PMP implementation did not correctly invalidate any additional memory protection regions that are not overwritten by the target app's PMP configuration. Under certain conditions this can allow an application to access private memory regions belonging to a different applications (such as when using IPC).

  • The Cortex-M (Armv7-M) and Cortex-M0/M0+ (Armv6-M) hard fault, interrupt and svc handlers contained a bug that could allow an application to execute in privileged mode after returning from the handler. This allows an application to execute code at kernel privileges and read / write arbitrary memory.

Relevant PRs:
  • [RFC] Yield-WaitFor syscall by @ppannuto in #3577
  • kernel/hil/time,capsules/alarm: pad Ticks to 32 bit for predictable wrapping by @lschuermann in #3973
  • capsules/alarm: left-justify 32 bit ticks, re-architect alarm, add unit tests by @lschuermann in #3975

Stable Rust Support

This release removes all nightly Rust features from all of Tock's core kernel crates (such as kernel, arch/*, and chips/*). This allows Tock to be built on the Rust stable toolchain for the first time!

We demonstrate this by switching the hail board to a stable toolchain in this release. We continue to compile other boards on the Rust nightly toolchain, as this enables some important code-size optimizations (such as by compiling our own, size-optimized core library).

Relevant PRs:
  • [RFC] Yield-WaitFor syscall by @ppannuto in #3577
  • kernel/hil/time,capsules/alarm: pad Ticks to 32 bit for predictable wrapping by @lschuermann in #3973
  • capsules/alarm: left-justify 32 bit ticks, re-architect alarm, add unit tests by @lschuermann in #3975

AppID, Credentials and Storage Permissions

This Tock release revisits how applications are identified in the kernel, and introduces a set of mechanisms that allow developers to identify, verify, and restrict applications that are running on a Tock kernel. AppIDs are the core mechanism to enable this and identify an application contained in a userspace binary. AppIDs allow the kernel to apply security policies to applications as their code evolves and their binaries change. We specify AppIDs, Credentials and their interactions with process loading in a draft TRD.

Additionally, we introduce a mechanism to assign applications permissions to access some persistent storage (e.g., keys in a key value store). This mechanism interacts with AppIDs (ShortIDs) and is also specified in a a draft TRD.

Relevant PRs:
  • Adding App IDs and userspace binary integrity to the Tock kernel by @phil-levis in #2809
  • AppID/TBF: Add ShortId header by @bradjc in #4026
  • HIL: Add Signature::verify with const L:usize and process checker for signatures by @bradjc in #3878
  • TRD: Tock Storage Permissions by @bradjc in #4021
  • Add support for ECDSA NIST P256 signature credentials by @alistair23 in #4165
  • Storage Permissions: Implement to match TRD by @bradjc in #4031

Major Refactors and Interface Changes

We implement a number of kernel-internal refactors and interface changes:

  • System call drivers are now mandated to either return Success or Failure(ErrorCode::NODEVICE) for a command system call with command number 0. Previously, some drivers used this command number to also convey additional information to userspace. This release does not change the interface of any stabilized drivers, which will be updated as part of Tock 3.0.

    Relevant PRs:
  • Tock 2.2 introduces [a new policy to support external dependencies][external-deps] in the upstream Tock codebase. As part of this effort, we split up the existing, single capsules crate into multipe crates (such as capsules-core, capsules-extra, and capsules-system) with different guarantees concerning stability and use of external dependencies. The core capsules crate contains capsules deemed essential to most Tock systems, as well as virtualizers which enable a given single peripheral to be used by multiple clients. Other capsules have been moved to the extra capsules crate. The system capsules crate contains components that extend the functionality of the Tock core kernel, while not requiring unsafe.

    Relevant PRs:
  • Furthermore, the DeferredCall and DynamicDeferredCall subsystems have been replaced with a more lightweight and unified deferred call infrastructure. This new approach has a smaller code size overhead and requires less setup boilerplate code than DynamicDeferredCall.

    Relevant PR:

    • Replace DeferredCall and DynamicDeferredCall with a more general-purpose implementation by @hudson-ayers in #3382
  • LeasableBuffer has been renamed to SubSlice and features a significantly improved API. Multiple subsystems have been ported to this new type.

    Relevant PRs:
    • kernel: LeasableBuffer: fix double slice end value by @bradjc in #3511
    • kernel: leasablebuffer: add APIs by @bradjc in #3505
    • Rename LeasableBuffer to SubSlice by @bradjc in #3519
    • Switch SPI master HIL to leasable buffers instead of raw slices by @alevy in #4173
    • ot: tests: switch to subslice by @bradjc in #3570
    • ot: tests: LB->SS by @bradjc in #3573
    • Screen: update HIL to simplify, format, and use SubSlice by @bradjc in #3792
    • kernel: SubSlice: fix slice calculation by @bradjc in #3791
  • Tock 2.2 introduces "configuration boards": variants of in-tree board definition showcasing certain subsystems or peripherals. These boards (under boards/configurations) are implemented by converting some Tock boards into combined "lib + bin" crates and extending these boards.

    Relevant PRs:
Read more

Tock 2.2 Release Candidate 1

18 Dec 22:03
7c88a62

Choose a tag to compare

Pre-release

This is the first testing release for Tock 2.2!

With almost two years since Tock 2.1.1, it's about time for a new Tock release! Compared to 2.1.1, this release will contain 3882 commits made in 836 PRs by 90 contributers (of which 48 are new contributors!). This release is the first to support stable Rust for out-of-tree and (a subset of) the in-tree boards, adds new supported boards, and contains many other fixes and improvements. Some notable bug fixes are in the Cortex-M arch crate to prevent userspace applications from executing in privileged mode, and disabling unused PMP regions on RISC-V. A full change list will be included with the final release notes.

Release organization and testing will commence at #4272.

Tock 2.1.1

06 Jan 17:17
44f39d7

Choose a tag to compare

Tock 2.1.1 fixes an issue present in the Tock 2.0 and Tock 2.1 releases concerning system call error return values issued when userspace applications were issuing system calls towards non-existent capsules.

Breaking Changes

  • The Tock system call interface specification (TRD 104) mandates that the kernel returns an error of NODEVICE when issuing a system call towards a non-registered driver number. However, Tock 2.0 would instead return an error of NOMEM on a subscribe system call. Furthermore, Tock 2.1 returns an error of NOMEM on all of read-only allow, read-write allow and subscribe system calls. This release changes this behavior and returns an error of NOMEM for all of these cases, in compliance with the specification (#3300).

All Merged PRs

An exhaustive list of all merged pull requests since Tock 2.1:

Tock 2.1

07 Sep 13:53
ffa5ce0

Choose a tag to compare

Tock 2.1 has seen numerous changes from Tock 2.0. In particular, the new system call interface introduced with Tock 2.0 has been refined to provide more guarantees to processes with respect to sharing and unsharing buffers and upcalls. Other changes include the introduction of a userspace-readable allow system call, support for new HILs and boards, and various other bug-fixes and improvements to code size and documentation.

Breaking Changes

  • The implemented encoding of the system call return variant "Success with u32 and u64" has been changed to match the specification of TRD 104. Accordingly, the name of the SyscallReturnVariant enum variant has been changed from SuccessU64U32 to SuccessU32U64 (#3175).
  • VirtualMuxAlarms now require the setup() function to be called in board set up code after they are created (#2866).

Noteworthy Changes

  • Subscribe and allow operations are no longer handled by capsules themselves, but through the kernel's Grant logic itself (#2906). This change has multiple implications for users of Tock:
    • The Grant type accepts the number of read-only and read-write allow buffers, as well as the number of subscribe upcalls. It will reserve a fixed amount of space per Grant to store the respective allow and subscribe state. Thus, to make efficient use of Grant space, allow buffer and subscribe upcall numbers should be assigned in a non-sparse fashion.
    • Legal allow and subscribe calls can no longer be refused by a capsule. This implies that it is always possible for an application to cause the kernel to relinquish a previously shared buffer through an allow operation. Similarly, subscribe can now be used to infallibly ensure that a given upcall will not be scheduled by the kernel any longer, although already enqueued calls to a given upcall function can still be delivered even after a subscribe operation. The precise semantics around these system calls are described in TRD 104.
  • Introduction of a new userspace-readable allow system call, where apps are explicitly allowed to read buffers shared with the kernel (defined in a draft TRD).
  • Introduction of a read-only state mechanism to convey information to processes without explicit system calls (#2381).
  • Improvements to kernel code size (e.g., #2836, #2849, #2759, #2823).

New HILs

  • hasher
  • public_key_crypto

New Platforms

  • OpenTitan EarlGrey CW310
  • Redboard Red-V B
  • STM32F429I Discovery development board
  • QEMU RISC-V 32-bit "virt" Platform

Deprecated Platforms

  • OpenTitan EarlGrey NexysVideo

Known Issues

This release was tagged despite several known bugs in non-tier-1 boards, so as to avoid delaying the release. These include:

  • Raspberry Pi Pico: process faults when running IPC examples: #3183
  • The cortex-m exception handler does not correctly handle all possible exception entry cases. This is not known to currently manifest on any examples, but could with unlucky timing: #3109
  • STM32F303 Discovery: adc app runs, but eventually hangs in the app (seems to be caught in the exit loop, but not sure why it gets there)
  • STM32F303 Discovery: kernel panics lead to only a partial printout of the panic message before the board enters a reboot loop
  • weact_f401ccu6: gpio example fails to generate interrupts on the input pin. This board is likely to be deprecated soon anyway, as it is no longer available for sale.

All Merged PRs

An exhaustive list of all merged pull requests since Tock 2.0:
Read more

Tock 2.1 Release Candidate 1

09 Aug 19:27
4d74030

Choose a tag to compare

Pre-release

This is the first testing release for Tock 2.1!

Tock 2.1 represents a year of general improvements since our last release. It includes code size improvements, progress towards stable Rust, and numerous core kernel improvements, new chip drivers, new platforms, and bug fixes. Importantly, this release will be the first post-2.0 release which libtock-rs can soundly target, thanks to the additional guarantees provided in Tock 2.1 regarding allow-buffer swapping and callback-swapping. A full change list will be included with the final release notes.

Tock 2.0

27 Aug 21:59
6ade39d

Choose a tag to compare

This is the second major release of Tock! Tock 2.0 comes with a revamped system call interface with clarified semantics for how resources are shared between processes and the kernel. This is a breaking change from Tock 1.x and Tock 2.0 requires apps compiled for the new syscall interface.

System Call Interface Changes

  • Two new system calls: AllowReadOnly and Exit. Allow has been renamed to AllowReadWrite.
  • System calls can now return up to 4 registers of values to userspace. This flexibility introduces some additional restraints on capsule code, see https://github.com/tock/tock/blob/master/doc/Porting_v1_Capsules_to_v2.md for more details.
  • Additional restrictions on how capsules implement Subscribe and Allow, with some in-kernel checks of these restrictions.

New Requirements in Tock 2.0

  • All apps must include a TBF header specifying the minimum supported kernel version they require. By default, the process loader will check this header and refuse to load apps which are not explicitly compatible with 2.0.
  • All capsules must store any process state in a Grant, and each capsule may only have up to one grant.

Other Major Changes

  • The Chip and Platform traits in the kernel have been refactored. Chip now only includes functions that are tightly coupled with microcontrollers. Platform has been divided into separate, clearly defined traits.
  • How boards configure the kernel has been clarified. All resources the kernel needs to operate for a specific board are specified in the KernelResources trait. This replaces the previous ad-hoc approach where some configuration was passed in as function arguments and others where in a trait. Additionally, individual boards can now choose to exclude chip peripherals which they do not use.
  • The kernel crate has been reorganized. Kernel exports are more clearly structured, and use full module paths by default. Inside the kernel crate, related files are namespaced as feature_X.rs, such as process_standard.rs and process_utilities.rs.
  • The process console now is able to print memory maps.

New Platforms

  • Nano RP2040 Connect
  • Clue nRF52840
  • BBC Micro:bit v2
  • WeAct F401CCU6 Core Board
  • i.MX RT 1052 Evaluation Kit
  • Teensy 4.0
  • Pico Explorer Base
  • Rapsberry Pi Pico
  • LiteX on Digilent Arty A-7
  • Verilated LiteX simulation
  • ESP32-C3-DevKitM-1

New HILs

  • key/value store
  • 8080 bus (for LCDs)
  • text screen
  • screen
  • touch

All Merged PRs

All merged pull requests
  • #2799: doc: misc updates
  • #2798: doc: wg: core: maintenance update
  • #2778: [clue_nrf52840] Integrate tock bootloader
  • #2793: capsules: pconsole: fix kernel print
  • #2789: [cortex-m0+] Enable unprivileged mode and fix fault handler
  • #2744: Changelog for 2.0 release.
  • #2769: docs: syscalls: Update stability guarantees for 2.0
  • #2753: readme: update with 2.0 news!
  • #2794: capsules: update touch driver
  • #2792: process console: update doc comment with recent changes
  • #2714: make: add aliases for root makefile commands
  • #2752: kernel: load_processes: do not skip indices for padding apps
  • #2768: add core notes 2021-08-13
  • #2784: [stm32] Update stm32 boards
  • #2783: ESP32-C3: Add support for running apps
  • #2786: [imxrt1050-evkb] Fix GPIO interrupts
  • #2787: [spi] Update virtual_spi to report errors
  • #2791: Update touch panel and ft6x06 drivers
  • #2790: [nano_rp2040] Update makefile
  • #2725: First step on SPI documentation
  • #2779: Adjust app's watermark only for memory buffers
  • #2765: OpenTitan: Flash fixes
  • #2742: [arm] Cortex M0+ region
  • #2781: capsules/alarm: remove command 4 "set absolute expiration"
  • #2780: [imxrt1050-evkb] Fix number of processes supported and add process console
  • #2774: Update bus to prevent adding the SPI to the MUX twice
  • #2777: [nano33ble] Enabled ADC
  • #2776: Update Clue nRF52840
  • #2767: nrf: pwm: handle 0 hz case
  • #2766: Quick fix elf2uf2 installation steps
  • #2761: boards/litex: bump targeted tock-litex release
  • #2762: Minor updates to SD card docs and error codes
  • #2758: boards/redboard_artemis_nano: Fixup issues with release tests
  • #2738: Update Microbit v2 README
  • #2764: boards/nrf52840: fix button driver number in Grant allocation
  • #2719: [rp2040] Use clocks frequency to set UART baud rate
  • #2729: Core working group notes of 2021-07-30
  • #2712: make: update stack-analysis format
  • #2749: A few OpenTitan fixes for 2.0
  • #2745: Fix the multi_alarm_test to provide output, refactor it
  • #2750: boards/esp32c3: Fixup tests
  • #2751: [rp2040] Fixed gpio pin numbers in interrupt handler
  • #2748: fix broken error handling in allow for udp
  • #2746: fix log test
  • #2743: fix MLFQ component after kernel reorg
  • #2737: Core wg call notes, August 6th
  • #2740: Rename allow's argument from slice to buffer
  • #2739: kernel: syscall driver: fix sample code path
  • #2735: Display driver number in hex for allocation warning
  • #2736: Fix LED Matrix message typo
  • #2731: cdc: delay before sending data
  • #2722: Process console: only print one process if two have the same name
  • #2732: capsules: hts221: fix i2c read command
  • #2720: Process console: iterate each process on command list
  • #2718: pconsole: separate hello message from start()
  • #2733: kernel: sched: priority: get correct proc index
  • #2723: arch: cortex-m: defend against large stack pointer
  • #2715: Move boards that have large main stack frames to get_peripherals
  • #2692: trd/104-syscalls: clarify guarantees w.r.t. returned Allow buffers
  • #2566: Make SPI return buffers upon error
  • #2687: Create core-notes-2021-07-23
  • #2701: Separate schedule_upcall number and values through Rust types
  • #2716: readme: update chip support table
  • #2669: [rfc] Comptibility header (v1)
  • #2713: make: remove rustup nonsense with make V=1
  • #2705: boards/litex: bump targeted tock-litex release
  • #2710: doc: add capsules to capsule readme
  • #2708: doc: various link and spelling fixes
  • #2681: Add Arduino Nano RP2040 Connect
  • #2695: virtual_alarm: handle large dt values more resiliently
  • #2706: capsules: hmac: A few small fixes
  • #2644: OpenTitan: Bump the FPGA bitstream
  • #2665: kernel/hil/time: allow time to be a dyn trait object
  • #2688: Add new time trd with ConvertTicks trait
  • #2703: Flash components
  • #2675: Added troubleshooting for microbit v2 if openOCD could not find MEM-AP
  • #2698: Updated lps25hb to handle i2c errors
  • #2177: TBF Header Persisent Access Control
  • #2694: Update hts221 to handle i2c errors
  • #2682: I2c return buffer for fxos8700cq
  • #2683: Update isl29035 to handle i2c errors
  • #2704: readme: spelling
  • #2581: Add I2C error verifications for lsm303
  • #2702: fixed led matrix toggle bug
  • #2686: capsules: sha: Support a shorter destination buffer
  • #2689: msp432/adc: document safety invariants on &[u8] to &[u16] conversion
  • #2699: Fix make indentation for ST boards READMEs
  • #2659: Reorganize kernel/ Crate
  • #2696: Update the Pico Explorer Base
  • #2578: Initial support for the ESP32-C3 early dev board
  • #2680: Add Pico Explorer Base development board
  • #2691: Core working group notes of 2021-07-16
  • #2674: Notes from Tock Core WG meeting July 9th
  • #2685: hil/gpio: add Copy and Clone to enums
  • #2679: [st77xx] make reset pin as optional
  • #2677: Makefile: Add setup support for dnf systems
  • #2678: Add SPI to RP2040
  • #2673: Update imxrt to use new kernel exports
  • #2664: Add core WG notes from 2021-07-02
  • #2672: Update nucleo
  • #2671: Update stm32f412gdiscovery
  • #2667: Update stm32f3 discovery
  • #2668: Update raspberry pi pico
  • #2666: Update microbit_v2
  • #2653: Update text_screen driver to avoid re-enter to grant
  • #2638: Rename Driver trait parameters for consistency
  • #2656: kernel: schedule upcall, bool -> Result
  • #2632: Support aliasing of process-allowed memory
  • #2614: OpenTitan: Add SHA support
  • #2663: Auto implement Group Traits
  • #2655: kernel: hil: aes: Allow returning an error when setting mode
  • #2662: Update CRC system call driver
  • #2661: TRD104 changing "identifier" to "number"
  • #2660: doc: trd104 minor edits
  • #2639: Tock 2.0: implement Upcall swapping restrictions (v4)
  • #2636: Redesign CRC HIL & fix SAM4L implementation
  • #2658: Minor updates to grant.rs
  • #2657: Update screen to avoid grant re-enter
  • #2647: Add a Makefile rule to run cargo-bloat
  • #2648: Move kernel code out of monomorphized functions
  • #2446: Tock 2.0 Alpha1
  • #2506: kernel: Reorganize process.rs
  • #2643: Add working group notes for 6/25/2021
  • #2634: OpenTitan: Run tests
  • #2652: raspberry_pi_pico: delete semihosting comment
  • #2182: Stm32f412g: Add rng support
  • #2651: kernel: grant: rename GrantMemory to GrantData
  • #2645: rp2040: SysInfo peripheral
  • #2650: doc: trd104: spell check
  • #2646: Tock registers v0.7
  • #2629: OpenTitan: AES: Update the AES implementation
  • #2642: Tock reg UIntLike
  • #2601: Change qemu-path to relative path.
  • #2618: tock-register-interface: reorganize & document
  • #2623: imxrt10xx: Add DMA peripheral, integrate DMA into LPUART
  • #2640: fixed broken hyperlinks to the "getting started" page
  • #2442: board: Raspberry Pi Pico Tock port
  • #2627: Core working group notes of 2021-06-11
  • #2599: Add integration test support in the kernel, create tests for OpenTitan
  • #2626: boards/nordic/nrf52840dk: Connect the userspace SPI capsule
  • #2619: Add I2C slave support for nRF
  • #2595: OpenTitan: Initial support for OTBN
  • #2621: Add core WG notes for 2021-06-04.
  • #2617: Update TRD104 to more clearly state the expectations for allowed buffers.
  • #2624: Fixes three printing bugs in print_tock_memory_usage.py
  • #2622: [led_matrix] LEDs array macro
  • #2511: Define StatusCode which uses ErrorCode's numeric encoding
  • #2612: Update the nRF I2C
  • #2616: Fix a bug in the SPI controller capsule.
  • #2580: Add I2C error verificat...
Read more

Tock 2.0 Release Candidate 2

06 Aug 17:31
cb73679

Choose a tag to compare

Pre-release

This is the second testing candidate for Tock 2.0. This includes a few fixes from rc1:

  • Fix for stack pointer check in cortex-m/syscalls
  • Updates to process console
  • Fix in priority scheduler
  • Improvement to CDC stack for nano33ble
  • HTS221 fix
  • Other minor fixes

Tock 2.0 Release Candidate 1

02 Aug 19:35
63e1356

Choose a tag to compare

Pre-release

This is the first testing release for Tock 2.0!

Tock 2.0 represents over a year of work towards a revised system call interface for the Tock kernel. It also includes numerous core kernel improvements, new chip drivers, new platforms, and bug fixes. A full change list will be included with the final release notes.

If you are looking to update any out-of-tree code to 2.0 there is a porting guide.

Tock 1.6

23 Oct 23:00
e8d0a28

Choose a tag to compare

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 updat...
Read more

Tock 1.6 Release Candidate 1

09 Oct 16:43
ba867c2

Choose a tag to compare

Pre-release

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).

Many Other Updates!

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

  • #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 b...
Read more