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.
7014
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
- 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.
7057
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
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
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
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
7252
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
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().