nuttx/Documentation/ReleaseNotes/NuttX-6.25

320 lines
11 KiB
Plaintext
Raw Normal View History

NuttX-6.25
----------
The 92nd release of NuttX, Version 6.25, was made on February 1, 2013,
and is available for download from the SourceForge website. Note
that release consists of two tarballs: nuttx-6.25.tar.gz and
apps-6.25.tar.gz. Both may be needed (see the top-level nuttx/README.txt
file for build information).
This release corresponds with SVN release number: r5595
Note that all SVN information has been stripped from the tarballs. If you
need the SVN configuration information, you should check out directly from
SVN. Revision r5595 should equivalent to release 6.25 of NuttX:
svn checkout -r5595 svn://svn.code.sf.net/p/nuttx/code/trunk nuttx-code
Or (HTTP):
svn checkout -r5595 http://svn.code.sf.net/p/nuttx/code/trunk nuttx-code
Additional new features and extended functionality:
* OS Initialization
- Removed support for CONFIG_BUILTIN_APP_START. This is not really a
useful feature and creates a violation of the OS layered
architecture.
* Task Creation:
- Implement a simple vfork(). In NuttX-6.25, this interface is
available only for ARM7/9, ARMv7-M (Cortext-M3/4), and MIPS32
(PIC32MX) platforms.
- exec() now sets the priority of the new task to the same priority as
the parent task (instead of the arbitrary value of 50).
- New, partially compliant implementations of execv() and execl().
These are only partially compliant because they do not overlay any
existing "process space" but rather create the new task and exit().
- Add a complete implementation of posix_spawn(). This standard
interface is a better match for an MMU-less architecture than are
vfork() plus execv() or execl().
- Add a task start hook that will be called before the task main
is started. This can be used, for example, to schedule C++
static constructors to run automatically in the context of the
new task.
* Task Parentage
- Repartitioned tasking data structures. All shared resources are now
collected together in a "task group". A task group includes the
original task plus all of the pthreads created by the task.
- Added support for remember the parent "task group" when a new task is
started.
- Added optional support to record the membership of each thread in
the "task group".
- Implement support for retaining child task status in the "task group"
after the child task exists. This is behavior required by POSIX.
But in NuttX is only enabled with CONFIG_SCHED_HAVE_PARENT and
CONFIG_SCHED_CHILD_STATUS
- Add internal logic to "reparent" a task. This is useful,
for example, where the child task is created through a trampoline
task that redirects I/O. Reparenting allows the caller of posix_spawn()
to be reparented for the eventual child thread.
- Added support for SIGCHLD. Sent to all members of the parent task
group when the file member of the child task group exits.
- If SIGCHLD and retention of child task exist status are enabled, then
a more spec-compliant version of waitpid() is enabled.
- New interfaces waitid() and wait() are also enabled when SIGCHLD
is enabled.
* File System
- dup() and dup2() can new be used with opened files in a mounted file
system. This supports re-direction of output in NSH to files.
- The binfs file system was moved from apps/builtin to fs/binfs. The
binfs file system was extended to support execution of "builtin
applications" using exec(), execv(), execl(), or posix_spawn().
- Added logic based on SIGCHLD to automatically unload and clean-up
after running a task that was loaded into memory.
* Binary Formats
- Much of the logic for "builtin applications" was moved from
apps/builtin to nuttx/binfmt/libbuiltin. Includes some extensions
contributed by Mike Smith.
- A binary loader was added for builtin applications to support
execution of "builtin applications" using exec(), execv(),
execl(), or posix_spawn().
* Drivers:
- Added logic to marshal and serialized "out-of-band" keyboard
commands (such as cursor controls and key release events) intermixed
with normal ASCII keypress data. The encoding is partially integrated
in the HID keyboard driver and the decoding full integrated into the
apps/examples hidkbd and keypadtest (the latter contributed by Denis
Carlikli).
- Driver for the UG-2864HSWEG01 OLED contributed by Darcy Gong.
- Add support for removable serial devices (like USB serial). This
support is enabled by CONFIG_SERIAL_REMOVABLE.
* ARMv7-M:
- Added an option to use the BASEPRI register to disable interrupts
(instead of the PRIMASK). This eliminates some innocuous hardfaults
that interfere with some debug tools. You need to switch to the
BASEPRI method only if you have such tool interference.
* STM32 Drivers
- Bring STM32 F1 DMA capabilities up to par with the STM32 F2/F4
(contributed by Mike Smith).
- Add support for USART single wire mode (Contributed by the PX4
team).
- Updates to support for SPI DMA on the STM32 F1/F2/F4. From
Petteri Aimonen.
* STM32 Boards:
- New configuration to support the UG-2864HSWEG01 OLED on the
STM32F4Discovery board.
- Added a posix_spawn() test configuration for the STM32F4Discovery.
* LM3S/LM4F
- Files and directories repartitioned to support both LM3S and LM4F
using the STM32 organization as a model.
- Partial definitions for the LM4F contributed by Jose Pablo Carballo
(this is still a work in progress).
* LM3S Boards
- Added scripts and documentation to use OpenOCD with the LM3S (from
Jose Pablo Carballo).
* LPC176x/LPC178x
- Files and directories repartitioned to support both LPC175x/LPC176x
and the LPC177x/LPC178x families using the STM32 organization as a
model. The LPC1788 port is a work in progress by Rommel Marcelo.
* LPC176x/LPC178x Boards:
- Added a configuration to support the Wave Share Open1788 board.
This is still a work in progress by Rommel Marcelo.
* LPC2148 Boards:
- Add basic support for the The0.net ZP213x/4xPA board (with the LPC2148
and the UG_2864AMBAG01 OLED).
- Add an nxlines configuration for the ZP213x/4xPA (with the LPC2148
and the UG_2864AMBAG01).
* Simulator:
- Add an nxlines configuration for the simulator.
* Networking:
- Add logic to work around delayed ACKs by splitting packets
(contributed by Yan T.).
- Split net_poll() to create the internal interface psock_poll().
* LCDs:
- Added support for LCD1602 alphanumeric LCD (HD4468OU controller).
* Graphics:
- Added 5x8 monospace font. This tiny font is useful for graph
labels and for small bitmapped display. Contributed by Petteri
Aimonen.
* Build System:
- Add an options to better manage toolchain prefixes.
- Redesigned how the context target works in the apps/ directory.
The old design caused lots of problems when changing configurations
because there is no easy way to get the system to rebuild the
context. This change should solve most the problems and eliminate
questions like "Why don't I see my builtin application in NSH?"
* Kconfig Files:
- There are several new configurations that use the kconfig-frontends
tools and several older configurations that have been converted to
use these tools. There is still a long way to go before the conversion
is complete:
configs/sim/nxwm
configs/sim/nsh
configs/stm3220g-eval/nxwm
configs/stm32f4discovery/posix_spawn
configs/olimex-lpc1766stk/nsh
configs/olimex-lpc1766stk/hidkbd
configs/olimex-lpc1766stk/nettest
configs/open1788/ostest
configs/stm32f4discovery/nsh
configs/stm32f4discovery/usbnsh
configs/lm326965-ek (all configurations)
configs/mcu123-214x/nsh
configs/ubw32/ostest
* Tools:
- tools/kconfig.bat: Kludge to run kconfig-frontends from a DOS shell.
- tools/configure.c: configure.c can be used to build a work-alike
program as a replacement for configure.sh. This work-alike
program would be used in environments that do not support Bash
scripting (such as the Windows native environment).
- tools/configure.bat: configure.bat is a small Windows batch
file that can be used as a replacement for configure.sh in a
Windows native environment. configure.bat is actually just a
thin layer that executes configure.exe if it is available. If
configure.exe is not available, then configure.bat will attempt
to build it first.
* Applications:
- New and modified examples:
apps/examples/wlan: Remove non-functional example.
apps/examples/ostest: Added a test of vfork(). Extend signal
handler test to catch death-of-child signals (SIGCHLD). Add a
test for waitpid(), waitid(), and wait().
apps/exampes/posix_spawn: Added a test of posix_spawn().
- NSH:
NSH now supports re-direction of I/O to files (but still not from).
The block driver source argument to the mount command is now
optional for file systems that do not require a block driver.
NSH can now execute a program from a file system using posix_spawn().
Added support for a login script. The init.d/rcS script will be
executed once when NSH starts; the .nshrc script will be executed
for each session: Once for serial, once for each USB connection,
once for each Telnet session.
- Supports a new daemon that can be used to monitor USB trace outpout.
- Removed non-functional wlan example.
Bugfixes (see the ChangeLog for details). Some of these are very important:
* Tasking:
- Fixed a *critical* task exit bug. Here is the failure scenario:
(1) sched_lock() is called increments the lockcount on the current
TCB (i.e., the one at the head of the ready to run list), (2)
sched_mergepending is called which may change the task at the head
of the ready-to-run list, then (3) sched_unlock() is called which
decrements the lockcount on the wrong TCB. The failure case that
I saw was that pre-emption got disabled in the IDLE thread, locking
up the whole system.
* Signals:
- sigtimedwait() would return a bad signal number if the signal was
already pending when the function was called.
* Drivers:
- Some SD cards will appear busy until switched to SPI mode for
first time. Having a pull-up resistor on MISO may avoid this
problem, but this fix from Petteri Aimonen makes it work also
without pull-up.
* STM32 Drivers:
- STM32 FLASH driver counting error (from Freddie Chopin).
- STM32 F4 maximum SPI frequency was wrong (corrected by Petteri
Aimonen).
* STM32 Boards
- Due to cloning of untested code, the logic to control on-board
LEDs did not work on any STM32 boards.
- Serial devices number /dev/ttyS0-5 is there is a serial console,
but /dev/ttyS1-6 if there is no serial console.
* Binary Formats
- C++ static constructors execute now using a start taskhook
so that they execute in the context of the child task (instead
of in the context of the parent task).
* File Systems:
- Several FAT-related bugs fixed by Petteri Aimonen.
* Networking:
- Fix poll/select issure reported by Qiang: poll_interrupt() must call
net_lostconnection() when a loss of connection is reported. Otherwise,
the system will not remember that the connection has been lost and will
hang waiting on a unconnected socket later.
- Similar issues corrected for recvfrom() and send().
- Telnetd would hang in a loop if recv() ever returned a value <= 0.
* Libraries:
- fread() could hang on certain error conditions.
- Can't handle SYSLOG output to a character device from the IDLE task
(because the IDLE task can't block).
* Build System:
- Serial was driver was not being built if there is no console
device. Obviously, the serial driver may be needed even in
this case.
* Additional Bugfixes:
- sig_timedwait() and clock_time2ticks.c: Timing "rounding" logic
- ARM9 Compilation issue with low vectors.
- readline() return value
- Others as detailed in the ChangeLog: HID keyboard, LPC17xx bit
definitions, strndup(), PL2303, SYSLOG error handling, AT25,
apps/examples.