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().
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
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
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
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
7592
7593
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
7690
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
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
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.5.tar.gz and
apps-7.5.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.
* Work queues
- 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-Charchter): Add support for seeking in BCH. From
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 th
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.
* NXP LPC32xx.
- 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
eed to clone some system call information so that the return form
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.
* MicroChip PIC32MX
- 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 logi
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.