aboutsummaryrefslogtreecommitdiff
path: root/nuttx/tools/README.txt
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/tools/README.txt')
-rw-r--r--nuttx/tools/README.txt486
1 files changed, 0 insertions, 486 deletions
diff --git a/nuttx/tools/README.txt b/nuttx/tools/README.txt
deleted file mode 100644
index 8df4a7783..000000000
--- a/nuttx/tools/README.txt
+++ /dev/null
@@ -1,486 +0,0 @@
-tools/README.txt
-================
-
-This README file addresses the contents of the NuttX tools/ directory.
-
-The tools/ directory contains miscellaneous scripts and host C programs
-that are necessary parts of the the NuttX build system. These files
-include:
-
-README.txt
-----------
-
- This file!
-
-Config.mk
----------
-
- This file contains common definitions used by many configureation 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.
-
-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,
- OSX, or similar). See configs/README.txt 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 execuates configure.exe if it is available. If
- configure.exe is not available, then configure.bat will attempt to build it
- first.
-
- In order two 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/. Tt is recommended the you not
- install the optional MSYS components as there may be conflicts.
- 2) That path to bin bin/ directory containing mingw-gcc.exe must be
- included in the PATH variable.
-
-discover.py
------------
-
- Example script for discovering devices in the local network.
- It is the counter part to apps/netutils/discover
-
-mkconfig.c, cfgdefine.c, and cfgdefine.h
-----------------------------------------
-
- These are Cs file 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 configs/README.txt 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.
-
-cmdconfig.c
------------
-
- This C file can be used to build a utility for comparing two NuttX
- configuration files.
-
-mkexport.sh and Makefile.export
--------------------------------
-
- 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
- Makefile.export is used only by the mkexport.sh script to parse out
- options from the top-level Make.defs file.
-
-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 th
- 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 syscall/README.txt for additonal information.
-
-mksymtab.c, cvsparser.c, and cvsparser.h
-----------------------------------------
-
- This is a C file that is used to build symbol tables from common-separated
- value (CSV) files. This tool is not used during the NuttX build, but
- can be used as needed to generate files.
-
- USAGE: ./mksymtab <cvs-file> <symtab-file>
-
- Where:
-
- <cvs-file> : The path to the input CSV file
- <symtab-file>: The path to the output symbol table file
- -d : Enable debug output
-
- Example:
-
- cd nuttx/tools
- cat ../syscall/syscall.csv ../lib/lib.csv | sort >tmp.csv
- ./mksymtab.exe tmp.csv tmp.c
-
-pic32mx
--------
-
- This directory contains build tools used only for PIC32MX platforms
-
-bdf-convert.c
--------------
-
- This C file is used to build the bdf-converter program. The bdf-converter
- program 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
- defintions. That header file should be installed at, for example,
- graphics/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 you 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
- ...
-
- New Add the font to the NX build system. There are several files that
- you have to modify to to this. Look how the build system uses the
- font CONFIG_NXFONT_SANS23X27 for examaples:
-
- 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 TOPDIR=$(TOPDIR) NXFONTS_FONTID=1 EXTRADEFINES=$(EXTRADEFINES)
- endif
- ifeq ($(CONFIG_NXFONT_MYFONT),y)
- @$(MAKE) -C nxfonts -f Makefile.sources TOPDIR=$(TOPDIR) NXFONTS_FONTID=2 EXTRADEFINES=$(EXTRADEFINES)
- endif
-
- 6. nuttx/graphics/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/graphics/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 autogenerated file to create (this must be the same name that
- was used in nuttx/graphics/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/nxfonts/nxfonts_bitmaps.c. This is the file that contains
- the generic font structures. It is used as a "template" file by
- nuttx/graphics/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. graphics/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
- };
-
-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 generate of a ROMFS file system
- image. It accepts an rcS script "template" and generates and image that
- may be mounted under /etc in the NuttX pseudo file system.
-
-mkdeps.sh
-mkdeps.bat
-mkdeps.c
-mknulldeps.sh
--------------
-
- NuttX uses the GCC compilers capabilities to create Makefile dependencies.
- The bash script mkdeps.sh is used to run GCC in order to create the
- dependencies. If a NuttX configuration uses the GCC toolchain, its Make.defs
- file (see configs/README.txt) will include a line like:
-
- MKDEP = $(TOPDIR)/tools/mkdeps.sh, or
- 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.
-
- NOTE: The mk*deps.* files are undergoing change. mkdeps.sh is a bash
- script that produces dependencies well for POSIX style hosts (e..g.,
- Linux and Cygwin). It does not work well for mixed environments with
- a Windows toolchain running in a POSIX style environemnt (hence, the
- mknulldeps.sh script). And, of course, cannot be used in a Windows
- nativ environment.
-
- [mkdeps.sh does have an option, --winpath, that purports to convert
- the dependencies generated by a Windows toolchain to POSIX format.
- However, that is not being used and mostly likely does not cover
- all of the conversion cases.]
-
- mkdeps.bat is a simple port of the bash script to run in a Windows
- command shell. However, it does not work well either because some
- of the common CFLAGS use characters like '=' which are transformed
- by the CMD.exe shell.
-
- mkdeps.c generates mkdeps (on Linux) or mkdeps.exe (on Windows).
- However, this verison 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 mknulldeps.sh in
- that mixed environment.
-
-define.sh
-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 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.
-
-incdir.sh
-incdir.bat
----------
-
- Different compilers have different conventions for specifying lists
- of include file paths on the 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.
-
-link.sh
-link.bat
-copydir.sh
-copydir.bat
-unlink.sh
-unlink.bat
-----------
-
- Different file system 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. ;ink.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.
-
-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 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 Cgywin 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 an 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"
-
-mkimage.sh
-----------
-
- The creates a downloadable image as needed with the rrload bootloader.
-
-indent.sh
----------
-
- This script can be used to indent .c and .h files in a manner similar
- to my coding NuttX coding style. It doesn't do a really good job,
- however (see the comments at the top of the indent.sh file).
-
-zipme.sh
---------
-
- I use this script to create the nuttx-xx.yy.tar.gz tarballs for
- release on SourceForge. It is handy because it also does the
- kind of clean that you need to do to make a clean code release.