Newer
Older
* Memory Management:
- Granule Allocator: (1) Add a new function to reserve un-allocatable
regions in the granule heap. (2) Add interfaces to support
un-initializing a granule allocator.
- Page Allocator: Add a simple physical page allocator based on the
existing NuttX granule allocator. I am not certain if the granule
allocator is sufficiently deterministic for long range use, but it
gets get a page allocator in place for testing very quickly.
- Remove CONFIG_MM_MULTIHEAP. Non-multiheap operation is no longer
supported.
- sbrk(): sbrk() is now supported in the kernel build to permit
dynamically sized, per-process heaps.
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
- Per-Process Heaps: Space at the beginning of the process data space
is now reserved for user heap management structures. In the kernel
build mode, these heap structures are shared between the kernel and
use code in order to allocate user-specific data.
- User Heap Management: When a privileged thread exits, we have to
use the kernel allocator to free memory; when an unprivileged thread
exits, we don't have to do anything... heap memory will be cleaned
up when the address environment is torn down.
- Inter-Process Shared Memory Support: (1) Add implementation and
documentation for shmget(), shmctl(), shmat(), and shmdt(). (2)
Add system system calls to support the user call gate to the shared
memory interfaces. (3) Add platform-specific interface definitions
needed to support the shared memory feature.
- Virtual Page Allocator: Add support for a per-process virtual page
allocator. This is a new member of the task_group_s structure. The
allocator must be initialized when a new user process is started and
uninitialize when the process group is finally destroyed. It is
used by shmat() and shmdt() to pick the virtual address onto which
to map the shared physical memory.
* File Systems/Block Drivers/MTD:
- SMART FS and SMART FS procfs updates from Ken Pettit.
- The MTD Read-ahead/Write buffer layer appears is now functional.
* Binary Formats:
- Add logic to initialize the per-process user heap when each user
process is started.
* Graphics:
- Change all occurrences of NxConsole to NxTerm.
* Networking:
- PHY Interrupts: (1) Standardize a PHY interrupt attachment
interface. (2) Add support for an ioctl that can be used to notify
an application when there is a change in the network status
signalled by a PHY interrupt.
- Improved Send Logic: In the past, the first packet send to a new
network peer would fail; there would be no entry in the ARP table
for the peer and so an ARP request could replace that first packet.
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
Now as an option if CONFIG_NET_ARP_SEND=y, all send logic will (1)
check if the peer MAC address is in the ARP table and, if not, (2)
send ARP requests periodically to get the mapping and (3) wait for
the ARP response. Then (4) when the ARP response is received then
the actual send logic will be initiated. Thus there may be a delay
with the first packet sent to a new peer, but the packet should not
be lost
* Host Simulation:
- Emulated SPI FLASH driver for the sim target from Ken Pettit.
* Intel x86:
- The default host is now x86_64 and the -m32 option will be
automatically selected for simulation builds.
* Intel 8051 Family:
- Removed all support for the 8051 family architecture from the NuttX
source tree. The obsoleted code along with the removal patch can
now be found at misc/Obsoleted/. This code was removed because (1)
although some functionality has been demonstrated, I am not aware of
any really successful ports of NuttX to any 8051, and (2) the 8051,
with its hardware stack, forces limitations and complications to the
other architectures and make growth and development of NuttX more
complex.
* ZiLOG ZNeo Boards:
- configs/16z: Support for this board has been removed from the NuttX
source tree (but still can be found in the misc/Obsoleted
directory). This port is not ready for usage but may return to the
NuttX tree at some point in the future.
* Atmel SAM3/4 Boards:
- SAM4E-EK: Add (1) a fully-functional ILI9341-based LCD driver and
(2) a fully-functional NxWM configuration.
* ARMv7-A:
- Address Environments: Add support for application address
environments using the Cortex-A MMU. Implement standardized
platform-specific interfaces of NuttX address environment
support.
- Cache Operations: Implement standardized, platform-specific cache
operations. These are called from the ELF loader in order to flush
D-cache and invalidate I-cache after an ELF module has been loaded
into memory. With this change, ELF modules work correctly on the
SAMA5/Cortex-A platform.
- Kernel Build: (1) Add implementations of system call gate. (2) Add
CRT0 start-up file that can be linked with separately built user
programs. (3) Add support for delivery of use-mode signals in the
kernel build. (4) Add logic to initialize the per-process user heap
when each user process is started. (5) ARMv7-A exception handling
needs to work a little differently if we support user mode
processes. This is because R13 and R14 are paged differently
between user and SVC mode.
- Shared Memory Support: (1) Add logic necessary to handle remapping
of shared memory on context switches. (2) Extend virtual/physical
address conversions to include addresses in shared memory. (3) Add
implementation of platform-specific shared memory support.
* Atmel SAMA5D Drivers:
- Implement all network ioctls, including the new ioctl to setup PHY
event notifications.
- In kernel build with address environment, need logic to map user
virtual addresses to physical addresses, and vice versa.
* Atmel SAMA5D Boards:
- SAMA5D3 Xplained, SAMA5D3-EK, and SAMA5D4-EK: Convert existing
board specific PHY interrupt interfaces to use newly defined
standard interface.
- SAMA5D4-EK: Add a configuration for testing the kernel build
configuration. There are configurations to boot either from an SD
card or from and in-memory ROMFS file system.
- SAMA5D4-EK: Add documentation/support for Rev E. board.
* STMicro STM32 Drivers:
- Ethernet: Modified to support the change to the network ioctl
signature changes. Also add support for new ioctl to setup PHY
event notifications.
* STMicro STM32 Boards:
- STM32F4Discovery with STM32F4DIS-BB: Add a network enabled NSH
configuration for the STM32F4Discovery board with the STM32F4DIS-BB
base board installed. Includes support for the microSD card slot on
the STM32F4DIS-BB base board.
* TI Tiva Drivers:
- Add support for the TI CC3200. From Jim Ewing.
* TI Tiva Boards:
- Add support for the TI CC3200 Launchpad. From Jim Ewing.
* C Library:
- Re-implemented poll() delay using sem_timedwait().
* Configuration/Build System:
- Export Target: In the kernel or protected builds, (1) only the user
libraries should be exported, (2) do not copy internal header files
or build scripts if this is a kernel or protected build, and (3)
needs to bundle up the user C startup file (crt0), not the kernel
head object for the kernel and protected builds.
- Add logic that will permit us to build user libraries with different
CFLAGS than kernel code. This is needed because we need the
-fno-common option when building ELF code to prevent SHN_COMMON
relocations.
* Applications:
- NSH: Extend the NSH network initialization logic. There is now an
option that will create a network monitor thread that will monitor
the state of the link. When the link goes down, the code will
attempt to gracefully put the Ethernet driver in a down state; When
the link comes back, the code will attempt to bring the network back
up.
- ELF Example: The ELF test/example has been extended so the
individual ELF test programs can link against the SYSCALL library
(if it is available) or against the C library to eliminate or
minimize the need for symbol tables.
- Change all occurrences of NxConsole to NxTerm.
- MTDRWB Example: Add an example to test MTD R/W buffering.
- OS Test Example: Add a trivial test of sem_timedwait.
* Application Configuration/Build System:
- Import Target: (1) Add logic that will allow building applications
against a NuttX export package (vs. the nuttx/ source tree). (2)
Add .config file to export package. (3) Create apps/import. Create
apps/import/Make.defs that does things like define CFLAGS; ELF build
requires -fno-common in CFLAGS. Copy some base logic from
nuttx/tools/Config.mk to apps/import/Make.defs. (4) Add
apps/import/scripts/gnu-elf.ld GCC linker script for ELF import
builds.
- All Makefiles: (1) Add an install target to all makefiles. For
the import build, the top-level Makefile now does two passes: (1)
builds libapp.a, then (2) installs the programs into apps/bin. (2)
Add program installation for CONFIG_BUILD_KERNEL in all Makefiles
that build a main(). (3) For kernel build, the object file
containing main cannot go into library because of name collisions.
The object file must be handled as a special case in every Makefile.
- All Built-In Programs: With kernel build (CONFIG_BUILD_KERNEL),
entry point to all tasks is main(), not some xyz_main().
- NSH: Several commands must be disabled in the kernel build because
they depend on interfaces that are not available outside of the
kernel: dd, df, losetup, mkfatfs, mkdr, and ps.
- apps/tools/: (1) Add mkimport.sh to expload an NuttX import package
and install in apps/import. (2) Add mkromfsimg.sh script to create
a BOOT ROMFS filesystem image.
- ELF and NxFLAT Examples: Do not build test cases that use
task_create() if there is an address environment.
* Tools:
- refresh.sh: Add a tool to make refreshing configurations easier
when you want to do a lot of them.
- mksyscall.c: Build syscalls that do not need header files.
- mkexport.sh: Add .config file to export package.
- See above for new apps/tools scripts.
Efforts In Progress. The following are features that are partially
implemented but present in this release. They are not likely to be
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
completed soon.
* Processes. Much of the work in this release is focused on the
realization of Unix-style user processes in NuttX. There is more to
be done, however. The full roadmap and status is available at:
http://www.nuttx.org/doku.php?id=wiki:nxinternal:memconfigs#the_roadmap_toward_processes
* XMega: There are some fragments in place for an XMega port. That
port has not really started, however.
* Galileo: Similarly, there are fragments in place for an Intel Galileo
port. The port not been started in earnest either.
Bugfixes. Only the most critical bugfixes are listed here (see the ChangeLog for the complete list of bugfixes and for additional, more detailed bugfix information):
* Core OS:
- Kernel build fixes: (1) IDLE TCB setup needs to indicate that the
IDLE thread is a privileged, kernel thread. (2) Don't build
task_create() or task_spawn() interfaces if there is an address
environment. (3) posix_spawn() kernel proxy thread should be a
kernel thread, not a user task.
- Several pthread interfaces: Add const storage class to phthread
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
parameters. From Freddie Chopin.
- sched/clock: Remove vestiges of g_tickbias; need, instead, to apply
time bias to g_basetime in order to provide the correct system time.
- System Calls: (1) Several typos fixed; corrected integration of
exevc(), execvl(), posix_spawn, and posix_spawnp system calls. (2)
If we are configured to use a kernel stack while in SYSCALL handling,
then we need to switch back to the user stack to deliver a signal.
* File Systems/Block Drivers/MTD:
- procfs: Fix some procfs breakage introduced by reorganizing some
non-reorganizable data structures. From Ken Pettit.
- AT45: In at45db_bwrite , the buffer is not increased when writing
more than 1 page. Sourceforge bug #34.
* Binary Formats:
- ELF relocations. Some relocation types do not have a named symbol
associated with them. The design did not account for that case.
- ELF Loader: Critical bugfix.. BSS was not being cleared.
* Memory Management:
- Granule allocator initialization uses wrong allocator to setting
aside kernel memory.
- Add a flag to group structure: If the group is created by a kernel
thread, then all resources in the group must be privileged.
* Cryptogrphic Support:
- crypto/cryptodev.c: Path segments reversed in include file path. Noted by Brennan Ashton.
* Common Drivers:
- Common CAN upper-half: In can_txdone, waiters on the semaphore
should be informed regardless of the return value of can_xmit. First
it returns -EIO if there are no new packets, and second the
information of the waiters is about the last transferred packet.
From Daniel Lazlo Sitzer.
* ARM:
- System Calls: Fix a typo in system call when fetching parameter from
the stack: regs[REG_PC]+4 is the address, not regs[REG_PC+4].
* STMicro STM32 Drivers:
- STM32 F401 UART: Correct support for USART6 on this chip. From
Freddie Chopin.
- STM32 FLASH fixes: use size_t instead of uint16_t, make interface
more generic. From Freddie Chopin.
- Fix for UART7 and UART8 on STM32 clock enable from Aton.
- CAN: At the end of the interrupt handler, the interrupts were being
disabled, if all packets have been transferred when the interrupt
handler was invoked. This is problematic, because the interrupt
handler calls can_txdone of the upper half which can enqueue new
packets to send. Removed the block altogether, because can_txdone
calls can_xmit which disables interrupts if there are no new packets
to send. From Daniel Lazlo Sitzer.
- Additional STM32 CAN correction suggested by Max Holtzberg.
* STMicro ST32 Boards:
- configs/mikroe-stm32f4: Fix a few compile bugs and minor corrections
to the mikroe-stm32f4 configuration source. From Ken Pettit.
* ARM9/ARMv7-A:
- System Calls: Fix ARM7/9 and Cortex-A SYSCALLs: For threads in SVC
mode, the SVC instructions clobbers R14. This must be taken account
in the inline assembly.
- Task Setup: All tasks, even user mode tasks, must start in
supervisor mode until they get past the start-up trampoline.
- ARMv7-A: Modify up_fullcontextrestore() for CONFIG_BUILD_KERNEL.
It changed CPSR while in kernel. That will crash if the new CPSR is
user mode while executing in kernel space. Fixed by adding a
SYS_context_restore system call. There is an alternative, simpler
modification to up_fullcontextrestore() that could have been done:
It might have been possible to use the SPSR instead of the CPRSR and
then do an exception return from up_fullcontextrestore(). That
would be more efficient, but I never tried it.
* Atmel SAM3/4 Boards:
- SAM3X/Arduino Due: Fix typo in sam3x_periphclks.h; add SCLK
definitions to board.h header file. From Fabien Comte.
- SAM3 RTT: Only SAM4 family has RTTDIS bit in the MR register.
SourceForge bug #33 from Fabien Comte.
* C Library:
- sscanf(): NuttX libc tried to guess how many characters to parse,
extracted them into a buffer, then ran strtol() on that buffer.
That guess was often wrong. A better approach would be to call
strtol() directly on the input data, using the endptr return value
to determine how many characters to skip after parsing. From Kosma
Moczek.
- Corrected atan2 implementations from Denis Arnst.
- Change to lib_dtoa() to fix precision error from trailing zeroes.
From Bob Doiron.
* Applications:
- Fix NSH PS command: If there are no arguments, it could print
garbage for argument list.
* Configuration/Build System:
- Null Example: Need to include config.h it order know if this is or
is not a kernel build. This problem still exists in several other
file that may need to define main().
NuttX-7.6
---------
The 106th release of NuttX, Version 7.6, was made on November 26, 2014,
and is available for download from the SourceForge website. Note
that release consists of two tarballs: nuttx-7.6.tar.gz and
apps-7.6.tar.gz. Both may be needed (see the top-level nuttx/README.txt
file for build information).
Additional new features and extended functionality:
* Core OS:
- Moved name semaphore and message queue support out of the OS and
into the VFS. These improves the architecture by unifying the
management of named resources, removes redundant resource management
logic, and makes named semaphores and message queues visible in the
file system. By default, these are visible at /var/lock and
/var/mqueue.
- Add SIGPOLL for use as part of the AIO implementation.
- Remove CONFIG_MAX_TASK_ARGS configuration. There is now no
predetermined limit on the number of arguments that may be passed
to a new task on start-up.
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
- Add support for priority inheritance on the low priority worker
queue. That is, if a higher priority thread has scheduled work, the
priority of the low priority worker thread(s) will be boost to the
priority of the queuing thread. At work is performed at at least
thread priority of the scheduling thread. If there are multiple
worker threads, then all threads get reprioritized. Currently
only implemented for AIO.
- Add support for multiple low-priority work queue threads. This
allows individual worker threads to block indefinitely for I/O as
necessary without halting the entire work queue.
* VFS/General Drivers:
- Implement create() (as a macro).
- Add pread() and pwrite(). Also added pread() and pwrite()
system calls.
- AIO: Add aio_read(), aio_write(), aio_return(), aio_error(),
aio_suspend(), aio_canel(), lio_listio(), and aio_fsync(). This
logic minimizes the creation of new threads by using the new
features also added to the low priority work queue with this
release. It uses the new low priority worker thread interface
to adjust the priority of the worker thread according to the
priority of the AIO client thread
- Implement standard syslogmask() to control logging (also removing
the non-standard syslog_enable()).
* File Systems/Block Drivers/MTD:
- Extend MTD support to the M25P16. From Sébastien Lorquet.
* Drivers:
- BCH (Block-to-Character): Add support for seeking in BCH. From
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
Sébastien Lorquet.
* Graphics Support/Graphics-Related Drivers:
- Add support for a generic ILI9341 LCD driver. From Marco Krahl.
- Add ANSI/VT100 foreground and background color commands.
- Add driver for ST7565 LCD that works with NHD-C12864KGZ display. From Pierre-noel Bouteville.
* Networking:
- Verify that multiple networks can be supported.
- Add support for the case where there are multiple networks: One
being Ethernet and the other not (SLIP, PPP, ...). The primary
difference from the standpoint of the stack is that (1) ARP may or
may not be necessary, (2) the size of the link layer header will
vary, and (3) different MTUs and TCP receive windows may be used
with each link. Suggested by Brennan Ashton.
- Extensions to UDP and TCP connection structures for the case of
multiple networks. In this case, assigned port numbers only have to
be unique with respect to the IP address. So, for example, you
could have multiple port 80's, one on each network.
* Host Simulation:
- Removed the old, strange up_stdio.c and implemented a simulated UART
driver to provide the console input. The new logic starts a
separate, Linux domain pthread to read the console input in raw mode
and provides the incoming data to NuttX via standard NuttX domain
IPCs.
- Add support for 64-bit longjmp/setjmp in simulator platform. This
will permit operation of the simulation natively on a 64-bit
platform.
* ARMv7-M:
- Add ARMv7-M CMSIS ITM header file and library. From Pierre-noel
Bouteville.
- Add ARMv7-M CMSIS DWT and TPI header files. From Pierre-noel
Bouteville.
- Add ARMv7-M support to use ITM for SYSLOG debug output. Includes
logic from Pierre-noel Bouteville.
* Atmel SAM3/4 Drivers:
- Add support for SAM3/4 basic serial TERMIOS and flow control.
There are issues with IFLOW control: PDC or DMAC support is
required.
* Atmel SAM3/4 Boards:
- SAM4E-EK: Add support for PHY interrupt.
* Atmel SAMA5D Boards:
- SAMA5D3-Xplained: Add a configuration that provides a simple test
for the EMAC and GMAC on the SAMA5D3 working together.
- SAMA5D4-EK: Add a configuration that provides a simple test for the
EMAC0 and EMAC1 on the SAMA5D4 working together.
* Freescale KL:
- Add an I2C header file for the Freescale KL family. From Alan
Carvalho de Assis.
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
- Add support for tickless operation using the NXP LPC43xx. From
Brandon Warhurst.
* SiLabs EFM32:
- Add a basic port for the SiLabs EFM32 family. Includes many files
contributed by Pierre-noel Bouteville .
* SiLabs EFM32 Boards:
- Add board support for the EFM32 Gecko Starter Kit.
- Add board support for the Olimex EFM32G8809128 STK. NOTE: I am
unable to test this configuration due to tool-related issues.
- Add board support for the SiLbas EFM32GG Giant Gecko Starter kit.
* STMicro STM32:
- Add support for the STM32 F411RE from Serg Podtynnyi.
- Add support for the STM32F103RG. From Murilo Ponte.
* STMicro STM32 Drivers:
- STM32 F4: Add logic that implement true high speed support for the
STM32 OTGHS peripheral and concurrent support for both LS and HS
OTG. New OTGHS drivers provided for both device and host. From
Brennan Ashton.
* STMicro STM32 Boards:
- STM32 Nucleo-F411RE: Extend this board configuration to also support
the Nucleo-F411RE. From Serg Podtynnyi.
- Add support for the STM32F429i Discovery's LCD (SPI based). From
Marco Krahl.
- configs/stm32f100rc_generic: Removed this generic board configuration.
I have decided to stop support of generic board configurations. Generic
board configurations do not provide support for any specific hardware
but can be useful only if there are not other examples for the setup
for a particular architecture. Not the case here.
* C Library:
- Add a mostly bogus wchar.h header file. This file is mostly bogus
because none of the wide character operations are currently
supported in the Nuttx C library. The file does provide the wchar_t
types needed by some software, however.
- Add isatty() function. From Alan Carvalho de Assis.
- Add mktemp(), mkstemp(), tmpnam() and tempnam().
* Configuration/Build System:
- Add a PRELINK macro to Config.mk. From Kriegleder.
- compiler.h: Defines inline functions as not instrumented - this is
relevant for anyone using instrumentation. From Lorenz Meier.
* Applications:
- apps/interpreter/bas: Added in the Michael Haardt's BAS 2.4 adapted
for use by NuttX by Alan Carvalho de Assis. Includes support for
VT100 terminals and color commands.
- Examples: Added bastest/ which holds a special version of Michael
Haardt's BAS 2.4 test files adapted for use by NuttX on a ROMFS file
system.
- Examples: Add a simple UDP relay bridge for testing configurations
with multiple networks. Includes a host-side test driver for
testing the bridge.
- Netutils: Add implementation of timeouts for the netutils webclient.
From Brennan Ashton
- NSH: Add support for a custom NSH ROMFS startup image header file
location. From Martin Lederhilger.
- OS test: Add a simple test of named semaphores.
- OS test: Add AIO test case in OS test.
Efforts In Progress. The following are features that are partially
implemented but present in this release. They are not likely to be
completed soon.
* Processes. Much of the work in this release is focused on the
realization of Unix-style user processes in NuttX. There is more to
be done, however. The full roadmap and status is available at:
http://www.nuttx.org/doku.php?id=wiki:nxinternal:memconfigs#the_roadmap_toward_processes
* XMega: There are some fragments in place for an XMega port. That
port has not really started, however.
* Galileo: Similarly, there are fragments in place for an Intel Galileo
port. The port not been started in earnest either.
Bugfixes. Only the most critical bugfixes are listed here (see the
ChangeLog for the complete list of bugfixes and for additional, more
detailed bugfix information):
I ran cppcheck against the entire code base and correct many latent bugs
including things as serious as memory leaks, two locations where interrupts
were be disabled but never re-enabled, and errors in the Tickless mode of
operation. My thanks to the developers of cppcheck! I am impressed!
* Core OS:
- vfork(): Now that arguments are kept on the stack, the way that
arguments are passed from parent to child in vfork() must change.
This bug has always been present, but was not visible with the
old strdup() way of passing arguments.
- vfork() problem: If we get to vfork() via system call, then we
need to clone some system call information so that the return form
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
the cloned system call works correctly.
- Fixes to tickless operation code, especially in alarm mode. From
Brandon Warhurst.
- Fix an important bug in the watchdog timer creation logic.
- Calling mq_timedreceived() with immediate timeout was getting stuck
and not timing out. Immediate timeout is achieved by setting absolute
timeout value to past time, for example abstime={ .tv_sec=0,
.tv_nsec=0 }. However absolute time was converted to relative time
using unsigned integer arithmetic and resulted large ticks count by
clock_abstime2ticks, instead of expected negative ticks value.
Change corrects clock_abstime2ticks() to return negative ticks, if
absolute time is in the past. From Jussi Kivilinna.
* Memory Management:
- Fix a place in the memory manager where it explicitly assumed that
the size of a pointer is 4 bytes. That assumption was OK if the
actual size is smaller but made the heap unstable when used with
the x86_64 host simulation.
- Granule Allocator: If the INTR granule allocator mode is enabled,
there is no semaphore to destroy. From Lorenz Meier.
* Networking:
- Network routing: I don't think that the net_route() function has
ever worked correctly. The source IP was updated in the match
struct instead of the route IP. From Brennan Ashton.
- Move and rename IP header flag definitions. The problem fixed here
is that there IP header flag definitions were not available when TCP
was disabled. The IP flags are used in ICMP and IGMP.
- Network routing: Refuse to perform routing table lookups for the
Broadcast IP address. From Brennan Ashton.
- Network routing: Add logic to netdev_findbyaddr() to return the
correct network device for the case where a broadcast
address is used. This change caused trivial ripples through other
files because additional parameters are required for
netdev_findbyaddr() when CONFIG_NET_MULTINIC.
* File Systems/Block Drivers/MTD:
- NXFFS Dump: Fix problems with redefinitions of fdbg macro. With the
fix to the syslog prototype, a LOG priority must now be the first
parameter. Fixed by replacing all occurrences of fdbg with
syslog(LOG_DEBUG, and eliminating the macro redefinitions. Noted
by Sebastien Lorquet.
- poll() was not waking up from signals (for example mq_notify()
events). From Jussi Kivilinna.
- poll(): Add proper handling for sem_timedwait errnos. From Jussi
Kivilinna.
- include/nuttx/fs/fs.h: Fix typo in conditional compilation. From
Alan Carvalho de Assis.
* Graphics/Graphic-Related Drivers:
- Remove warnings when CONFIG_NXTK_BORDERWIDTH is set to zero. From
Pierre-Noel Bouteville.
* Common Drivers:
- Make standard syslog and vsyslog POSIX compliant (also modify
non-standard syslog functions for compatibility).
- R/W buffering: Fix typo that can cause compilation error.
* Atmel SAM3/4:
- SAM4S: Add missing SPI0 clock configuration macro for the SAM4S. From spasbyspas.
* Atmel SAM3/4 Drivers:
- SAM4E-EK: Fix an error in a USART1 pin number.
* Atmel SAMA5D3/4 Drivers:
- SAMA5DF4: Fix several typos that will prevented EMAC1 from
initializing properly.
* NXP LPC43xx:
- Fixes to allow compile of lpc43_gpioint.c. From Brandon Warhurst.
* STMicro STM32:
- Add missing ADC pinmap definitions for the STM32 F103R from Martin
Lederhilger.
* STMicro STM32 Drivers:
- STM32 EXTI: Correct STM32 RTC EXTI bit definition. From Lazlo.
- STM32 IWDG, WWDG, DBGMCU: Fix watchdog stop bit usage. From Lazlo.
- STM32 OTGFS: Correct a typo in the STM32 OTGFS register bit definitions.
* ARM:
- ARM up_internal.h: Add protection from C++ name mangling in the
ARM up_internal.h. From Lorenz Meier.
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
- PIC32MX7: DEVCFG0 bit 2 must be set. Writing bit 2 as zero can
brick the CPU on some versions. From Cris Kvist.
* C Library:
- The implementation of access() as vararg macro has the issue that
any function call with the same name (even in a C++ class) will
match with it and result in a compile error. Replaced with a small
function. This resolves the compile issue, and shouldnt have
negative side effects for users of the function. From Lorenz Meier.
- The definition of strncpy() is that empty space should be zero-
filled, the change adds the zero filling (See the POSIX spec here:
http://pubs.opengroup.org/onlinepubs/7908799/xsh/strncpy.html). From
Lorenz Meier.
- limits.h: Remove the definition of INT_FAST32_MIN which is already
defined in stdint.h (the correct location). From Lorenz Meier.
* Applications:
- apps/: Correct everything under apps to use the corrected syslog
interfaces. Remove any non-portable uses of syslog.
- NSH: Fix ls -l output for regular files.
- NSH: Fix reversed in/out file closing in DD command when an error
occurs. From Ken Pettit.
- NSH: Add logic to restart the console wait if an error occurs
while reading from the console. In USB console startup, the logic
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
must be able to open the USB serial and receive 3 newlines.
However, it the USB driver is disconnected or otherwise fails before
the 3 newlines are received, the receive loop becomes a killer,
infinite loop, CPU hog. Noted by spasbyspas.
- Netutils: Fix memcpy of host address in netlib_gethostaddr(). From
Brennan Ashton.
- Netutils: If you make a DNS request before the DNS address it would
cause an assertion. The state of the IP setting is not something the
application should be aware of, it should only be concerned with
whether or not the name was resolved. From Brennan Ashton.
- Netutils: Fix md5 hashing when digest[$i] islower that 16. From
Sergey.
- Stack Monitor: Fix compile problems introduced when the syslog()
prototype changed; Also update Makefile for kernel build From
Radoslaw Adamczyk.
- Examples: Update NxTerm makefile for kernel-build issues. From
Radoslaw Adamczyk.
- Examples: Fixes to keypadtest from Pierre-Noel Bouteville.
- Examples: These examples all set the IP address of eth1 but the
netmask and gateway of eth0 if DHCP is enabled: discover, tcpecho,
webserver, xmlrpc. That can't be right.
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
NuttX-7.7
---------
The 107th release of NuttX, Version 7.7, was made on January 26, 2015,
and is available for download from the SourceForge website. Note
that release consists of two tarballs: nuttx-7.7.tar.gz and
apps-7.7.tar.gz. Both may be needed (see the top-level nuttx/README.txt
file for build information).
Additional new features and extended functionality:
* Core OS:
- Task exit handling: Add logic to clean up after task_delete() or
pthread_cancel() if the task happens to be waiting on a semaphore
when was is cancelled.
- Stack coloration: Removed CONFIG_DEBUG_STACK and replaced it with
CONFIG_STACK_COLORATION that does the same thing but without enabling
debug. From David Sidrane.
* Common Drivers:
- Discrete joystick driver: Added an interface definition and upper
half driver for a discrete joystick device (where X/Y changes are
indicated with button presses).
- Analog joystick driver: Added an interface definition and upper
half driver for a analog joystick device (where X/Y positions are
sampled, numeric values).
- Add driver support for the ADXL345 accelerometer. From Alan
Carvalho de Assis
- Generic serial driver: Add watermark levels to the serial RX flow
control logic. Modify the rxflowcontrol method to accept the number
of bytes in the buffer and a boolean indication of which watermark
was crossed.
* File Systems/Block Drivers/MTD:
- Add procfs write support. From Ken Petit.
- Implemented wear-leveling in the SmartFS. From Ken Pettit.
- MMC/SD Interface: MMCSD SDIO: Add support for a new
SDWAIT_WRCOMPLETE condition. The previous logic used a busy-wait
loop to poll the card R1 status to determine when the card was
ready for the next transfer. That busy-wait can be quite long --
up to hundreds of milliseconds. An alternative is to look the SD D0
pin which will change state when the card is no longer busy. This
change avoids the busy-wait poll by reconfiguring the SD D0 pin as a
GPIO interrupt, then waiting for the card to become ready without
taking up CPU cycles. From David Sidrane.
* Drivers:
- Add support for a generic EEPROM driver that accesses EEPROM as a
character driver (vs. an MTD driver). From Sébastien Lorquet.
* Graphics Support:
- Many new fonts converted for use with NuttX and added by
Pierre-noel Bouteville
* Networking:
- IPv4 support is now conditioned on CONFIG_NET_IPv4.
- Implemented and verified IPv6 support conditioned on
CONFIG_NET_IPv6. Either IPv4 or IPv4 or both may be selected.
Sockets, of course, must be bound to one or the other. Added support
for IPv6 ioctls to manipulate IP addresses.
- Integrated support for ICMPv6 and the ICMPv6 Neighbor Discovery
Protocol and ICMPv6 ECHO request/reply needed to support ping logic.
- All Ethernet drivers: Modified to support. Most, however, are
still missing address filtering logic required for ICMPv6 Neighbor
Discovery Protocol. See
http://www.nuttx.org/doku.php?id=wiki:howtos:ipv6#ethernet_driver_requirements
- Also added missing raw/packet socket support to all Ethernet drivers.
* Host Simulation:
- Add a configuration build and test the Traveler first person game
using the simulator.
- Add an X11 mouse-based simulation of an analog joystick device
* Atmel SAMA5D Boards:
- Add analog Joystick shield support for the SAMA5D3 Xplained board.
* Freescale KL Drivers:
- Add GPIO interrupt capability for the KL architecture. From Alan
Carvalho de Assis
* Freescale KL Boards:
- Freedom-KL25Z: Add board support for the ADXL345 accelerometer. From
Alan Carvalho de Assis
- Freedom-KL25Z: Update the Freedom KL25Z board CC3000 support to use
the current CC300 interfaces. From Alan Carvalho de Assis
* NXP LPC43xx Boards:
- A port of NuttX to the LPC4357-EVB from Toby Duckworth. This port
is a leverage of the LPC3330-Xplorer port and still have a some
misinformation from that port that needs to be updated for the
LPC4357-EVB.
* SiLabs EFM32 Drivers:
- Serial: Add support for serial termios TCGET and TCSET. For the
moment, only set/get speed is implemented. From Pierre-noel
Bouteville.
- RMU: Add support for the EFM32 reset management unit (RMU). From
Pierre-noel Bouteville.
* SiLabs EFM32 Boards:
- Add support for timer/PWM on the EFM32GG. From Pierre-noel
Bouteville
* STMicro STM32:
- Enable support for the STM32 F102. From the PX4 team.
* STMicro STM32 Drivers:
- STM32 F429 LTDC: Add interface to perform hardware accelerated layer
operation. Provides access to a reference of a specific ltdc layer.
From Marco Krahl
- STM32 F429 LTDC support: Implemented LTDC framebuffer support for the
generic nuttx framebuffer interface. Also implements the interface to
perform hardware accelerated layer operation by the ltdc controller
and dma2d controller later. From Marco Krahl.
- STM32: Add support for the internal low speed clock (LSI) as a
source of the RTC clock. Some boards do not have the external
32kKhz oscillator installed, for those boards we must fallback to
the crummy internal RC clock. From Kevin Hester
- STM32 SDIO: Add support for the new SDWAIT_WRCOMPLETE condition.
From David Sidrane
* STMicro STM32 Boards:
- Add a discrete Joystick support for the STM3210E-EVAL.
- Add analog Joystick shield support for the Nucleo F4x1RE boards.
- STM32 F429i-Disco: Add support for initializing of the ltdc
controller and the lcd device connected on the stm32f429i-disco.
From Marco Krahl.
- Removed the px4-v2_upstream configuration. This was not the
official configuration for the PX4 board and has led to confusion
by NuttX users. The board configuration also requires some ongoing
maintenance and customization to support ongoing PX4 testing and
evaluation. It is best retained the PX4 repositories where it can
be properly maintained and not in the upstream NuttX repository.
* TI Tiva:
- Add support for the TI Tiva TM4C 129X family. Some unverified
support for the TM4C 1294 is also in place.
* TI Tiva Drivers:
- Added support for Tiva I2C driver. Verified on the Tiva TM4C123G
and TM4C129X.
- Added a Tiva TM4C129X Ethernet driver.
- Add a timer library for generic support of Tiva timers
- Add a driver lower half for drivers/timer.c. Only 32-bit periodic
timers are supported. This provides userspace access to timers.
* TI Tiva Boards:
- TM4C123G Launchpad: Add initialization logic for an external AT24
EEPROM. This is intended only to support testing of the Tiva I2C
driver.
- Board support for the Tiva DK-TM4C129x Connected Development Kit.
- DK-TMC129X: Add an IPv6-enabled NSH configuration.
* C Library/Header Files:
- Added support for a variadic ioctl() function. The ioctl()
interface is a non-standard, Unix interface. NuttX has always used
the older, three-parameter version. Most contemporary systems now,
however, use a variadic form of the ioctl() function. Added an
option to insert a shim layer to adapt the three-parameter ioctl()
to use the variadic interface form. Internally, the ioctl handling
is the same three-parameter logic. The only real complexity to the
shim is in how the system calls must be handled.
- Added sys/custom_file.h. Used when CUSTOM_FILE_IO is define and
avoids re-definition errors about the FILE define. From Thomas
Gruber via the PX4 repository
- Add CRC8 support to the C library. From Ken Pettit.
- math.h: Added support for the expm1 functions. From Brennan Ashton
* Applications:
- apps/examples/djoystick: Add a test of the discrete joystick
driver.
- apps/examples/ajoystick: Add a test of the analog joystick
driver.
- apps/examples/ltdc: Add ltdc test example. From Marco Krahl
- apps/system/lm75: Add a tiny application to read the temperature
from an LM-75 (or compatible) temperature sensor
- apps/examples/timer: Add a trivial test of the timer driver
- apps/system/cu: Add a minimalist implementation of the 'cu'
terminal program (part of Taylor UUCP for ages). Using it, you can
simply open a serial port and interact with it. Using '~.' you can
leave the terminal program and drop back to nsh. This might come
in handy for people that have e.g. GSM modems, GPS receivers or
other devices with text based serial communications attached to
their Nuttx systems. From Harald Welte
- apps/interpreters/micropython: A port of Micro Python to NuttX.
Contributed by Dave Marples
- apps/netutils/dnsclient: Can select to be either IPv4 or IPv6, but
not both (IPv6 still does not compile)
- apps/netutils/netlib: Add new library functions to manipulate IPv6
addresses.
- apps/examples/nettest: Update test so that it can be used to test
IPv6 TCP sockets
- apps/examples/udp: The UDP test example has been extend to support
IPv6 domain sockets
- apps/nshlib: Add logic to initialize IPv6 addresses
- apps/nshlib: Add the ping6 command to support checking IPv6 networks.
- apps/nshlib: Clean up network status presentation for IPv6
Efforts In Progress. The following are features that are partially
implemented but present in this release. They are not likely to be
completed soon.
* IPv6. While basic IPv6 support was completed in NuttX-7.7,
there are lingering issues with getting IPv6 compatibility
with applications and network utilities.
* Processes. Much of the work in this release is focused on the
realization of Unix-style user processes in NuttX. There is more to
be done, however. The full roadmap and status is available at:
http://www.nuttx.org/doku.php?id=wiki:nxinternal:memconfigs#the_roadmap_toward_processes
* XMega: There are some fragments in place for an XMega port. That
port has not really started, however.
* Galileo: Similarly, there are fragments in place for an Intel Galileo
port. The port probably will not happen (I gave my Galileo board away!).
Bugfixes. Only the most critical bugfixes are listed here (see the
ChangeLog for the complete list of bugfixes and for additional, more
detailed bugfix information):
* Core OS:
- POSIX message queues: msg type should be char * not void * in
mq_send, mq_timedsend, mq_receive, and mq_timedreceive. Noted by
Pierre-Noel Bouteville
- POSIX message queues: In message queue creation return ENOSPC error
if size exceeds the configured size of pre-allocated messages; Use
ENOSPC vs ENOMEM per OpenGroup.org. From Pierre-Noel Bouteville.
- Task Names: strncpy() will not copy the terminating \0 into the
destination if the source is larger than the size of the
destination. Ensure that the last byte is always zero and let
strncpy() only copy CONFIG_TASK_NAME_SIZE bytes. The issue of
unterminated names can be observed in ps when creating a pthread
while CONFIG_TASK_NAME_SIZE is set to 8. From Daniel Willmann
* Memory Management: