2023-10-25 21:26:43 +08:00
|
|
|
==========================
|
|
|
|
Architecture-Specific Code
|
|
|
|
==========================
|
|
|
|
|
|
|
|
The NuttX configuration consists of:
|
|
|
|
|
|
|
|
* Processor architecture specific files. These are the files contained
|
|
|
|
in the ``arch/<arch-name>/`` directory discussed in this file.
|
|
|
|
|
|
|
|
* Chip/SoC specific files. Each processor architecture is embedded in
|
|
|
|
chip or System-on-a-Chip (SoC) architecture. The full chip
|
|
|
|
architecture includes the processor architecture plus chip-specific
|
|
|
|
interrupt logic, general purpose I/O (GPIO) logic, and specialized,
|
|
|
|
internal peripherals (such as UARTs, USB, etc.).
|
|
|
|
|
|
|
|
These chip-specific files are contained within chip-specific
|
|
|
|
sub-directories in the ``arch/<arch-name>/`` directory and are selected
|
|
|
|
via the CONFIG_ARCH_name selection
|
|
|
|
|
|
|
|
* Board specific files. In order to be usable, the chip must be
|
|
|
|
contained in a board environment. The board configuration defines
|
|
|
|
additional properties of the board including such things as peripheral
|
|
|
|
LEDs, external peripherals (such as network, USB, etc.).
|
|
|
|
|
|
|
|
These board-specific configuration files can be found in the
|
|
|
|
``boards/<arch>/<chip>/<board>`` sub-directories.
|
|
|
|
|
|
|
|
This file will address the processor architecture specific files that
|
|
|
|
are contained in the ``arch/<arch-name>/`` directory. The file
|
|
|
|
include/nuttx/arch.h identifies all of the APIs that must be provided by
|
|
|
|
this architecture specific logic. (It also includes
|
|
|
|
``arch/<arch-name>/arch.h`` as described below).
|
|
|
|
|
|
|
|
Directory Structure in ``arch/``
|
|
|
|
================================
|
|
|
|
|
|
|
|
The ``arch/`` directory contains architecture-specific logic. The complete
|
|
|
|
board port is defined by the architecture-specific code in this
|
|
|
|
directory plus the board-specific configurations in the ``boards/``
|
|
|
|
directory. Each architecture must provide a subdirectory <arch-name>
|
|
|
|
under ``arch/`` with the following characteristics::
|
|
|
|
|
|
|
|
<arch-name>/
|
|
|
|
|-- include/
|
|
|
|
| |--<chip-name>/
|
|
|
|
| | `-- (chip-specific header files)
|
|
|
|
| |--<other-chips>/
|
|
|
|
| |-- arch.h
|
|
|
|
| |-- irq.h
|
2023-10-29 23:37:00 +08:00
|
|
|
| |-- syscall.h
|
2023-10-25 21:26:43 +08:00
|
|
|
| `-- types.h
|
|
|
|
`-- src/
|
|
|
|
|--<chip-name>/
|
|
|
|
| `-- (chip-specific source files)
|
|
|
|
|--<other-chips>/
|
|
|
|
|-- Makefile
|
|
|
|
`-- (architecture-specific source files)
|
|
|
|
|
|
|
|
Summary of Files
|
|
|
|
================
|
|
|
|
|
|
|
|
``include/<chip-name>/``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
This sub-directory contains chip-specific header files.
|
|
|
|
|
|
|
|
``include/arch.h``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
This is a hook for any architecture specific definitions that may be
|
|
|
|
needed by the system. It is included by ``include/nuttx/arch.h``
|
|
|
|
|
|
|
|
``include/types.h``
|
|
|
|
|
2023-10-26 19:10:13 +08:00
|
|
|
This provides architecture/toolchain-specific definitions for standard
|
|
|
|
types. This file should typedef: ``_int8_t``, ``_uint8_t``, ``_int16_t``,
|
|
|
|
``_uint16_t``, ``_int32_t``, ``_uint32_t``
|
2023-10-25 21:26:43 +08:00
|
|
|
|
2023-10-26 19:10:13 +08:00
|
|
|
and if the architecture supports 64-bit integers: ``_int24_t``, ``_uint24_t``,
|
|
|
|
``_int64_t``, ``_uint64_t``
|
2023-10-25 21:26:43 +08:00
|
|
|
|
|
|
|
NOTE that these type names have a leading underscore character. This
|
|
|
|
file will be included (indirectly) by ``include/stdint.h`` and typedef'ed
|
|
|
|
to the final name without the underscore character. This roundabout
|
|
|
|
way of doings things allows the stdint.h to be removed from the
|
|
|
|
``include/`` directory in the event that the user prefers to use the
|
|
|
|
definitions provided by their toolchain header files.
|
|
|
|
|
|
|
|
``irqstate_t``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
Must be defined to the size required to hold the interrupt
|
|
|
|
enable/disable state.
|
|
|
|
|
|
|
|
This file will be included by ``include/sys/types.h`` and be made
|
|
|
|
available to all files.
|
|
|
|
|
|
|
|
``include/irq.h``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
This file needs to define some architecture-specific functions
|
|
|
|
(usually inline if the compiler supports inlining) and structures.
|
|
|
|
These include:
|
|
|
|
|
|
|
|
``struct xcptcontext``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
This structure represents the saved context ofa thread.
|
|
|
|
|
|
|
|
``irqstate_t up_irq_save(void)``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
Used to disable all interrupts.
|
|
|
|
|
|
|
|
``void up_irq_restore(irqstate_t flags)``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
Used to restore interrupt enables to the same state as before ``up_irq_save``
|
|
|
|
was called.
|
|
|
|
|
|
|
|
NOTE: These interfaces are not available to application code but can
|
|
|
|
only be used within the operating system code. And, in general, these
|
|
|
|
functions should **never** be called directly, not unless you know
|
|
|
|
absolutely well what you are doing. Rather you should typically use
|
|
|
|
the wrapper functions ``enter_critical_section()`` and
|
|
|
|
``leave_critical_section()`` as prototyped in ``include/nuttx/irq.h``.
|
|
|
|
|
|
|
|
This file must also define NR_IRQS, the total number of IRQs supported
|
|
|
|
by the board.
|
|
|
|
|
2023-10-29 23:37:00 +08:00
|
|
|
- ``include/syscall.h``: This file needs to define some
|
|
|
|
architecture specific functions (usually inline if the compiler
|
|
|
|
supports inlining) to support software interrupts or
|
|
|
|
*syscall*\ s that can be used all from user-mode applications
|
|
|
|
into kernel-mode NuttX functions. This file must always be
|
|
|
|
provided to prevent compilation errors. However, it need only
|
|
|
|
contain valid function declarations if the architecture
|
|
|
|
supports the ``CONFIG_BUILD_PROTECTED`` or
|
|
|
|
``CONFIG_BUILD_KERNEL``\ configurations.
|
|
|
|
|
|
|
|
See :doc:`/components/syscall` for details.
|
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
``src/<chip-name>/``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
This sub-directory contains chip-specific source files.
|
|
|
|
|
|
|
|
``src/Makefile``
|
2023-10-26 19:10:13 +08:00
|
|
|
|
2023-10-25 21:26:43 +08:00
|
|
|
This makefile will be executed to build the targets src/libup.a and
|
|
|
|
src/up_head.o. The up_head.o file holds the entry point into the
|
|
|
|
system (power-on reset entry point, for example). It will be used in
|
|
|
|
the final link with libup.a and other system archives to generate the
|
|
|
|
final executable.
|
|
|
|
|
|
|
|
Supported Architectures
|
|
|
|
=======================
|
|
|
|
|
|
|
|
The list of supported architectures can be found in :ref:`Supported Platforms <platforms>`.
|