Zephyr Kernel v1.6.0 Release Notes

Release notes

Dec 3, 2016

We are pleased to announce the release of Zephyr kernel version 1.6.0. This release introduces the unified Kernel replacing the separate nano- and micro-kernels and simplifies the overall Zephyr architecture and programming interfaces. Support for the ARM Cortex-M0/M0+ family was added and board support for Cortex-M was expanded. Additionally, this release adds many improvements for documentation, build infrastructure, and testing.

Major enhancements included with the release:

  • Introduced the Unified Kernel; the nano and micro kernel were removed.
  • The legacy API is still supported but deprecated.
  • Legacy tests and samples were moved to tests/legacy and samples/legacy.
  • Unified kernel documentation was added and legacy nanokernel/microkernel documentation was removed.
  • Added support for several ARM Cortex-M boards
  • Added support for USB mass storage and access to the filesystem.
  • Added native Bluetooth Controller support. Currently nRF51 & nRF52 are supported.

A detailed list of changes since v1.5.0 by component follows:

Kernel

  • Introduced the unified kernel.
  • Removed deprecated Tasks IRQs.
  • Removed deprecated dynamic interrupt API.
  • Added DLIST to operate in all elements of a doubly-linked list.
  • SLIST: Added sys_slist_get() to fetch and remove the head, also Added append_list and merge_slist.
  • Added nano_work_pending to check if it is pending execution.
  • Unified: Added support for k_malloc and k_free.
  • Renamed kernel objects event to alert and memory map to memory slab.
  • Changed memory pool, memory maps, message queues and event handling APIs.

Architectures

  • ARC: Removed CONFIG_TIMER0_CLOCK_FREQ.
  • ARC: Unified linker scripts.
  • ARC: Removed dynamic interrupts.
  • ARM: Added choice to use floating point ABI.
  • ARM: Added NXP Kinetis kconfig options to configure clocks.
  • ARM: Removed dynamic interrupts and exceptions.
  • ARM: Atmel: Added constants and structures for watchdog registers.
  • ARM: Added support for ARM Cortex-M0/M0+.
  • x86: Removed dynamic interrupts and exceptions.
  • x86: Declared internal API for interrupt controllers.
  • x86: Changed IRQ controller to return -1 if cannot determine source vector.
  • x86: Grouped Quark SoC's under intel_quark family.
  • x86: Optimized and simplified IRQ and exception stubs.

Boards

  • Renamed board Quark SE devboard to Quark SE C1000 devboard.
  • Renamed board Quark SE SSS devboard to Quark SE C1000 SS devboard.
  • Quark SE C1000: Disabled IPM and enabled UART0 on the Sensor SubSytem.
  • Removed basic_cortex_m3 and basic_minuteia boards.
  • Arduino 101: Removed backup/restore scripts. To restore original bootloader use flashpack utility instead.
  • Renamed nRF52 Nitrogen to 96Boards Nitrogen.
  • Added ARM LTD Beetle SoC and V2M Beetle board.
  • Added Texas Instruments CC3200 LaunchXL support.
  • Added support for Nordic Semiconductor nRF51822.
  • Added support for NXP Hexiwear board.

Drivers and Sensors

  • SPI: Fixed typos in SPI port numbers.
  • Pinmux: Removed Quark dev unused file.
  • I2C: Added KSDK shim driver.
  • Ethernet: Added KSDK shim driver.
  • Flash: Added KSDK shim driver
  • I2C: Changed config parameters to SoC specific.
  • QMSI: Implemented suspend and resume functions QMSI shim drivers
  • Added HP206C sensor.
  • Changed config_info pointers to const.
  • Added support for SoCWatch driver.
  • Added FXOS8700 accelerometer / magnetometer sensor driver.

Networking

  • Minor fixes to uIP networking stack (This will be deprecated in 1.7)

Bluetooth

  • Added native Bluetooth Controller support. Currently nRF51 & nRF52 are supported.
  • New location for Controller & Host implementations: subsys/bluetooth/
  • Added raw HCI API to enable physical HCI transport for a Controller-only build.
  • Added sample raw HCI apps for USB and UART.
  • Added cross-transport pairing support for the Security Manager Protocol.
  • Added RFCOMM support (for Bluetooth Classic)
  • Added basic persistent storage support (filesystem-backed)
  • Renamed bt_driver API to bt_hci_driver, in anticipation of Bluetooth radio drivers.

Build Infrastructure

  • Makefile: Changed outdir into board-specific directory to avoid build collisions.
  • Makefile: Changed to use HOST_OS environment variable.
  • Makefile: Added support for third party build systems.
  • Sanity: Added support to filter using environment variables.
  • Sanity: Added support for multiple toolchains.
  • Sanity: Added ISSM and ARM GCC embedded toolchains to the supported toolchains.
  • Sanity: Added extra arguments to be passed to the build.
  • Sanity: Removed linker VMA/LMA offset check.
  • Sysgen: Added --kernel_type argument.
  • Modified build infrastructure to support unified kernel.
  • SDK: Zephyr: Added check for minimum required version.
  • Imported get_maintainer.pl from Linux kernel.

Libraries

  • libc: Added subset of standard types in inttypes.h.
  • libc: Added support for 'z' length specifier.
  • libc: Removed stddef.h which is provided by the compiler.
  • libc: printf: Improved code for printing.
  • printk: Added support for modifiers.
  • Added CoAP implementation for Zephyr.
  • File system: Added API to grow or shrink a file.
  • File system: Added API to get volume statistics.
  • File system: Added API to flush cache of an opened file.

HALs

  • QMSI: Updated to version 1.3.1.
  • HAL: Imported CC3200 SDK.
  • Imported Nordic MDK nRF51 files.
  • Imported Kinetis SDK Ethernet phy driver.
  • Imported SDK RNGA driver.

Documentation

  • Drivers: Improved Zephyr Driver model.
  • Updated device power management API.
  • Unified Kernel primer.
  • Moved supported board information to the wiki.zephyrproject.org site.
  • Revised documentation for Kernel Event logger and Timing.

Test and Samples

  • Fixed incorrect printk usage.
  • Removed test for dynamic exceptions.
  • Added USB sample.
  • Added tests and samples for CoAP client and server.
  • Added philosophers unified sample.
  • Removed printf/printk wrappers.
  • Added Unified kernel API samples.
  • Imported tinycrypt test cases for CTR, ECC DSA and ECC DH algorithm.

Deprecations

  • Deprecated microkernel and nanokernel APIs.
  • Removed dynamic IRQs and exceptions.
  • Removed Tasks IRQs.

JIRA Related Items

  • [ZEP-308] - Build System cleanup and Kernel / Application build separation
  • [ZEP-334] - Unified Kernel
  • [ZEP-766] - USB Mass Storage access to internal filesystem
  • [ZEP-1090] - CPU x86 save/restore using new QMSI bootloader flow
  • [ZEP-1173] - Add support for bonding remove
  • [ZEP-48] - define API for interrupt controllers
  • [ZEP-181] - Persistent storage APIs
  • [ZEP-233] - Support USB mass storage device class
  • [ZEP-237] - Support pre-built host tools
  • [ZEP-240] - printk/printf usage in samples
  • [ZEP-248] - Add a BOARD/SOC porting guide
  • [ZEP-342] - USB DFU
  • [ZEP-451] - Quark SE output by default redirected to IPM
  • [ZEP-521] - ARM - add choice to floating point ABI selection
  • [ZEP-546] - UART interrupts not triggered on ARC
  • [ZEP-584] - warn user if SDK is out of date
  • [ZEP-592] - Sanitycheck support for multiple toolchains
  • [ZEP-605] - SMP over BR/EDR
  • [ZEP-614] - Port tinycrypt 2.0 test cases to Zephyr
  • [ZEP-622] - Add FS API to truncate/shrink a file
  • [ZEP-627] - Port Trickle support from Contiki into current stack
  • [ZEP-635] - Add FS API to grow a file
  • [ZEP-636] - Add FS API to get volume total and free space
  • [ZEP-640] - Remove dynamic IRQs/exceptions from Zephyr
  • [ZEP-653] - QMSI shim driver: Watchdog: Implement suspend and resume callbacks
  • [ZEP-654] - QMSI shim driver: I2C: Implement suspend and resume callbacks
  • [ZEP-657] - QMSI shim driver: AONPT: Implement suspend and resume callbacks
  • [ZEP-661] - QMSI shim driver: SPI: Implement suspend and resume callbacks
  • [ZEP-688] - unify duplicated sections of arch linker scripts
  • [ZEP-715] - Add K64F clock configurations
  • [ZEP-716] - Add Hexiwear board support
  • [ZEP-717] - Add ksdk I2C shim driver
  • [ZEP-718] - Add ksdk ethernet shim driver
  • [ZEP-721] - Add FXOS8700 accelerometer/magnetometer sensor driver
  • [ZEP-737] - Update host tools from upstream: fixdep.c
  • [ZEP-740] - PWM API: Check if 'flags' argument is really required
  • [ZEP-745] - Revisit design of PWM Driver API
  • [ZEP-750] - Arduino 101 board should support one configuration using original bootloader
  • [ZEP-758] - Rename Quark SE Devboard to its official name: Quark SE C1000
  • [ZEP-767] - Add FS API to flush cache of an open file
  • [ZEP-775] - Enable USB CDC by default on Arduino 101 and redirect serial to USB
  • [ZEP-783] - ARM Cortex-M0/M0+ support
  • [ZEP-784] - Add support for Nordic Semiconductor nRF51822 SoC
  • [ZEP-850] - remove obsolete boards basic_minuteia and basic_cortex_m3
  • [ZEP-906] - [unified] Add scheduler time slicing support
  • [ZEP-907] - Test memory pool support (with mailboxes)
  • [ZEP-908] - Add task offload to fiber support
  • [ZEP-909] - Adapt tickless idle + power management for ARM
  • [ZEP-910] - Adapt tickless idle for x86
  • [ZEP-912] - Finish renaming kernel object types
  • [ZEP-916] - Eliminate kernel object API anomalies
  • [ZEP-920] - Investigate malloc/free support
  • [ZEP-921] - Miscellaneous documentation work
  • [ZEP-922] - Revise documentation for Kernel Event Logger
  • [ZEP-923] - Revise documentation for Timing
  • [ZEP-924] - Revise documentation for Interrupts
  • [ZEP-925] - API changes to message queues
  • [ZEP-926] - API changes to memory pools
  • [ZEP-927] - API changes to memory maps
  • [ZEP-928] - API changes to event handling
  • [ZEP-930] - Cutover to unified kernel
  • [ZEP-933] - Unified kernel ARC port
  • [ZEP-934] - NIOS_II port
  • [ZEP-935] - Kernel logger support (validation)
  • [ZEP-954] - Update device PM API to allow setting additional power states
  • [ZEP-957] - Create example sample for new unified kernel API usage
  • [ZEP-959] - sync checkpatch.pl with upstream Linux
  • [ZEP-966] - need support for EM7D SOC on em_starterkit
  • [ZEP-975] - DNS client port to new IP stack
  • [ZEP-981] - Add doxygen documentation to both include/kernel.h and include/legacy.h
  • [ZEP-989] - Cache next ready thread instead of finding out the long way
  • [ZEP-993] - Quark SE (x86): Refactor save/restore execution context feature
  • [ZEP-994] - Quark SE (ARC): Add PMA sample
  • [ZEP-996] - Refactor save/restore feature from i2c_qmsi driver
  • [ZEP-997] - Refactor save/restore feature from spi_qmsi driver
  • [ZEP-998] - Refactor save/restore feature from uart_qmsi driver
  • [ZEP-999] - Refactor save/restore feature from gpio_qmsi driver
  • [ZEP-1000] - Refactor save/restore feature from rtc_qmsi driver
  • [ZEP-1001] - Refactor save/restore feature from wdt_qmsi driver
  • [ZEP-1002] - Refactor save/restore feature from counter_qmsi_aonpt driver
  • [ZEP-1004] - Extend counter_qmsi_aon driver to support save/restore peripheral context
  • [ZEP-1005] - Extend dma_qmsi driver to support save/restore peripheral context
  • [ZEP-1006] - Extend soc_flash_qmsi driver to support save/restore peripheral context
  • [ZEP-1008] - Extend pwm_qmsi driver to support save/restore peripheral context
  • [ZEP-1023] - workq in Kernel primer for unified kernel
  • [ZEP-1030] - Enable QMSI shim drivers of SoC peripherals on the sensor subsystem
  • [ZEP-1043] - Update QMSI to 1.2
  • [ZEP-1045] - Add/Enhance shim layer to wrap SOC specific PM implementations
  • [ZEP-1046] - Implement RAM sharing between bootloader and Zephyr
  • [ZEP-1047] - Adapt to new PM related boot flow changes in QMSI boot loader
  • [ZEP-1106] - Fix all test failures from TCF
  • [ZEP-1107] - Update QMSI to 1.3
  • [ZEP-1109] - Texas Instruments CC3200 LaunchXL Support
  • [ZEP-1119] - move top level usb/ to sys/usb
  • [ZEP-1120] - move top level fs/ to sys/fs
  • [ZEP-1121] - Add config support for enabling SoCWatch in Zephyr
  • [ZEP-1140] - Add a unified kernel version of power_mgr sample app for testing PM code with the new kernel
  • [ZEP-1188] - Add an API to retrieve pending interrupts for wake events
  • [ZEP-1191] - Create wiki page for Hexiwear board
  • [ZEP-1235] - Basic shell support for file system browsing
  • [ZEP-1245] - ARM LTD V2M Beetle Support
  • [ZEP-1313] - porting and user guides must include a security section
  • [ZEP-1386] - Revise power management document to reflect latest changes
  • [ZEP-199] - Zephyr driver model is undocumented
  • [ZEP-436] - Test case tests/kernel/test_mem_safe fails on ARM hardware
  • [ZEP-471] - Ethernet packet with multicast address is not working
  • [ZEP-472] - Ethernet packets are getting missed if sent in quick succession.
  • [ZEP-517] - build on windows failed "zephyr/Makefile:869: *** multiple target patterns"
  • [ZEP-528] - ARC has 2 almost identical copies of the linker script
  • [ZEP-577] - Sample application source does not compile on Windows
  • [ZEP-601] - enable CONFIG_DEBUG_INFO
  • [ZEP-602] - unhandled CPU exceptions/interrupts report wrong faulting vector if triggered by CPU
  • [ZEP-615] - Un-supported flash erase size listed in SPI flash w25qxxdv driver header file
  • [ZEP-639] - device_pm_ops structure should be defined as static
  • [ZEP-686] - docs: Info in "Application Development Primer" and "Developing an Application and the Build System" is largely duplicated
  • [ZEP-698] - samples/task_profiler issues
  • [ZEP-707] - mem_safe test stomps on top of .data and bottom of .noinit
  • [ZEP-724] - build on windows failed: 'make: execvp: uname: File or path name too long'
  • [ZEP-733] - Minimal libc shouldn't be providing stddef.h
  • [ZEP-762] - unexpected "abspath" and "notdir" from mingw make system
  • [ZEP-777] - samples/driver/i2c_stts751: kconfig build warning from "select DMA_QMSI"
  • [ZEP-778] - Samples/drivers/i2c_lsm9ds0: kconfig build warning from "select DMA_QMSI"
  • [ZEP-779] - Using current MinGW gcc version 5.3.0 breaks Zephyr build on Windows
  • [ZEP-845] - UART for ARC on Arduino 101 behaves unexpectedly
  • [ZEP-905] - hello_world compilation for arduino_due target fails when using CROSS_COMPILE
  • [ZEP-940] - Fail to get ATT response
  • [ZEP-950] - USB: Device is not listed by USB20CV test suite
  • [ZEP-961] - samples: other cases cannot execute after run aon_counter case
  • [ZEP-967] - Sanity doesnt build 'samples/usb/dfu' with assertions (-R)
  • [ZEP-970] - Sanity doesnt build 'tests/kernel/test_build' with assertions (-R)
  • [ZEP-982] - Minimal libc has EWOULDBLOCK != EAGAIN
  • [ZEP-1014] - [TCF] tests/bluetooth/init build fail
  • [ZEP-1025] - Unified kernel build sometimes breaks on a missing .d dependency file.
  • [ZEP-1027] - Doccumentation for GCC ARM is not accurate
  • [ZEP-1031] - qmsi: dma: driver test fails with LLVM
  • [ZEP-1048] - grove_lcd sample: sample does not work if you disable serial
  • [ZEP-1051] - mpool allocation failed after defrag twice...
  • [ZEP-1062] - Unified kernel isn't compatible with CONFIG_NEWLIB_LIBC
  • [ZEP-1074] - ATT retrying misbehaves when ATT insufficient Authentication is received
  • [ZEP-1076] - "samples/philosophers/unified" build failed with dynamic stack
  • [ZEP-1077] - "samples/philosophers/unified" build warnings with NUM_PHIL<6
  • [ZEP-1079] - Licensing not clear for imported components
  • [ZEP-1097] - ENC28J60 driver fails on concurrent tx and rx
  • [ZEP-1098] - ENC28J60 fails to receive big data frames
  • [ZEP-1100] - Current master still identifies itself as 1.5.0
  • [ZEP-1101] - SYS_KERNEL_VER_PATCHLEVEL() and friends artificially limit version numbers to 4 bits
  • [ZEP-1124] - tests/kernel/test_sprintf/microkernel/testcase.ini#test failure on frdm_k64f
  • [ZEP-1130] - region 'RAM' overflowed occurs while building test_hmac_prng
  • [ZEP-1138] - Recived packets not being passed to upper layer from IP stack when using ENC28J60 driver
  • [ZEP-1139] - Fix build error when power management is built with unified kernel
  • [ZEP-1141] - Tinycrypt SHA256 test fails with system crash using unified kernel type
  • [ZEP-1144] - Tinycrypt AES128 fixed-key with variable-text test fails using unified kernel type
  • [ZEP-1145] - system hang after tinycrypt HMAC test
  • [ZEP-1146] - zephyrproject.org home page needs technical scrub for 1.6 release
  • [ZEP-1149] - port ztest framework to unified kernel
  • [ZEP-1154] - tests/samples failing with unified kernel
  • [ZEP-1155] - Fix filesystem API namespace
  • [ZEP-1163] - LIB_INCLUDE_DIR is clobbered in Makefile second pass
  • [ZEP-1164] - ztest skip waiting the test case to finish its execution
  • [ZEP-1179] - Build issues when compiling with LLVM from ISSM (icx)
  • [ZEP-1182] - kernel.h doxygen show unexpected "asm" blocks
  • [ZEP-1183] - btshell return "panic: errcode -1" when init bt
  • [ZEP-1195] - Wrong ATT error code passed to the application
  • [ZEP-1199] - [L2CAP] No credits to receive packet
  • [ZEP-1219] - [L2CAP] Data sent exceeds maximum PDU size
  • [ZEP-1221] - Connection Timeout during pairing
  • [ZEP-1226] - cortex M7 port assembler error
  • [ZEP-1227] - ztest native testing not working in unified kernel
  • [ZEP-1232] - Daily build is failing asserts
  • [ZEP-1234] - Removal of fiber* APIs due to unified migration breaks USB mass storage patchset
  • [ZEP-1247] - Test tests/legacy/benchmark/latency_measure is broken for daily sanitycheck
  • [ZEP-1252] - Test test_chan_blen_transfer does not build for quark_d2000_crb
  • [ZEP-1277] - Flash driver (w25qxxdv) erase function is not checking for offset alignment
  • [ZEP-1278] - Incorrect boundary check in flash driver (w25qxxdv) for erase offset
  • [ZEP-1287] - ARC SPI 1 Port is not working
  • [ZEP-1289] - Race condition with k_sem_take
  • [ZEP-1291] - libzephyr.a dependency on phony "gcc" target
  • [ZEP-1293] - ENC28J60 driver doesn't work on Arduino 101
  • [ZEP-1295] - incorrect doxygen comment in kernel.h:k_work_pending()
  • [ZEP-1297] - test/legacy/kernel/test_mail: failure on ARC platforms
  • [ZEP-1299] - System can't resume completely with DMA suspend and resume operation
  • [ZEP-1302] - ENC28J60 fails with rx/tx of long frames
  • [ZEP-1303] - Configuration talks about >32 thread prios, but the kernel does not support it
  • [ZEP-1309] - ARM uses the end of memory for its init stack
  • [ZEP-1310] - ARC uses the end of memory for its init stack
  • [ZEP-1312] - ARC: software crashed at k_mbox_get() with async sending a message
  • [ZEP-1319] - Zephyr is unable to compile when CONFIG_RUNTIME_NMI is enabled on ARM platforms
  • [ZEP-1341] - power_states test app passes wrong value as power state to post_ops functions
  • [ZEP-1343] - tests/drivers/pci_enum: failing on QEMU ARM and X86 due to missing commit
  • [ZEP-1345] - cpu context save and restore could corrupt stack
  • [ZEP-1349] - ARC sleep needs to pass interrupt priority threshold when interrupts are enabled
  • [ZEP-1353] - FDRM k64f Console output broken on normal flash mode

Known Issues

  • [ZEP-1405] - function l2cap_br_conn_req in /subsys/bluetooth/host/l2cap_br.c references uninitialized pointer
Clone with Git
git clone https://gerrit.zephyrproject.org/r/zephyr && cd zephyr && git checkout tags/v1.6.0