Skip to content

Releases: tock/tock

Tock 2.1.1

06 Jan 17:17
44f39d7
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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

Tock 1.5

30 Apr 22:01
7057532
Compare
Choose a tag to compare

Tock 1.5 is a periodic release so that there is at least one tested 1.x release before Tock 2.0. It includes updated components, more RISC-V development, new supported boards, improved process handling, and a host of other changes.

Highlights of this Release

  • New Features and Development

    • #1338 Added generic components
    • #1428 Add MPU configuration to panic print message
    • #1443 Add strace feature to kernel
    • #1480 Remove unsafe from TBF parsing in kernel
    • #1505 Add InterruptService abstraction
    • #1511 Complete transition to register interface
    • #1082 Processes are fully restartable
    • #1581 Capabilities in networking stack
    • #1589 RISC-V PMP implementation
    • #1590 Refactor panic!() printing implementation
    • #1680 Add hook for syscall filtering
    • #1748 Update in-kernel grant interface
  • New capsules

    • #1430 Low level debug
    • #1580 Log storage
    • #1715 HD44780 LCD
    • #1723 l3gd20 3 axis gyro and temperature sensor
  • New Boards

  • New Documentation

All Merged PRs:

  • #1338 Add generic components that any board can use
  • #1368 Tock Register Interface: help ensure correct use
  • #1392 Add functional unit tests for the kernel ring buffer.
  • #1393 Add cargo test for chips and archs on ci-travis.
  • #1394 Make process::alloc() take the alignment into account.
  • #1396 Fix typo in net::ipv6::ip_utils documentation.
  • #1397 Imix pin mapping documentation
  • #1398 hifive1: Increase stack size to 0x1000
  • #1399 Add Clippy Script + implement some clippy recommendations
  • #1401 arch/rv32i: Fixup MIE bit fields
  • #1403 put something useful in boards/README.md
  • #1404 turn the "getting started" guide into more of a tutorial
  • #1405 nrf52: add nRF52840 support to ficr.rs
  • #1406 allow GPIOs to be switched on
  • #1407 fix TOCK_KERNEL_VERSION
  • #1410 Add macro to generate register structs, and apply it to nrf52/clock (Fix #1400)
  • #1411 replace env! with option_env!
  • #1412 HiFive1: Add support for Machine Mode Interrupts
  • #1414 doc: fix various links and formatting
  • #1415 tools: add link checking script
  • #1417 Update rust and add update script
  • #1418 Fix path for kernel_layout.ld in nordic boards' build.rs.
  • #1420 SAM4L: create GLOC peripheral driver
  • #1421 make: freshen up board Makefile
  • #1422 Add support for multiple GPIO ports in chips/nrf5x.
  • #1425 RISCV addition for cycle and instruction counting
  • #1426 Add more variants to chips/nrf52/src/ficr.rs and keep them ordered in alphanumerical order
  • #1427 Add USB register mapping (for nRF52840-DK) to chips/nrf52.
  • #1428 Add MPU information to panic!() print
  • #1430 Implement the low-level-debug capsule.
  • #1431 fix slack invite link
  • #1432 Remove duplicate app register saving on context switch
  • #1434 Move USB control transaction handling to a separate module and add more descriptors.
  • #1435 Extend nrf52's UICR (NFC) and only erase its memory when needed
  • #1436 Remove impossible if-condition in cortex-m3 MPU
  • #1437 Add hifive1 support for user application
  • #1438 Add MIT to list of contributors
  • #1440 Make process_detail_fmt work with unknown app heap/stack pointers.
  • #1443 Add strace feature to trace syscalls in the kernel.
  • #1445 SiFive: PWM: Slight MMIO address correction
  • #1446 Use MaybeUninit in static_init instead of transmuting an option.
  • #1448 Drop messages instead of panicking when the debug buffer is full (Fix #1442).
  • #1450 Add comments to kernel/platform
  • #1451 rust2018: do not need macro_use
  • #1452 components: add generic spi, add to hail
  • #1453 components: make si7021 generic, add to hail
  • #1454 board: arty: use components
  • #1455 libraries: release tock-register-interface v0.4
  • #1456 Add DebugWriter component, use console component
  • #1458 register_structs!: Make output type public
  • #1460 Add the Ibex CPU and the OpenTitan Board
  • #1461 Add support for explicit visibility in register_structs.
  • #1463 Remove cargo.lock
  • #1466 doc/Design.md: Add 'Some in-kernel design principles` section
  • #1468 Update Nordic nrf52 chip model and variant
  • #1469 Fixed a typo.
  • #1471 RISC-V: OpenTitan Preparation
  • #1473 Replace IRC badge with Slack badge on README
  • #1474 Disable adc for deep sleep
  • #1476 UDP port binding + virtualization between apps and capsules
  • #1478 Add transmit_sync for sifive UART for use in panic
  • #1479 boards/hifive1: Remove duplicate PLIC enable
  • #1480 Rewrite TBF parsing logic
  • #1481 regs: Add Copy and Clone to InMemoryRegister
  • #1483 Remove dead code that double-checks the checksum
  • #1484 tools: Add setuptools to svd2regs.nix generated environment
  • #1486 Ensure the create_capability! macro cannot be called from capsules
  • #1487 Add missing panic! documentation in Porting Guide
  • #1488 boards/Makefile.common: Minor cleanup
  • #1489 register_structs!: Fix breakage of custom_test_frameworks
  • #1490 map the NRF52840-DK GPIOs correctly
  • #1492 Add support for the nrf52840_dongle board.
  • #1493 Remove direct dependency on nrf5x from nrf52dk_base.
  • #1494 Add support for power management in nrf52 chips.
  • #1495 Fix memory overuse in HiFive1 board
  • #1497 Mechanically align static_init_half with updated static_init macro.
  • #1498 Use the gpio::Pin enum in nRF52-based boards instead of raw numbers.
  • #1499 Add tests to capsules/alarm.rs
  • #1502 nRF52 UART updates - CTS/RTS optional, support PORT1 pins
  • #1503 Components: add GPIO, LED, AlarmMux, UartMux
  • #1504 nrf52: gpio: make disable_input a no-op
  • #1505 Add an InterruptService for chips of the nRF5x family.
  • #1506 doc: add style doc
  • #1507 doc: Add missing table of contents to docs
  • #1508 doc/policy: Core Team Information
  • #1509 doc: updating porting guide
  • #1510 RFC: Register visibility granularity
  • #1511 Migrate the last of the old arch stuff to the new registers interface
  • #1514 Add debug statements to show how and where process are loaded from flash to sram.
  • #1516 Fix nrf5x's counter register to use 24 bits instead of 32 (fix #1515).
  • #1519 doc: Add explicit Code of Conduct to top-level README
  • #1520 Fix in-kernel storage allocation macro and section.
  • #1522 Transitions virtual UART to use a deferred callback
  • #1523 Add a notice about QEMU support
  • #1525 update adc capsule to use grant
  • #1527 Improve display of MPU layout in Cortex-M panic handler
  • #1528 libraries/tock-cells: remove unsafe from TakeCell
  • #1529 Fix restarting apps
  • #1530 capsules: show process restarts in process console
  • #1531 Fix counting the number of syscalls a process has called.
  • #1533 libraries: cells: add more to numeric cell
  • #1535 Fix formatting bug in markdown
  • #1536 kernel: lib: make process::Error public
  • #1537 tock-registers: release v0.5
  • #1539 Update nrf52840dk README
  • #1540 Add a simple alarm test. It fires the first alarm in about 10 seconds.
  • #1541 use new components for nrf52 boards
  • #1543 Add support for USB bulk/interrupt on the nrf52 chip.
  • #1546 Update Rust nightly version
  • #1547 Use static_init in the DebugWriter component to create debug buffers.
  • #1548 Add kernel::debug::IoWrite trait and remove unsound str::from_utf8_unchecked (fix #1449)
  • #1550 readme: add link to docs.tockos.org
  • #1551 Add Analog_Comparator for nrf52840
  • #1553 doc: restore documentation for hidden items
  • #1554 Add support for structs with a lifetime parameter in register_structs.
  • #1556 Refactor Segger RTT and add a usb_debugging mode on the nRF52840-DK board
  • #1558 Fixing GPIO component and missing FloatingState
  • #1561 Add make audit command based on Cargo audit.
  • #1562 arch/rv32i: Implement proper atomic helper
  • #1564 chips: doc: update supported HIL table
  • #1565 kernel: Add trait for process restart policies
  • #1566 kernel: Add an "identifier" to AppId
  • #1567 libraries/riscv-csr: Fix warning under cargo test
  • #1570 CI: build the rust tools during CI
  • #1571 Update booting information with some details about RISC-V
  • #1574 arch/rv32i: Simplify mcause CSR parsing
  • #1578 boards/opentitan: Add support for the LED HIL
  • #1579 add set_vector_table_offset()
  • #1580 Create a log storage capsule
  • #1581 Layered networking capabilities
  • #1582 doc: fix syntax highlighting tag
  • #1587 arch/rv32i: Rework switch_to_userspace handler
  • #1588 kernel: give processes unique identifiers
  • #1589 Add support for RISC-V PMP
  • #1590 Printing system state refactoring between Chip and Process
  • #1592 chips/ibex: update for register layout changes
  • #1593 Removed useless allow(dead_code) in components.
  • #1594 Add OpenTitan Working Group
  • #1595 arch/rv32i: Fix up the PMP CFG offsets
  • #1596 Fix broken link to JTAG instructions
  • #1598 chips/ibex: Normalize timer interrupt handler
  • #1599 nrf52: remove duplicate radio reference
  • #1600 boards/opentitan: Hookup Low Level Debug (lldb)
  • #1601 Print out syscall return value as a format instead of a number
  • #1603 rv32i: pmp: use TOR in disable_mpu
  • #1604 arty-e21: enable PMP
  • #1605 opentitan: Increase the App memory
  • #1606 boards/opentitan: Fix bad pointer dereference
  • #1608 Correct Name Spelling
  • #1609 ADC Capsule: More work on supporting restarts.
  • #1610 boards/opentitan: Connect the GPIO capsule
  • #1611 Enable AES hardware block for OpenTitan
  • #1612 nRF51 Serialization: Support restarting apps
  • #1613 kernel: don't cache the process appid in main loop
  • #1614 CRC: Add set_client to HIL
  • #1615 opentitan: notes 2020-02-14
  • #1617 Update nrf52dk README
  • #1620 Notes from 2/21 call.
  • #1621 doc: wg: Add Silvestrs to the OpenTitan WG
  • #1622 doc: OpenTitan: add 2020-02-21 notes
  • #1623 Flash HIL: return buffers if errors
  • #1627 [libraries enum primitive]: fix failing tests
  • #1631 Update rust Feb, 2020
  • #1632 Add a threat model to Tock's documentation.
  • #163...
Read more

Tock 1.5 Release Candidate 4

30 Apr 13:43
9c52825
Compare
Choose a tag to compare
Pre-release

Updates in this RC:

  • Documentation: meeting notes and figure correction.
  • Updates to arty-e21 board/chip.