2011-03-10 15:42:28 +01:00
|
|
|
Application Folder
|
|
|
|
==================
|
|
|
|
|
2011-10-30 18:28:54 +01:00
|
|
|
Contents
|
|
|
|
--------
|
|
|
|
|
|
|
|
General
|
|
|
|
Directory Location
|
2012-12-23 21:22:41 +01:00
|
|
|
Built-In Applications
|
2011-10-30 18:28:54 +01:00
|
|
|
NuttShell (NSH) Built-In Commands
|
2011-11-19 19:06:02 +01:00
|
|
|
Synchronous Built-In Commands
|
2011-10-30 18:28:54 +01:00
|
|
|
Application Configuration File
|
2012-12-23 21:22:41 +01:00
|
|
|
Example Built-In Application
|
2012-01-29 15:15:20 +01:00
|
|
|
Building NuttX with Board-Specific Pieces Outside the Source Tree
|
2011-10-30 18:28:54 +01:00
|
|
|
|
|
|
|
General
|
|
|
|
-------
|
|
|
|
This folder provides various applications found in sub-directories. These
|
2012-12-24 15:31:02 +01:00
|
|
|
applications are not inherently a part of NuttX but are provided to help
|
2011-10-30 18:28:54 +01:00
|
|
|
you develop your own applications. The apps/ directory is a "break away"
|
2012-12-24 15:31:02 +01:00
|
|
|
part of the configuration that you may choose to use or not.
|
2011-10-30 18:28:54 +01:00
|
|
|
|
|
|
|
Directory Location
|
|
|
|
------------------
|
|
|
|
The default application directory used by the NuttX build should be named
|
|
|
|
apps/ (or apps-x.y/ where x.y is the NuttX version number). This apps/
|
2012-12-24 15:31:02 +01:00
|
|
|
directory should appear in the directory tree at the same level as the
|
2011-10-30 18:28:54 +01:00
|
|
|
NuttX directory. Like:
|
|
|
|
|
|
|
|
.
|
|
|
|
|- nuttx
|
|
|
|
|
|
|
|
|
`- apps
|
|
|
|
|
|
|
|
If all of the above conditions are TRUE, then NuttX will be able to
|
2013-06-02 01:25:16 +02:00
|
|
|
find the application directory. If your application directory has a
|
2011-10-30 18:28:54 +01:00
|
|
|
different name or is location at a different position, then you will
|
|
|
|
have to inform the NuttX build system of that location. There are several
|
|
|
|
ways to do that:
|
|
|
|
|
|
|
|
1) You can define CONFIG_APPS_DIR to be the full path to your application
|
|
|
|
directory in the NuttX configuration file.
|
|
|
|
2) You can provide the path to the application directory on the command line
|
|
|
|
like: make APPDIR=<path> or make CONFIG_APPS_DIR=<path>
|
|
|
|
3) When you configure NuttX using tools/configure.sh, you can provide that
|
|
|
|
path to the application directory on the configuration command line
|
|
|
|
like: ./configure.sh -a <app-dir> <board-name>/<config-name>
|
|
|
|
|
2012-12-23 21:22:41 +01:00
|
|
|
Built-In Applications
|
|
|
|
---------------------
|
2011-10-30 18:28:54 +01:00
|
|
|
NuttX also supports applications that can be started using a name string.
|
2012-04-19 19:52:14 +02:00
|
|
|
In this case, application entry points with their requirements are gathered
|
2011-10-30 18:28:54 +01:00
|
|
|
together in two files:
|
|
|
|
|
2012-12-23 21:22:41 +01:00
|
|
|
- builtin/builtin_proto.h Entry points, prototype function
|
2012-12-24 15:31:02 +01:00
|
|
|
- builtin/builtin_list.h Application specific information and requirements
|
2011-03-10 15:42:28 +01:00
|
|
|
|
2011-03-24 01:28:50 +01:00
|
|
|
The build occurs in several phases as different build targets are executed:
|
2011-10-30 18:28:54 +01:00
|
|
|
(1) context, (2) depend, and (3) default (all). Application information is
|
2011-03-24 01:28:50 +01:00
|
|
|
collected during the make context build phase.
|
2011-03-10 15:42:28 +01:00
|
|
|
|
|
|
|
To execute an application function:
|
2011-03-18 19:31:26 +01:00
|
|
|
|
2013-06-02 01:25:16 +02:00
|
|
|
exec_builtin() is defined in the nuttx/include/apps/builtin.h
|
2011-03-18 19:31:26 +01:00
|
|
|
|
2011-10-30 18:28:54 +01:00
|
|
|
NuttShell (NSH) Built-In Commands
|
|
|
|
---------------------------------
|
2012-12-23 21:22:41 +01:00
|
|
|
One use of builtin applications is to provide a way of invoking your custom
|
2011-10-30 18:28:54 +01:00
|
|
|
application through the NuttShell (NSH) command line. NSH will support
|
|
|
|
a seamless method invoking the applications, when the following option is
|
|
|
|
enabled in the NuttX configuration file:
|
2011-03-10 15:42:28 +01:00
|
|
|
|
2011-10-30 18:28:54 +01:00
|
|
|
CONFIG_NSH_BUILTIN_APPS=y
|
2011-03-18 19:31:26 +01:00
|
|
|
|
2012-12-23 21:22:41 +01:00
|
|
|
Applications registered in the apps/builtin/builtin_list.h file will then
|
2011-11-19 19:06:02 +01:00
|
|
|
be accessible from the NSH command line. If you type 'help' at the NSH
|
|
|
|
prompt, you will see a list of the registered commands.
|
|
|
|
|
|
|
|
Synchronous Built-In Commands
|
|
|
|
-----------------------------
|
|
|
|
By default, built-in commands started from the NSH command line will run
|
|
|
|
asynchronously with NSH. If you want to force NSH to execute commands
|
|
|
|
then wait for the command to execute, you can enable that feature by
|
|
|
|
adding the following to the NuttX configuration file:
|
|
|
|
|
|
|
|
CONFIG_SCHED_WAITPID=y
|
|
|
|
|
|
|
|
The configuration option enables support for the waitpid() RTOS interface.
|
|
|
|
When that interface is enabled, NSH will use it to wait, sleeping until
|
|
|
|
the built-in command executes to completion.
|
|
|
|
|
|
|
|
Of course, even with CONFIG_SCHED_WAITPID=y defined, specific commands
|
|
|
|
can still be forced to run asynchronously by adding the ampersand (&)
|
|
|
|
after the NSH command.
|
|
|
|
|
2011-10-30 18:28:54 +01:00
|
|
|
Application Configuration File
|
|
|
|
------------------------------
|
2014-03-06 19:21:14 +01:00
|
|
|
The NuttX configuration uses kconfig-frontends tools and the NuttX
|
|
|
|
configuration file (.config) file. For example, the NuttX .config
|
|
|
|
may have:
|
2012-12-24 15:31:02 +01:00
|
|
|
|
|
|
|
CONFIG_EXAMPLES_HELLO=y
|
|
|
|
|
|
|
|
This will select the apps/examples/hello in the following way:
|
|
|
|
|
|
|
|
- The top-level make will include examples/Make.defs
|
|
|
|
- examples/Make.defs will set CONFIGURED_APPS += examples/hello
|
|
|
|
like this:
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_EXAMPLES_HELLO),y)
|
|
|
|
CONFIGURED_APPS += examples/hello
|
|
|
|
endif
|
|
|
|
|
2012-12-23 21:22:41 +01:00
|
|
|
Example Built-In Application
|
|
|
|
----------------------------
|
2012-04-19 19:52:14 +02:00
|
|
|
An example application skeleton can be found under the examples/hello
|
2012-12-23 21:22:41 +01:00
|
|
|
sub-directory. This example shows how a builtin application can be added
|
2014-03-06 19:21:14 +01:00
|
|
|
to the project. One must:
|
2012-12-24 15:31:02 +01:00
|
|
|
|
|
|
|
1. Create sub-directory as: appname
|
|
|
|
|
|
|
|
2. In this directory there should be:
|
|
|
|
|
|
|
|
- A Make.defs file that would be included by the apps/Makefile
|
2015-06-28 16:14:53 +02:00
|
|
|
- A Kconfig file that would be used by the configuration tool (see the
|
|
|
|
file kconfig-language.txt in the NuttX tools repository). This
|
|
|
|
Kconfig file should be included by the apps/Kconfig file
|
2012-12-24 15:31:02 +01:00
|
|
|
- A Makefile, and
|
|
|
|
- The application source code.
|
|
|
|
|
|
|
|
3. The application source code should provide the entry point:
|
|
|
|
appname_main()
|
|
|
|
|
|
|
|
4. Set the requirements in the file: Makefile, specially the lines:
|
|
|
|
|
|
|
|
APPNAME = appname
|
|
|
|
PRIORITY = SCHED_PRIORITY_DEFAULT
|
|
|
|
STACKSIZE = 768
|
|
|
|
ASRCS = asm source file list as a.asm b.asm ...
|
|
|
|
CSRCS = C source file list as foo1.c foo2.c ..
|
2011-03-10 15:42:28 +01:00
|
|
|
|
2012-12-24 15:31:02 +01:00
|
|
|
4b. The Make.defs file should include a line like:
|
2011-10-30 18:28:54 +01:00
|
|
|
|
2012-12-24 15:31:02 +01:00
|
|
|
ifeq ($(CONFIG_APPNAME),y)
|
|
|
|
CONFIGURED_APPS += appname
|
|
|
|
endif
|
2011-10-30 18:28:54 +01:00
|
|
|
|
2012-01-29 15:15:20 +01:00
|
|
|
Building NuttX with Board-Specific Pieces Outside the Source Tree
|
|
|
|
-----------------------------------------------------------------
|
|
|
|
|
|
|
|
Q: Has anyone come up with a tidy way to build NuttX with board-
|
|
|
|
specific pieces outside the source tree?
|
|
|
|
A: Here are four:
|
|
|
|
|
|
|
|
1) There is a make target called 'make export'. It will build
|
|
|
|
NuttX, then bundle all of the header files, libaries, startup
|
|
|
|
objects, and other build components into a .zip file. You
|
|
|
|
can can move that .zip file into any build environment you
|
|
|
|
want. You even build NuttX under a DOS CMD window.
|
|
|
|
|
|
|
|
This make target is documented in the top level nuttx/README.txt.
|
|
|
|
|
|
|
|
2) You can replace the entire apps/ directory. If there is
|
|
|
|
nothing in the apps/ directory that you need, you can define
|
|
|
|
CONFIG_APPS_DIR in your .config file so that it points to a
|
|
|
|
different, custom application directory.
|
|
|
|
|
|
|
|
You can copy any pieces that you like from the old apps/directory
|
|
|
|
to your custom apps directory as necessary.
|
|
|
|
|
|
|
|
This is documented in NuttX/configs/README.txt and
|
|
|
|
nuttx/Documentation/NuttxPortingGuide.html (Online at
|
2015-06-29 19:24:52 +02:00
|
|
|
https://bitbucket.org/nuttx/documentation/src/master/NuttxPortingGuide.html#apndxconfigs
|
2012-01-29 15:15:20 +01:00
|
|
|
under Build options). And in the apps/README.txt file.
|
|
|
|
|
|
|
|
3) If you like the random collection of stuff in the apps/ directory
|
|
|
|
but just want to expand the existing components with your own,
|
|
|
|
external sub-directory then there is an easy way to that too:
|
|
|
|
You just create the sympolic link at apps/external that
|
|
|
|
redirects to your application sub-directory. The apps/Makefile
|
|
|
|
will always automatically check for the existence of an
|
|
|
|
apps/external directory and if it exists, it will automatically
|
|
|
|
incorporate it into the build.
|
|
|
|
|
|
|
|
This feature of the apps/Makefile is documented only here.
|
|
|
|
|
|
|
|
You can, for example, create a script called install.sh that
|
|
|
|
installs a custom application, configuration, and board specific
|
|
|
|
directory:
|
|
|
|
|
|
|
|
a) Copy 'MyBoard' directory to configs/MyBoard.
|
2012-04-19 19:52:14 +02:00
|
|
|
b) Add a symbolic link to MyApplication at apps/external
|
2012-01-29 15:15:20 +01:00
|
|
|
c) Configure NuttX (usually by:
|
2013-06-02 01:25:16 +02:00
|
|
|
|
2012-01-29 15:15:20 +01:00
|
|
|
tools/configure.sh MyBoard/MyConfiguration
|
|
|
|
|
2014-03-06 19:21:14 +01:00
|
|
|
or simply by copying defconfig->nuttx/.config,
|
|
|
|
setenv.sh->nuttx/setenv.sh, and Make.defs->nuttx/Make.defs.
|
2012-01-29 15:15:20 +01:00
|
|
|
|
2012-01-29 21:07:16 +01:00
|
|
|
Using the 'external' link makes it especially easy to add a
|
|
|
|
'built-in' application an existing configuration.
|
|
|
|
|
2012-01-29 15:15:20 +01:00
|
|
|
4) Add any link to apps/
|
|
|
|
|
|
|
|
a) Add symbolic links apps/ to as many other directories as you
|
2014-03-06 19:21:14 +01:00
|
|
|
want,
|
|
|
|
b) Add the symbolic link to the list of candidate paths in the
|
|
|
|
top level apps/Makefile, and
|
|
|
|
b) Add the (relative) paths to the CONFIGURED_APPS list
|
|
|
|
in the Make.defs file in your new directory.
|
2012-01-29 15:15:20 +01:00
|
|
|
|
|
|
|
That is basically the same as my option #3 but doesn't use the
|
2014-03-06 19:21:14 +01:00
|
|
|
magic 'external' link.
|