1176 lines
42 KiB
ReStructuredText
1176 lines
42 KiB
ReStructuredText
=====================
|
|
``/tools`` Host Tools
|
|
=====================
|
|
|
|
This page discusses the contents of the NuttX tools/ directory.
|
|
|
|
The tools/ directory contains miscellaneous scripts and host C programs
|
|
that are necessary parts of the NuttX build system.
|
|
|
|
cmpconfig.c
|
|
-----------
|
|
|
|
This C file can be used to build a utility for comparing two NuttX
|
|
configuration files.
|
|
|
|
Config.mk
|
|
---------
|
|
|
|
Config.mk contains common definitions used by many configuration files.
|
|
This file (along with <nuttx>/.config) must be included at the top of
|
|
each configuration-specific Make.defs file like::
|
|
|
|
include $(TOPDIR)/.config
|
|
include $(TOPDIR)/tools/Config.mk
|
|
|
|
Subsequent logic within the configuration-specific Make.defs file may then
|
|
override these default definitions as necessary.
|
|
|
|
checkpatch.sh
|
|
-------------
|
|
|
|
``checkpatch.sh`` is a bash script that make use of nxstyle and codespell tools
|
|
to format patches and files conform to NuttX coding standard. For example,
|
|
it has been used in NuttX github action PR check build
|
|
|
|
|
|
Help message::
|
|
|
|
$ tools/checkpatch.sh -h
|
|
USAGE: ./tools/checkpatch.sh [options] [list|-]
|
|
|
|
Options:
|
|
-h
|
|
-c spell check with codespell(install with: pip install codespell)
|
|
-r range check only (coupled with -p or -g)
|
|
-p <patch list> (default)
|
|
-g <commit list>
|
|
-f <file list>
|
|
- read standard input mainly used by git pre-commit hook as below:
|
|
git diff --cached | ./tools/checkpatch.sh -
|
|
Where a <commit list> is any syntax supported by git for specifying git revision, see GITREVISIONS(7)
|
|
Where a <patch file names> is a space separated list of patch file names or wildcard. or *.patch
|
|
|
|
configure.sh configure.bat configure.c, cfgparser.c, and cfgparser.h
|
|
--------------------------------------------------------------------
|
|
|
|
configure.sh is a bash script that is used to configure NuttX for a given
|
|
target board in a environment that supports POSIX paths (Linux, Cygwin,
|
|
macOS, or similar). See :doc:`/components/boards` or Documentation/NuttXPortingGuide.html
|
|
for a description of how to configure NuttX with this script.
|
|
|
|
configure.c, cfgparser.c, and cfgparser.h can be used to build a work-alike
|
|
program as a replacement for configure.sh. This work-alike program would be
|
|
used in environments that do not support Bash scripting (such as the Windows
|
|
native environment).
|
|
|
|
configure.bat is a small Windows batch file that can be used as a replacement
|
|
for configure.sh in a Windows native environment. configure.bat is actually
|
|
just a thin layer that executes configure.exe if it is available. If
|
|
configure.exe is not available, then configure.bat will attempt to build it
|
|
first.
|
|
|
|
In order to build configure.exe from configure.c in the Windows native
|
|
environment, two assumptions are made:
|
|
|
|
1) You have installed the MinGW GCC toolchain. This toolchain can be
|
|
downloaded from http://www.mingw.org/. It is recommended that you not
|
|
install the optional MSYS components as there may be conflicts.
|
|
2) That path to the bin/ directory containing mingw-gcc.exe must be
|
|
included in the PATH variable.
|
|
|
|
convert-comments.c
|
|
------------------
|
|
|
|
Convert C++-style comments to C89 C-style comments. Usage::
|
|
|
|
convert-comments <source-file> <out-file>
|
|
|
|
detab.c
|
|
-------
|
|
|
|
Convert tabs to spaces in a file. Usage::
|
|
|
|
detab [-4] <source-file> <out-file>
|
|
|
|
Default <source-file> tab size is 8 spaces; -4 selects 4 space tab size.
|
|
|
|
discover.py
|
|
-----------
|
|
|
|
Example script for discovering devices in the local network.
|
|
It is the counter part to apps/netutils/discover
|
|
|
|
gencromfs.c
|
|
-----------
|
|
|
|
This is a C program that is used to generate CROMFS file system images.
|
|
Usage is simple::
|
|
|
|
gencromfs <dir-path> <out-file>
|
|
|
|
Where:
|
|
|
|
- <dir-path> is the path to the directory will be at the root of the
|
|
new CROMFS file system image.
|
|
- <out-file> the name of the generated, output C file. This file must
|
|
be compiled in order to generate the binary CROMFS file system
|
|
image.
|
|
|
|
initialconfig.c
|
|
---------------
|
|
|
|
This is a C file that can be used to create an initial configuration.
|
|
This permits creating a new configuration from scratch, without
|
|
relying on any existing board configuration in place. This utility
|
|
will create a barebones .config file sufficient only for
|
|
instantiating the symbolic links necessary to do a real configuration.
|
|
|
|
kconfig2html.c
|
|
--------------
|
|
|
|
This is a C file that can be used to build a utility for converting the
|
|
NuttX configuration in the Kconfig files to an HTML document. This
|
|
auto-generated documentation will, eventually, replace the manually
|
|
updated configuration documentation that is falling woefully behind::
|
|
|
|
$ tools/kconfig2html.exe -h
|
|
USAGE: tools/kconfig2html [-d] [-a <apps directory>] {-o <out file>] [<Kconfig root>]
|
|
tools/kconfig2html [-h]
|
|
|
|
Where::
|
|
|
|
-a : Select relative path to the apps/ directory. This path is relative
|
|
to the <Kconfig directory>. Default: ../apps
|
|
-o : Send output to <out file>. Default: Output goes to stdout
|
|
-d : Enable debug output
|
|
-h : Prints this message and exits
|
|
<Kconfig root> is the directory containing the root Kconfig file.
|
|
Default <Kconfig directory>: .
|
|
|
|
NOTE: In order to use this tool, some configuration must be in-place with
|
|
all necessary symbolic links. You can establish the configured symbolic
|
|
links with::
|
|
|
|
make context
|
|
|
|
or more quickly with::
|
|
|
|
make .dirlinks
|
|
|
|
Libraries.mk, FlatLibs.mk, ProtectedLibs.mk, and KernelLib.mk
|
|
-------------------------------------------------------------
|
|
|
|
Libraries.mk has the build rules for all NuttX libraries.
|
|
|
|
FlatLibs.mk, ProtectedLibs.mk, and KernelLib.mk: These control the
|
|
selection of libraries to be built, depending on the selected build mode.
|
|
|
|
lowhex.c
|
|
--------
|
|
|
|
Convert hexadecimal representation in a file from upper- to lower-case.
|
|
Usage::
|
|
|
|
lowhex <source-file> <out-file>
|
|
|
|
Makefile.[unix|win]
|
|
-------------------
|
|
|
|
Unix.mk is the Makefile used when building NuttX in Unix-like systems.
|
|
It is selected from the top-level Makefile.
|
|
|
|
Win.mk is the Makefile used when building natively under Windows.
|
|
It is selected from the top-level Makefile.
|
|
|
|
mkconfig.c, cfgdefine.c, and cfgdefine.h
|
|
----------------------------------------
|
|
|
|
These are C files that are used to build mkconfig program. The mkconfig
|
|
program is used during the initial NuttX build.
|
|
|
|
When you configure NuttX, you will copy a configuration file called .config
|
|
in the top level NuttX directory (See :doc:`/components/boards` or
|
|
Documentation/NuttXPortingGuide.html). The first time you make NuttX,
|
|
the top-level makefile will build the mkconfig executable from mkconfig.c
|
|
(using Makefile.host). The top-level Makefile will then execute the mkconfig
|
|
program to convert the .config file in the top level directory into
|
|
include/nuttx/config.h. config.h is a another version of the NuttX
|
|
configuration that can be included by C files.
|
|
|
|
mkconfigvars.sh
|
|
---------------
|
|
|
|
The HTML documentation expects to have a copy of the auto-generated
|
|
configuration variable documentation Documentation/NuttXConfigVariables.html.
|
|
The script mkconfigvars.sh is a simple script that can be used to
|
|
re-generated that file as needed.
|
|
|
|
Help::
|
|
|
|
$ tools/mkconfigvars.sh -h
|
|
tools/mkconfigvars.sh is a tool for generation of configuration variable documentation
|
|
|
|
USAGE: tools/mkconfigvars.sh [-d|h] [-v <major.minor.patch>]
|
|
|
|
Where::
|
|
|
|
-v <major.minor.patch>
|
|
The NuttX version number expressed as a major, minor and patch number separated
|
|
by a period
|
|
-d
|
|
Enable script debug
|
|
-h
|
|
show this help message and exit
|
|
|
|
mkexport.sh and Export.mk
|
|
-------------------------------
|
|
|
|
These implement part of the top-level Makefile's 'export' target. That
|
|
target will bundle up all of the NuttX libraries, header files, and the
|
|
startup object into an export-able, binary NuttX distribution. The
|
|
Export.mk is used only by the mkexport.sh script to parse out options
|
|
from the top-level Make.defs file.
|
|
|
|
USAGE: tools/mkexport.sh [-d] [-z] [-u] -t <top-dir> [-x <lib-ext>] -l "lib1 [lib2 [lib3 ...]]"
|
|
|
|
This script also depends on the environment variable MAKE which is set
|
|
in the top-level Makefile before starting mkexport.sh. If MAKE is not
|
|
defined, the script will set it to `which make`.
|
|
|
|
mkfsdata.pl
|
|
-----------
|
|
|
|
This perl script is used to build the "fake" file system and CGI support
|
|
as needed for the apps/netutils/webserver. It is currently used only
|
|
by the Makefile at apps/examples/uip. That example serves as an example
|
|
of how to configure the uIP webserver "fake" file system.
|
|
|
|
NOTE: This perl script comes from uIP and was (probably) written
|
|
by Adam Dunkels. uIP has a license that is compatible with NuttX.
|
|
|
|
mkversion.c, cfgdefine.c, and cfgdefine.h
|
|
-----------------------------------------
|
|
|
|
This is C file that is used to build mkversion program. The mkversion
|
|
program is used during the initial NuttX build.
|
|
|
|
When you build NuttX there should be a version file called .version in
|
|
the top level NuttX directory (See Documentation/NuttXPortingGuide.html).
|
|
The first time you make NuttX, the top-level makefile will build the
|
|
mkversion executable from mkversion.c (using Makefile.host). The top-level
|
|
Makefile will then execute the mkversion program to convert the
|
|
.version file in the top level directory into include/nuttx/version.h.
|
|
version.h provides version information that can be included by C files.
|
|
|
|
mksyscall.c, cvsparser.c, and cvsparser.h
|
|
-----------------------------------------
|
|
|
|
This is a C file that is used to build mksyscall program. The mksyscall
|
|
program is used during the initial NuttX build by the logic in the top-
|
|
level syscall/ directory.
|
|
|
|
If you build NuttX as a separately compiled, monolithic kernel and separate
|
|
applications, then there is a syscall layer that is used to get from the
|
|
user application space to the NuttX kernel space. In the user application
|
|
"proxies" for each of the kernel functions are provided. The proxies have
|
|
the same function signature as the kernel function, but only execute a
|
|
system call.
|
|
|
|
Within the kernel, there are "stubs" for each of the system calls. The
|
|
stubs receive the marshalled system call data, and perform the actually
|
|
kernel function call (in kernel-mode) on behalf of the proxy function.
|
|
|
|
Information about the stubs and proxies is maintained in a comma separated
|
|
value (CSV) file in the syscall/ directory. The mksyscall program will
|
|
accept this CVS file as input and generate all of the required proxy or
|
|
stub files as output. See :doc:`/components/syscall` for additional information.
|
|
|
|
mksymtab.c, cvsparser.c, and cvsparser.h
|
|
----------------------------------------
|
|
|
|
This is a C file that is used to build symbol tables from comma separated
|
|
value (CSV) files. This tool is not used during the NuttX build, but
|
|
can be used as needed to generate files.
|
|
|
|
USAGE: ./mksymtab [-d] <cvs-file> <symtab-file> [<symtab-name> [<nsymbols-name>]]
|
|
|
|
Where::
|
|
|
|
<cvs-file> : The path to the input CSV file (required)
|
|
<symtab-file> : The path to the output symbol table file (required)
|
|
<symtab-name> : Optional name for the symbol table variable
|
|
Default: "g_symtab"
|
|
<nsymbols-name> : Optional name for the symbol table variable
|
|
Default: "g_nsymbols"
|
|
-d : Enable debug output
|
|
|
|
Example::
|
|
|
|
cd nuttx/tools
|
|
cat ../syscall/syscall.csv ../lib/libc.csv | sort >tmp.csv
|
|
./mksymtab.exe tmp.csv tmp.c
|
|
|
|
mkctags.sh
|
|
----------
|
|
|
|
A script for creating ctags from Ken Pettit. See http://en.wikipedia.org/wiki/Ctags
|
|
and http://ctags.sourceforge.net/
|
|
|
|
nxstyle.c
|
|
---------
|
|
|
|
I am embarrassed that this is here. This program is a complete hack
|
|
but, unfortunately, it has become so useful to me that I need to keep
|
|
it here.
|
|
|
|
A little background: I have tinkered with pretty printers for some
|
|
time and have not been happy with the results. An alternative that
|
|
occurred to me would be just a standard checker that examines a C
|
|
file that gives warnings for violations of the coding standard.
|
|
|
|
This turns out to be more difficult that you might think. A pretty
|
|
printer understands C syntax: They break the file up into its C
|
|
components then reassembles the output in the format. But parsing the
|
|
C loses the original file layout and so it not useful in this case.
|
|
|
|
This program instead, uses a collection of heuristics (i.e., hacks and
|
|
bandaids) to examine the C file for obvious violations of the coding
|
|
standard. This program is completely ignorant of C syntax; it simply
|
|
performs crude pattern matching to check the file.
|
|
|
|
Prints formatted messages that are classified as info, warn, error,
|
|
fatal. In a parsable format that can be used by editors and IDEs.
|
|
|
|
Usage::
|
|
|
|
nxstyle [-m <excess>] [-v <level>] [-r <start,count>] <filename>
|
|
nxstyle -h this help
|
|
nxstyle -v <level> where level is
|
|
0 - no output
|
|
1 - PASS/FAIL
|
|
2 - output each line (default)
|
|
|
|
See also indent.sh and uncrustify.cfg
|
|
|
|
pic32mx
|
|
-------
|
|
|
|
This directory contains build tools used only for PIC32MX/Z platforms
|
|
|
|
bdf-convert.c
|
|
-------------
|
|
|
|
This C file is used to build the bdf-converter program. The bdf-converter
|
|
program can be used to convert fonts in Bitmap Distribution Format (BDF)
|
|
into fonts that can be used in the NX graphics system.
|
|
|
|
Below are general instructions for creating and installing a new font
|
|
in the NX graphic system:
|
|
|
|
1. Locate a font in BDF format,
|
|
2. Use the bdf-converter program to convert the BDF font to the NuttX
|
|
font format. This will result in a C header file containing
|
|
definitions. That header file should be installed at, for example,
|
|
libnx/nxfonts/nxfonts_myfont.h.
|
|
|
|
Create a new NuttX configuration variable. For example, suppose
|
|
you define the following variable: CONFIG_NXFONT_MYFONT. Then
|
|
you would need to:
|
|
|
|
3. Define CONFIG_NXFONT_MYFONT=y in your NuttX configuration file.
|
|
|
|
A font ID number has to be assigned for each new font. The font ID
|
|
is defined in the file include/nuttx/nx/nxfonts.h. Those definitions
|
|
have to be extended to support your new font. Look at how the font ID
|
|
enabled by CONFIG_NXFONT_SANS23X27 is defined and add an ID for your
|
|
new font in a similar fashion:
|
|
|
|
4. include/nuttx/nx/nxfonts.h. Add your new font as a possible system
|
|
default font::
|
|
|
|
#if defined(CONFIG_NXFONT_SANS23X27)
|
|
# define NXFONT_DEFAULT FONTID_SANS23X27
|
|
#elif defined(CONFIG_NXFONT_MYFONT)
|
|
# define NXFONT_DEFAULT FONTID_MYFONT
|
|
#endif
|
|
|
|
Then define the actual font ID. Make sure that the font ID value
|
|
is unique::
|
|
|
|
enum nx_fontid_e
|
|
{
|
|
FONTID_DEFAULT = 0 /* The default font */
|
|
#ifdef CONFIG_NXFONT_SANS23X27
|
|
, FONTID_SANS23X27 = 1 /* The 23x27 sans serif font */
|
|
#endif
|
|
#ifdef CONFIG_NXFONT_MYFONT
|
|
, FONTID_MYFONT = 2 /* My shiny, new font */
|
|
#endif
|
|
...
|
|
|
|
Now add the font to the NX build system. There are several files that
|
|
you have to modify to do this. Look how the build system uses the
|
|
font CONFIG_NXFONT_SANS23X27 for examples:
|
|
|
|
5. nuttx/graphics/Makefile. This file needs logic to auto-generate
|
|
a C source file from the header file that you generated with the
|
|
the bdf-converter program. Notice NXFONTS_FONTID=2; this must be
|
|
set to the same font ID value that you defined in the
|
|
include/nuttx/nx/nxfonts.h file::
|
|
|
|
genfontsources:
|
|
ifeq ($(CONFIG_NXFONT_SANS23X27),y)
|
|
@$(MAKE) -C nxfonts -f Makefile.sources NXFONTS_FONTID=1 EXTRAFLAGS=$(EXTRAFLAGS)
|
|
endif
|
|
ifeq ($(CONFIG_NXFONT_MYFONT),y)
|
|
@$(MAKE) -C nxfonts -f Makefile.sources NXFONTS_FONTID=2 EXTRAFLAGS=$(EXTRAFLAGS)
|
|
endif
|
|
|
|
6. nuttx/libnx/nxfonts/Make.defs. Set the make variable NXFSET_CSRCS.
|
|
NXFSET_CSRCS determines the name of the font C file to build when
|
|
NXFONTS_FONTID=2::
|
|
|
|
ifeq ($(CONFIG_NXFONT_SANS23X27),y)
|
|
NXFSET_CSRCS += nxfonts_bitmaps_sans23x27.c
|
|
endif
|
|
ifeq ($(CONFIG_NXFONT_MYFONT),y)
|
|
NXFSET_CSRCS += nxfonts_bitmaps_myfont.c
|
|
endif
|
|
|
|
7. nuttx/libnx/nxfonts/Makefile.sources. This is the Makefile used
|
|
in step 5 that will actually generate the font C file. So, given
|
|
your NXFONTS_FONTID=2, it needs to determine a prefix to use for
|
|
auto-generated variable and function names and (again) the name of
|
|
the auto-generated file to create (this must be the same name that
|
|
was used in nuttx/libnx/nxfonts/Make.defs)::
|
|
|
|
ifeq ($(NXFONTS_FONTID),1)
|
|
NXFONTS_PREFIX := g_sans23x27_
|
|
GEN_CSRC = nxfonts_bitmaps_sans23x27.c
|
|
endif
|
|
ifeq ($(NXFONTS_FONTID),2)
|
|
NXFONTS_PREFIX := g_myfont_
|
|
GEN_CSRC = nxfonts_bitmaps_myfont.c
|
|
endif
|
|
|
|
8. graphics/libnx/nxfonts_bitmaps.c. This is the file that contains
|
|
the generic font structures. It is used as a "template" file by
|
|
nuttx/libnx/nxfonts/Makefile.sources to create your customized
|
|
font data set::
|
|
|
|
#if NXFONTS_FONTID == 1
|
|
# include "nxfonts_sans23x27.h"
|
|
#elif NXFONTS_FONTID == 2
|
|
# include "nxfonts_myfont.h"
|
|
#else
|
|
# error "No font ID specified"
|
|
#endif
|
|
|
|
Where nxfonts_myfont.h is the NuttX font file that we generated in
|
|
step 2 using the bdf-converter tool.
|
|
|
|
9. libnx/nxfonts/nxfonts_getfont.c. Finally, we need to extend the
|
|
logic that does the run-time font lookups so that can find our new
|
|
font. The lookup function is NXHANDLE nxf_getfonthandle(enum nx_fontid_e fontid).
|
|
The new font information needs to be added to data structures used by
|
|
that function::
|
|
|
|
#ifdef CONFIG_NXFONT_SANS23X27
|
|
extern const struct nx_fontpackage_s g_sans23x27_package;
|
|
#endif
|
|
#ifdef CONFIG_NXFONT_MYFONT
|
|
extern const struct nx_fontpackage_s g_myfont_package;
|
|
#endif
|
|
|
|
static FAR const struct nx_fontpackage_s *g_fontpackages[] =
|
|
{
|
|
#ifdef CONFIG_NXFONT_SANS23X27
|
|
&g_sans23x27_package,
|
|
#endif
|
|
#ifdef CONFIG_NXFONT_MYFONT
|
|
&g_myfont_package,
|
|
#endif
|
|
NULL
|
|
};
|
|
|
|
define.sh and define.bat
|
|
------------------------
|
|
|
|
Different compilers have different conventions for specifying pre-
|
|
processor definitions on the compiler command line. This bash
|
|
script allows the build system to create command line definitions
|
|
without concern for the particular compiler in use.
|
|
|
|
The define.bat script is a counterpart for use in the native Windows
|
|
build.
|
|
|
|
flash_writer.py
|
|
---------------
|
|
|
|
This flash writer is using the xmodem for firmware transfer on
|
|
boards based on cxd56 chip (Ex. Spresense). This tool depends on
|
|
the xmodem package (https://pypi.org/project/xmodem/).
|
|
|
|
for flashing the .spk image to the board please use:
|
|
tools/flash_writer.py -s -c /dev/ttyUSB0 -d -b 115200 -n nuttx.spk
|
|
|
|
ide_exporter.py
|
|
---------------
|
|
|
|
This Python script will help to create NuttX project in the IAR and
|
|
uVision IDEs. These are few simple the steps to export the IDE
|
|
workspaces.
|
|
|
|
1) Start the NuttX build from the Cygwin command line before trying to
|
|
create your project by running::
|
|
|
|
make V=1 |& tee build_log
|
|
|
|
This is necessary to certain auto-generated files and directories that
|
|
will be needed. This will provide the build log to construct the IDE
|
|
project also.
|
|
|
|
2) Export the IDE project base on that make log. The script usage:
|
|
|
|
usage: ide_exporter.py [-h] [-v] [-o OUT_DIR] [-d] build_log {iar,uvision_armcc,uvision_gcc} template_dir
|
|
|
|
positional arguments::
|
|
|
|
build_log Log file from make V=1
|
|
{iar,uvision_armcc,uvision_gcc}
|
|
The target IDE: iar, uvision_gcc, (uvision_armcc is experimental)
|
|
template_dir Directory that contains IDEs template projects
|
|
|
|
optional arguments::
|
|
|
|
-h, --help show this help message and exit
|
|
-v, --version show program's version number and exit
|
|
-o OUT_DIR, --output OUT_DIR
|
|
Output directory
|
|
-d, --dump Dump project structure tree
|
|
|
|
Example::
|
|
|
|
cd nuttx
|
|
make V=1 |& tee build_log
|
|
|
|
./tools/ide_exporter.py makelog_f2nsh_c iar ./boards/<arch>/<chip>/<board>/ide/template/iar -o ./boards/<arch>/<chip>/<board>/ide/nsh/iar
|
|
|
|
or::
|
|
|
|
./tools/ide_exporter.py makelog_f2nsh_c uvision_gcc ./boards/<arch>/<chip>/<board>/ide/template/uvision_gcc/ -o ./boards/<arch>/<chip>/<board>/ide/nsh/uvision
|
|
|
|
3) Limitations:
|
|
|
|
- IAR supports C only. Iar C++ does not compatible with g++ so disable
|
|
C++ if you want to use IAR.
|
|
- uvision_armcc : nuttx asm (inline and .asm) can't be compiled with
|
|
armcc so do not use this option.
|
|
- uvision_gcc : uvision project that uses gcc. Need to specify path to
|
|
gnu toolchain.
|
|
In uVison menu, select::
|
|
|
|
Project/Manage/Project Items.../FolderExtension/Use GCC compiler/ PreFix, Folder
|
|
|
|
4) Template projects' constrains:
|
|
|
|
- mcu, core, link script shall be configured in template project
|
|
- Templates' name are fixed:
|
|
|
|
- template_nuttx.eww : IAR nuttx workspace template
|
|
- template_nuttx_lib.ewp : IAR nuttx library project template
|
|
- template_nuttx_main.ewp : IAR nuttx main project template
|
|
- template_nuttx.uvmpw : uVision workspace
|
|
- template_nuttx_lib.uvproj : uVision library project
|
|
- template_nuttx_main.uvproj : uVision main project
|
|
- iar:
|
|
|
|
- Library option shall be set to 'None' so that IAR could use nuttx
|
|
libc
|
|
- __ASSEMBLY__ symbol shall be defined in assembler
|
|
|
|
- uVision_gcc:
|
|
|
|
- There should be one fake .S file in projects that has been defined
|
|
__ASSEMBLY__ in assembler.
|
|
- In Option/CC tab : disable warning
|
|
- In Option/CC tab : select Compile thump code (or Misc control =
|
|
-mthumb)
|
|
- template_nuttx_lib.uvproj shall add 'Post build action' to copy .a
|
|
file to .\lib
|
|
- template_nuttx_main.uvproj Linker:
|
|
|
|
- Select 'Do not use Standard System Startup Files' and 'Do not
|
|
use Standard System Libraries'
|
|
- Do not select 'Use Math libraries'
|
|
- Misc control = --entry=__start
|
|
|
|
5) How to create template for other configurations:
|
|
|
|
1) uVision with gcc toolchain:
|
|
|
|
- Copy 3 uVision project files
|
|
- Select the MCU for main and lib project
|
|
- Correct the path to ld script if needed
|
|
|
|
2) iar:
|
|
|
|
- Check if the arch supports IAR (only armv7-m is support IAR
|
|
now)
|
|
- Select the MCU for main and lib project
|
|
- Add new ld script file for IAR
|
|
|
|
NOTE: Due to bit rot, the template files for the stm3220g-eval and for
|
|
the stm32f429-disco have been removed from the NuttX repository. For
|
|
reference, they can be found in the Obsoleted repository at
|
|
Obsoleted/stm32f429i_disco/ltcd/template and at
|
|
Obsoleted/stm3220g-eval/template.
|
|
|
|
incdir.sh, incdir.bat, and incdir.c
|
|
-----------------------------------
|
|
|
|
Different compilers have different conventions for specifying lists
|
|
of include file paths on the compiler command line. This incdir.sh
|
|
bash script allows the build system to create include file paths without
|
|
concern for the particular compiler in use.
|
|
|
|
The incdir.bat script is a counterpart for use in the native Windows
|
|
build. However, there is currently only one compiler supported in
|
|
that context: MinGW-GCC.
|
|
|
|
incdir.c is a higher performance version of incdir.sh, converted to C.
|
|
|
|
indent.sh
|
|
---------
|
|
|
|
This script can be used to indent .c and .h files in a manner similar
|
|
to the NuttX coding style. It doesn't do a really good job, however
|
|
(see below and the comments at the top of the indent.sh file).
|
|
|
|
USAGE::
|
|
|
|
tools/indent.sh [-d] [-p] -o <out-file> <in-file>
|
|
tools/indent.sh [-d] [-p] <in-file-list>
|
|
tools/indent.sh [-d] -h
|
|
|
|
Where::
|
|
|
|
-<in-file>
|
|
A single, unformatted input file
|
|
-<in-file-list>
|
|
A list of unformatted input files that will be reformatted in place.
|
|
-o <out-file>
|
|
Write the single, reformatted <in-file> to <out-file>. <in-file>
|
|
will not be modified.
|
|
-d
|
|
Enable script debug
|
|
-p
|
|
Comments are pre-formatted. Do not reformat.
|
|
-h
|
|
Show this help message and exit
|
|
|
|
The conversions make by the indent.sh script differs from the NuttX coding
|
|
style in that:
|
|
|
|
1. The coding standard requires that the trailing ``*/`` of a multi-line
|
|
comment be on a separate line. By default, indent.sh will put the
|
|
final ``*/`` on the same line as the last comment text. If your C file
|
|
already has properly formatted comments then using the ``-p`` option will
|
|
eliminate that bad behavior
|
|
|
|
2. If your source file has highly formatted comments containing things
|
|
such as tables or lists, then use the -p option to preserve those
|
|
pre-formatted comments.
|
|
|
|
3. I usually align things vertically (like '=' in assignments),
|
|
|
|
4. indent.sh puts a bogus blank line at the top of the file,
|
|
|
|
5. I don't like the way it handles nested conditional compilation
|
|
intermixed with code. I prefer the preprocessor conditional tests
|
|
be all right justified in that case.
|
|
|
|
6. I also indent brackets differently on structures than does this script.
|
|
|
|
7. I normally use no spaces in casts. indent.sh adds spaces in casts like
|
|
``(FAR void *)&foo`` becomes ``(FAR void *) & foo``.
|
|
|
|
8. When used with header files, the initial idempotence conditional test
|
|
causes all preprocessor directives to be indented in the file. So for
|
|
header files, you will need to substitute "^# " with "#" in the
|
|
converted header file.
|
|
|
|
You will manually need to check for the issues listed above after
|
|
performing the conversions. nxstyle.c provides a good test that will
|
|
catch most of the indent.sh screw-ups. Together, they do a pretty good
|
|
job of formatting.
|
|
|
|
See also nxstyle.c and uncrustify.cfg
|
|
|
|
kconfig.bat
|
|
-----------
|
|
|
|
Recent versions of NuttX support building NuttX from a native Windows
|
|
CMD.exe shell. But kconfig-frontends is a Linux tool and is not yet
|
|
available in the pure CMD.exe environment. At this point, there are
|
|
only a few options for the Windows user (see the top-level README.txt
|
|
file).
|
|
|
|
You can, with some effort, run the Cygwin kconfig-mconf tool directly
|
|
in the CMD.exe shell. In this case, you do not have to modify the
|
|
.config file, but there are other complexities: You need to
|
|
temporarily set the Cygwin directories in the PATH variable and
|
|
then run kconfig-mconf outside of the Make system.
|
|
|
|
kconfig.bat is a Windows batch file at tools/kconfig.bat that automates
|
|
these steps. It is used from the top-level NuttX directory like::
|
|
|
|
tools/kconfig menuconfig
|
|
|
|
NOTE: There is currently an issue with accessing DOS environment
|
|
variables from the Cygwin kconfig-mconf running in the CMD.exe shell.
|
|
The following change to the top-level Kconfig file seems to work around
|
|
these problems::
|
|
|
|
config APPSDIR
|
|
string
|
|
- option env="APPSDIR"
|
|
+ default "../apps"
|
|
|
|
link.sh, link.bat, copydir.sh, copydir.bat, unlink.sh, and unlink.bat
|
|
---------------------------------------------------------------------
|
|
|
|
Different file systems have different capabilities for symbolic links.
|
|
Some Windows file systems have no native support for symbolic links.
|
|
Cygwin running under Windows has special links built in that work with
|
|
all cygwin tools. However, they do not work when Windows native tools
|
|
are used with cygwin. In that case something different must be done.
|
|
|
|
If you are building under Linux or under cygwin with a cygwin tool
|
|
chain, then your Make.defs file may have definitions like the
|
|
following::
|
|
|
|
DIRLINK = $(TOPDIR)/tools/link.sh
|
|
DIRUNLINK = (TOPDIR)/tools/unlink.sh
|
|
|
|
The first definition is not always present because link.sh is the
|
|
default. link.sh is a bash script that performs a normal, Linux-style
|
|
symbolic link; unlink.sh is a do-it-all unlinking script.
|
|
|
|
But if you are building under cygwin using a Windows native toolchain
|
|
within a POSIX framework (such as Cygwin), then you will need something
|
|
like the following in you Make.defs file::
|
|
|
|
DIRLINK = $(TOPDIR)/tools/copydir.sh
|
|
DIRUNLINK = (TOPDIR)/tools/unlink.sh
|
|
|
|
copydir.sh will copy the whole directory instead of linking it.
|
|
|
|
Finally, if you are running in a pure native Windows environment with
|
|
a CMD.exe shell, then you will need something like this::
|
|
|
|
DIRLINK = $(TOPDIR)/tools/copydir.bat
|
|
DIRUNLINK = (TOPDIR)/tools/unlink.bat
|
|
|
|
Note that this will copy directories. link.bat might also be used in
|
|
this case. link.bat will attempt to create a symbolic link using the
|
|
NTFS mklink.exe command instead of copying files. That logic, however,
|
|
has not been verified as of this writing.
|
|
|
|
Makefile.host
|
|
-------------
|
|
|
|
This is the makefile that is used to make the mkconfig program from
|
|
the mkconfig.c C file, the cmpconfig program from cmpconfig.c C file,
|
|
the mkversion program from the mkconfig.c C file, or the mksyscall
|
|
program from the mksyscall.c file. Usage::
|
|
|
|
cd tools/
|
|
make -f Makefile.host <program>
|
|
|
|
mkromfsimg.sh
|
|
-------------
|
|
|
|
This script may be used to automate the generation of a ROMFS file system
|
|
image. It accepts an rcS script "template" and generates an image that
|
|
may be mounted under /etc in the NuttX pseudo file system.
|
|
|
|
TIP: Edit the resulting header file and mark the generated data values
|
|
as 'const' so that they will be stored in FLASH.
|
|
|
|
mkdeps.c, cnvwindeps.c, mkwindeps.sh, and mknulldeps.sh
|
|
-------------------------------------------------------
|
|
|
|
NuttX uses the GCC compiler's capabilities to create Makefile dependencies.
|
|
The program mkdeps is used to run GCC in order to create the dependencies.
|
|
If a NuttX configuration uses the GCC toolchain, its Make.defs file (see
|
|
:doc:`/components/boards`) will include a line like::
|
|
|
|
MKDEP = $(TOPDIR)/tools/mkdeps[.exe] (See NOTE below)
|
|
|
|
If the NuttX configuration does not use a GCC compatible toolchain, then
|
|
it cannot use the dependencies and instead it uses mknulldeps.sh::
|
|
|
|
MKDEP = $(TOPDIR)/tools/mknulldeps.sh
|
|
|
|
The mknulldeps.sh is a stub script that does essentially nothing.
|
|
|
|
mkwindeps.sh is a version that creates dependencies using the Windows
|
|
native toolchain. That generates Windows native paths in the dependency
|
|
file. But the mkwindeps.sh uses cnvwindeps.c to convert the Windows
|
|
paths to POSIX paths. This adds some time to the Windows dependency
|
|
generation but is generally the best option available for that mixed
|
|
environment of Cygwin with a native Windows GCC toolchain.
|
|
|
|
mkdeps.c generates mkdeps (on Linux) or mkdeps.exe (on Windows).
|
|
However, this version is still under-development. It works well in
|
|
the all POSIX environment or in the all Windows environment but also
|
|
does not work well in mixed POSIX environment with a Windows toolchain.
|
|
In that case, there are still issues with the conversion of things like
|
|
'c:\Program Files' to 'c:program files' by bash. Those issues may,
|
|
eventually be solvable but for now continue to use mkwindeps.sh in
|
|
that mixed environment.
|
|
|
|
netusb.sh
|
|
---------
|
|
|
|
Helper script used to set up the CDC ECM Ethernet Over USB driver,
|
|
host routes, and IP Tables rules to support networking with a NuttX
|
|
system that has a CDC ECM Ethernet Over USB driver configured. Only
|
|
supported on Linux.
|
|
|
|
General usage:
|
|
|
|
$ ./tools/netusb.sh
|
|
Usage: tools/netusb.sh <main-interface> <usb-net-interface> <on|off>
|
|
|
|
This has been tested on the SAMA5D3-Xplained board; see
|
|
`Documentation/platforms/arm/sama5/boards/sama5d3-xplained/README.txt`
|
|
for more information on how to configure the CDC ECM driver for that board.
|
|
|
|
refresh.sh
|
|
----------
|
|
|
|
[NOTE: This script with --silent is really obsolete. refresh with the
|
|
silent option really adds default values. However, as of 217-07-09,
|
|
defconfig files are retained in a compressed format, i.e., with default
|
|
values removed. So the --silent option will accomplish nothing.
|
|
Without --silent, you will have the opportunity over override the default
|
|
value from the command line and, in that case, the script may still have
|
|
some minimal value.]
|
|
|
|
This is a bash script that automatics refreshing of board default
|
|
configuration (defconfig) files. It does not do anything special
|
|
that you cannot do manually, but is useful for me when I have to
|
|
update dozens of configuration files.
|
|
|
|
Configuration files have to be updated because over time, the
|
|
configuration settings change: New configurations are added and
|
|
new dependencies are added. So an old configuration file may
|
|
not be usable anymore until it is refreshed.
|
|
|
|
Help is also available::
|
|
|
|
$ tools/refresh.sh --help
|
|
tools/refresh.sh is a tool for refreshing board configurations
|
|
|
|
USAGE: ``./refresh.sh [options] <board>/<config>+``
|
|
|
|
Where [options] include::
|
|
|
|
--debug
|
|
Enable script debug
|
|
--silent
|
|
Update board configuration without interaction
|
|
--defaults
|
|
Do not prompt for new default selections; accept all recommended default values
|
|
--help
|
|
Show this help message and exit
|
|
<board>
|
|
The board directory under nuttx/boards
|
|
<config>
|
|
The board configuration directory under nuttx/boards/<arch>/<chip>/<board>
|
|
|
|
The steps to refresh the file taken by refresh.sh are:
|
|
|
|
1. Make tools/cmpconfig if it is not already built.
|
|
|
|
2. Copy the defconfig file to the top-level NuttX
|
|
directory as .config (being careful to save any previous
|
|
.config file that you might want to keep!).
|
|
|
|
3. Execute 'make oldconfig' to update the configuration.
|
|
'make oldconfig' will prompt you for each change in the
|
|
configuration that requires that you make some decision.
|
|
With the --silent option, the script will use 'make
|
|
oldefconfig' instead and you won't have to answer any
|
|
questions; the refresh will simply accept the default
|
|
value for any new configuration settings.
|
|
|
|
4. Then it runs tools/cmpconfig to show the real differences
|
|
between the configuration files. Configuration files are
|
|
complex and things can move around so a simple 'diff' between
|
|
two configuration files is often not useful. But tools/cmpconfig
|
|
will show only the meaningful differences between the two
|
|
configuration files.
|
|
|
|
5. It will edit the .config file to comment out the setting
|
|
of the CONFIG_APPS_DIR= setting. This setting should not
|
|
be in checked-in defconfig files because the actually must
|
|
be determined at the next time that the configuration is
|
|
installed.
|
|
|
|
6. Finally, the refreshed defconfig file is copied back in
|
|
place where it can be committed with the next set of
|
|
difference to the command line. If you select the --silent
|
|
option, this file copy will occur automatically. Otherwise,
|
|
refresh.sh will prompt you first to avoid overwriting the
|
|
defconfig file with changes that you may not want.
|
|
|
|
rmcr.c
|
|
------
|
|
|
|
Removes all white space from the end of lines. Whitespace here
|
|
includes space characters, TAB characters, horizontal and vertical
|
|
TABs, and carriage returns. Lines will be terminated with the
|
|
newline character only.
|
|
|
|
sethost.sh
|
|
----------
|
|
|
|
Saved configurations may run on Linux, Cygwin (32- or 64-bit), or other
|
|
platforms. The platform characteristics can be changed use 'make
|
|
menuconfig'. Sometimes this can be confusing due to the differences
|
|
between the platforms. Enter sethost.sh
|
|
|
|
sethost.sh is a simple script that changes a configuration to your
|
|
host platform. This can greatly simplify life if you use many different
|
|
configurations. For example, if you are running on Linux and you
|
|
configure like this::
|
|
|
|
$ tools/configure.sh board:configuration
|
|
|
|
The you can use the following command to both (1) make sure that the
|
|
configuration is up to date, AND (2) the configuration is set up
|
|
correctly for Linux::
|
|
|
|
$ tools/sethost.sh -l
|
|
|
|
Or, if you are on a Windows/Cygwin 64-bit platform::
|
|
|
|
$ tools/sethost.sh -c
|
|
|
|
Other options are available::
|
|
|
|
$ ./sethost.sh -h
|
|
|
|
USAGE: ./sethost.sh [-l|m|c|g|n] [make-opts]
|
|
./sethost.sh -h
|
|
|
|
Where:
|
|
-l|m|c|g|n selects Linux (l), macOS (m), Cygwin (c),
|
|
MSYS/MSYS2 (g) or Windows native (n). Default Linux
|
|
make-opts directly pass to make
|
|
-h will show this help test and terminate
|
|
|
|
simhostroute.sh
|
|
---------------
|
|
|
|
Helper script used to set up the tap driver, host routes,
|
|
and IP Tables rules to support networking with the
|
|
simulator under Linux. General usage::
|
|
|
|
$ tools/simhostroute.sh
|
|
Usage: tools/simhostroute.sh <interface> <on|off>
|
|
|
|
See boards/sim/sim/sim/NETWORK-LINUX.txt for further information
|
|
|
|
simbridge.sh
|
|
------------
|
|
|
|
Helper script used to set up a bridge to support networking with the
|
|
simulator under Linux. General usage::
|
|
|
|
$ tools/simbridge.sh
|
|
Usage: tools/simbridge.sh <interface> <on|off>
|
|
|
|
See boards/sim/sim/sim/NETWORK-LINUX.txt for further information
|
|
|
|
showsize.sh
|
|
-----------
|
|
|
|
Show the top 10 biggest memory hogs in code and data spaces. This
|
|
must be executed from the top-level NuttX directory like::
|
|
|
|
$ tools/showsize.sh
|
|
TOP 10 BIG DATA
|
|
...
|
|
TOP 10 BIG CODE
|
|
...
|
|
|
|
testbuild.sh
|
|
------------
|
|
|
|
This script automates building of a set of configurations. The intent is
|
|
simply to assure that the set of configurations build correctly. The -h
|
|
option shows the usage::
|
|
|
|
$ ./testbuild.sh -h
|
|
|
|
USAGE: ./testbuild.sh [-l|m|c|g|n] [-d] [-e <extraflags>] [-x] [-j <ncpus>] [-a <appsdir>] [-t <topdir>] [-p] [-G] <testlist-file>
|
|
./testbuild.sh -h
|
|
|
|
Where:
|
|
-l|m|c|g|n selects Linux (l), macOS (m), Cygwin (c),
|
|
MSYS/MSYS2 (g) or Windows native (n). Default Linux
|
|
-d enables script debug output
|
|
-e pass extra c/c++ flags such as -Wno-cpp via make command line
|
|
-x exit on build failures
|
|
-j <ncpus> passed on to make. Default: No -j make option.
|
|
-a <appsdir> provides the relative path to the apps/ directory. Default ../apps
|
|
-t <topdir> provides the absolute path to top nuttx/ directory. Default ../nuttx
|
|
-p only print the list of configs without running any builds
|
|
-A store the build executable artifact in ARTIFACTDIR (defaults to ../buildartifacts
|
|
-C Skip tree cleanness check.
|
|
-G Use "git clean -xfdq" instead of "make distclean" to clean the tree.
|
|
This option may speed up the builds. However, note that:
|
|
* This assumes that your trees are git based.
|
|
* This assumes that only nuttx and apps repos need to be cleaned.
|
|
* If the tree has files not managed by git, they will be removed
|
|
as well.
|
|
-R execute "run" script in the config directories if exists.
|
|
-h will show this help test and terminate
|
|
<testlist-file> selects the list of configurations to test. No default
|
|
|
|
Your PATH variable must include the path to both the build tools and the
|
|
kconfig-frontends tools
|
|
|
|
These script needs two pieces of information.
|
|
|
|
a. A description of the platform that you are testing on. This description
|
|
is provided by the optional -l, -m, -c, -g and -n options.
|
|
b. A list of configurations to build. That list is provided by a test
|
|
list file. The final, non-optional parameter, <testlist-file>,
|
|
provides the path to that file.
|
|
|
|
The test list file is a sequence of build descriptions, one per line. One
|
|
build descriptions consists of two comma separated values. For example::
|
|
|
|
stm32f429i-disco:nsh
|
|
arduino-due:nsh
|
|
/arm
|
|
/risc-v
|
|
|
|
The first value is the usual configuration description of the form
|
|
``<board-name>:<configuration-name>`` or ``/<folder-name>`` and must correspond to a
|
|
configuration or folder in the nuttx/boards directory.
|
|
|
|
The second value is valid name for a toolchain configuration to use
|
|
when building the configuration. The set of valid toolchain
|
|
configuration names depends on the underlying architecture of the
|
|
configured board.
|
|
|
|
The prefix ``-`` can be used to skip a configuration::
|
|
|
|
-stm32f429i-disco/nsh
|
|
|
|
or skip a configuration on a specific host(e.g. Darwin)::
|
|
|
|
-Darwin,sim:rpserver
|
|
|
|
uncrustify.cfg
|
|
--------------
|
|
|
|
This is a configuration script for the uncrustify code beautifier.
|
|
Uncrustify does well with forcing braces into "if" statements and
|
|
indenting per the NuttX C coding standard. It correctly does things
|
|
like placing all braces on separate lines at the proper indentation
|
|
level. It cannot handle certain requirements of the coding standard
|
|
such as
|
|
|
|
- FAR attributes in pointer declarations.
|
|
- The NuttX standard function header block comments.
|
|
- Naming violations such as use of CamelCase variable names,
|
|
lower case pre-processor definitions, etc.
|
|
|
|
Comment blocks, function headers, files headers, etc. must be formatted
|
|
manually.
|
|
|
|
Its handling of block comments is fragile. If the comment is perfect,
|
|
it leaves it alone, but if the block comment is deemed to need a fix
|
|
it starts erroneously indenting the continuation lines of the comment.
|
|
|
|
- uncrustify.cfg messed up the indent of most block comments.
|
|
cmt_sp_before_star_cont is applied inconsistently. I added::
|
|
|
|
cmt_indent_multi = false # disable all multi-line comment changes
|
|
|
|
to the .cfg file to limit its damage to block comments.
|
|
- It is very strict at wrapping lines at column 78. Even when column 79
|
|
just contained the ``/`` of a closing ``*/``. That created many
|
|
bad continuation lines.
|
|
|
|
- It moved '{' that opened a struct to the line defining the struct.
|
|
nl_struct_brace = add (or force) seemed to be ignored.
|
|
|
|
- It also aligned variable names in declarations and '=' signs in
|
|
assignment statements in a seemingly arbitrary manner. Making changes
|
|
that were not necessary.
|
|
|
|
NOTE: uncrustify.cfg should **ONLY** be used with new files that have an
|
|
inconsistent coding style. uncrustify.cfg should get you in the ballpark,
|
|
but you should expect to review and hand-edit the files to assume 100%
|
|
compliance.
|
|
|
|
WARNING: **NEVER** use uncrustify.cfg for modifications to existing NuttX
|
|
files. It will probably corrupt the style in subtle ways!
|
|
|
|
This was last verified against uncrustify 0.66.1 by Bob Feretich.
|
|
|
|
About uncrustify: Uncrustify is a highly configurable, easily modifiable
|
|
source code beautifier. To learn more about uncrustify:
|
|
|
|
http://uncrustify.sourceforge.net/
|
|
|
|
Source code is available on GitHub:
|
|
|
|
https://github.com/uncrustify/uncrustify
|
|
|
|
Binary packages are available for Linux via command line installers.
|
|
Binaries for both Windows and Linux are available at:
|
|
|
|
https://sourceforge.net/projects/uncrustify/files/
|
|
|
|
See also indent.sh and nxstyle.c
|
|
|
|
zds
|
|
---
|
|
|
|
This directory contains build tools used only with the ZDS-II
|
|
platforms (z8, ez80, zNeo).
|
|
|
|
zipme.sh
|
|
--------
|
|
|
|
I use this script to create the nuttx-xx.yy.tar.gz tarballs for
|
|
release. It is handy because it also does the kind of clean up
|
|
that you need to do to make a clean code release.
|
|
It can also PGP sign the final tarballs and create their SHA512 hash.
|
|
Any VCS files or directories are excluded from the final tarballs.
|
|
|
|
|
|
Help::
|
|
|
|
$ ./tools/zipme.sh -h
|
|
USAGE="USAGE: ./tools/zipme.sh [-d|h|v|s] [-b <build]> [-e <exclude>] [-k <key-id>] [<major.minor.patch>]"
|
|
|
|
Examples::
|
|
|
|
./tools/zipme.sh -s 9.0.0
|
|
Create version 9.0.0 tarballs and sign them.
|
|
./tools/zipme.sh -s -k XXXXXX 9.0.0
|
|
Same as above but use the key-id XXXXXX to sign the tarballs
|
|
./tools/zipme.sh -e "*.swp tmp" 9.0.0
|
|
Create the tarballs but exclude any .swp file and the "tmp" directory.
|