The documentation grew one page at a time, so the tree follows the
history of who wrote what and not the shape of NuttX. Scheduling is
spread over three places, a driver page can sit above the subsystem
that owns it, and the front page lists everything at the same level.
That is a lot to face when all you want to know is where the scheduler
lives.
This change files every page under the code it describes. It is a move,
not a rewrite: outside the ten pages named below, every page keeps the
text that is already in master, and no page's text is deleted.
What it does:
* Groups the table of contents into nine chapters.
* Moves the OS subsystems under os/: scheduling, memory, drivers,
filesystem, networking, IPC, interrupts, libs, time.
* Renames the platform pages to the names the source tree uses, and
derives their tags from the tree instead of by hand.
* Splits guides/ by subject.
* Adds Documentation/redirects.py, with a rule for every page that left
its old path, so old URLs keep working. The redirect page also carries
a link's #anchor across to the new page.
Ten pages have text that is new or rewritten. Nine of them are the
landing page of a chapter, which has to exist for the new structure:
index the front page
os/index OS Design
os/scheduling/index Scheduling
os/interrupts/index Interrupts
os/ipc/index IPC
os/time/index Time and timers
about/index About
developing/index Developing NuttX
ReleaseNotes/index Release notes
The tenth is os/libs/libbuiltin, the only page here with technical
content: libs/libbuiltin/ had no page at all. Five SVG diagrams come
with these pages, hand-written XML with no editor metadata.
Nothing outside Documentation/ is touched.
How it was checked:
* Sphinx builds with -W: no warnings, and no document left outside a
toctree.
* A script, offered in the PR, proves the narrow claim this rests on.
For every page outside the ten named above it erases what a move
touches -- link target, path, tag line, toctree block, table border --
from the whole old text and the whole new text, and requires the two
to be byte for byte identical. It also requires every sentence of a
deleted page to turn up somewhere, and every page that left its old
path to have a redirect, from a URL that existed, to where its content
went. It exits non-zero and names the page if any of that is not true,
and it tests added pages too, so forgetting to declare one cannot make
it pass.
* An independent audit checked 133 factual claims on these ten pages
against the tree, one shell command per claim: 130 confirmed, 1
refuted and fixed here, 2 not checkable.
* tools/checkpatch.sh is clean over the range.
The diff is large because moving a page changes every link that points
to it. Most of it is pure renames, and board pages that gained one tag
line.
Assisted-by: Claude:claude-opus-5
8.5 KiB
NuttX-7.1
The 101st release of NuttX, Version 7.1, was made on March 15, 2014, and is available for download from the SourceForge website. Note that release consists of two tarballs: nuttx-7.1.tar.gz and apps-7.1.tar.gz. Both may be needed (see the top-level nuttx/README.txt file for build information).
The previous NuttX version was 6.33. The NuttX minor version number is incremented on each release, but the major version number is incremented only when an incompatibility with previous versions is included in the release. In this case, the legacy, manual configuration is no longer supported by the NuttX build system beginning with NuttX 7.1. Only the newer configurations generated by the kconfig-frontends tools will generate viable NuttX configurations.
All board configurations in the NuttX source tree have been converted to use the newer configuration, but if you have some older style configurations for you board, you will need to convert those configurations to use the kconfig-frontends tools before taking any new code from the repository. See https://cwiki.apache.org/confluence/display/NUTTX/Converting+Legacy+Configurations+to+Use+kconfig-mconf for some guidelines.
Additional new features and extended functionality:
- Core OS:
- System time logic now includes logic to measure and calculate the CPU load percentage (from David Alessio). This CPU load logic extended to keep counts on each thread. The per-thread CPU is now reported in the procfs under /loadavg An asynchronous, "external" clock may be used to drive the CPU load calculations for more accurate measurements when needed.
- File Systems:
- As mentioned above, the per-thread CPU load information is now reported in the procfs under /loadavg.
- Many file system interfaces have been extended to operate on the top-level NuttX pseudo filesystem. These include rmdir, mkdir, rename, and unlink. This capability can be disabled with CONFIG_DISABLE_PSEUDOFS_OPERATIONS in order to keep the footprint small.
- Networking:
- Numerous updates and improvements to the CC3000 driver from David Sidrane.
- Common Drivers:
- Defined a mouse interface that is very similar to a touchscreen interface, but allows reporting of all mouse buttons. Also, unlike touchscreen drivers, mouse drivers need to report positional data with no button is pressed so that the mouse position can drive a cursor.
- Added support for a USB HID boot mouse device. Cursor support is not integrated and must be provided by the application based upon the reported mouse data.
- Support added for the MIO283QT9A LCD from Toby Duckworth.
- Atmel SAMA4E:
- Added complete architecture support for the Atmel AT91 SAM4E Cortex-M4F parts.
- Atmel SAM4E Board Support:
- Add board support for the SAM4E-EK board.
- Atmel SAM4E Drivers:
- Added logic to manage the Cortex-M Cache Control block.
- Developed and integrated an Ethernet MAC driver for the SAM4E.
- Backported the SAMA5 SPI driver to the SAM3/4 architecture. The SAMA5 version supports both multiple SPI peripherals as needed by the SAM3A and SAM3X and also supports DMAC (but not PDC) needed by the SAM4E.
- Atmel SAM D20:
- Added basic architecture support for the Atmel AT91 SAM D20 Cortex-M0+ parts.
- Atmel SAM D20 Board Support:
- Added basic support for SAM D2 Xplained Pro board. Currently, the NuttShell (NSH) works reliably over a serial port. An SPI driver has also been developed. Work with the SAM D20 has been temporarily stopped, however, in order to focus on the SAM4E-EK.
- TI Tiva TMC4C123G:
- Added architecture support for the TI Tiva TM4C123G parts. This was merged into the existing support for the LM3S and LM4F families. All directory, file, and function references changed from lm to tiva.
- TI Tiva TMC4C123G Board Support:
- Added basic board support for the TM4C123G-Launchpad. As of this release the TM4C123G-Launchpad board support is untested and likely incomplete.
- STMicro STM32 Boards:
- The Mikroe STM32F4 can now support the newer MIO283QT9A LCD. From Toby Duckworth.
- Miscellaneous changes to better support FPU on STM32F429 Discovery from David Alessio.
- NXP LPC2378 Drivers:
- Incorporated I2C and SPI drivers for the LPC23xx from Lizhuoyi.
- QEMU i486 Drivers:
- New QEMU keyboard and VGA drivers from Lizhuoyi.
- Documentation:
- Added a coding standards document. See https://nuttx.apache.org/docs/latest/contributing/coding_style.html
- Configuration/Build System:
- A configuration option, CONFIG_DEFAULT_SMALL, was added to select default values for configuration variables based upon whether you want a smaller footprint or more features. This is not very useful if you are modifying existing configurations because then the default values do not apply.
- CONFIG_DEFAULT_SMALL has been defined on all tiny MCU configurations so that they do not grow so rapidly when new, optional features are added.
- The legacy, manual configuration is no longer supported by the NuttX build system. Only the newer configurations generated by the kconfig-frontends tools will generate viable NuttX configurations. All board configurations in the NuttX source tree have been converted to use the newer configuration, but if you have some older style configurations for you board, you will need to convert those configurations to use the kconfig-frontends tools. See https://cwiki.apache.org/confluence/display/NUTTX/Converting+Legacy+Configurations+to+Use+kconfig-mconf for some guidelines.
- Applications:
- NSH can now use an EMACS-like command line editor. This CLE, is really more like the traditional readline than is the default, tiny the NuttX readline .
- The touchscreen example can now be configured to work with either a touchscreen or a mouse device.
- Several NSH commands can now be used to operate on objects in the top-level pseudo-filesystem: rmdir, mkdir, mv, and rm. This capability can be disabled with CONFIG_DISABLE_PSEUDOFS_OPERATIONS in order to keep the footprint small.
- If both the CPU load feature and the procfs features are enabled, then the NSH 'ps' command will show the CPU load used by each thread.
Bugfixes (see the ChangeLog for details). Some of these are very important:
- Core OS:
- task_terminate() always returned an error because the return value was not being set correctly (from Gosha).
- nanosleep() Fix a missing call to re-enable interrupts (from Jason Jiang).
- File Systems:
- Fixed an error in the FAT logic that can cause file corruption. The error conditions are rare and only seen with very large files (from Andrew Tridgell). This replaces a previous, partial fix for the same problem.
- Fixed memory leaks in the NXFFS open() and stat() implementations (from Lzyy).
- The interfaces include opendir(), readdir(), et al, were modified so that errors will not be reported if you attempt to list a empty pseudo-directory.
- Networking:
- Fix one place where the connection reference count was not being decremented in the socket close() logic. This is really a cosmetic change BUT when CONFIG_DEBUG_NET is enabled, it will cause assertions.
- Backed out a small part of the NuttX 6.33 write buffering changed. David G says that this causes problems in connecting to a server.
- In DHCPD, there was a place where the logic was calling ntohl() inappropriately; the address was already in the correct order. How could DHCPD have worked with this bug?
- TI Tiva/Stellaris Drivers:
- Fixed cut'n'paste error that prevented UARTS2-7 from being used with the LM4F120 Launchpad.
- Fixed several errors there were unmasked with UARTs > UART2 are enabled (grom Gosha).
- Allwinner A10 Drivers:
- Fixed cut'n'paste error that prevented UARTS2-7 from being used with the pcDuino.
- NXP LPC17xx Drivers:
- Fix an compilation error that crept into the LPC17xx USB host driver.
- STMicro STM32 Drivers:
- Fix cloned typo in the serial driver: FLOWCONTROL vs FLOWCONROL.
- Disable SPI before changing DPI CR1 register (from David Sidrane).
- stm32 TIM: Set the timer CCMR when selecting timer channel. From David Sidrane.
- Fix typo in a Makefile: stm32_pwm.c not stm32_psm.c. Noted by Max Kriegleder.
- Library:
- More sscanf() bug fixes from David Sidrane.
- Header files:
- cstdbool: Ignore _Bool8 if CONFIG_C99_BOOL8=y
- Configuration/Build System:
- Several changes to restore the broken native Windows build
- NuttShell (NSH):
- Use strncpy vs strcpy in the Telnet console logic to avoid overrunning the username and password buffers (from Bertold Van den Bergh).
- Add a newline after printing the file in the 'cat' command. This prevents the NSH prompt from be in the same line as the final line of the file in the case where there is no newline at the end of the file.