1README
2^^^^^^
3
4 o Environments
5 - Installing Cygwin
6 - Ubuntu Bash under Windows 10
7 o Installation
8 - Download and Unpack
9 - Semi-Optional apps/ Package
10 - Installation Directories with Spaces in the Path
11 - Downloading from Repositories
12 - Related Repositories
13 - Notes about Header Files
14 o Configuring NuttX
15 - Instantiating "Canned" Configurations
16 - Refreshing Configurations
17 - NuttX Configuration Tool
18 - Finding Selections in the Configuration Menus
19 - Reveal Hidden Configuration Options
20 - Make Sure that You are on the Right Platform
21 - Comparing Two Configurations
22 - Making defconfig Files
23 - Incompatibilities with Older Configurations
24 - NuttX Configuration Tool under DOS
25 o Toolchains
26 - Cross-Development Toolchains
27 - NuttX Buildroot Toolchain
28 o Shells
29 o Building NuttX
30 - Building
31 - Re-building
32 - Build Targets and Options
33 - Native Windows Build
34 - Installing GNUWin32
35 o Cygwin Build Problems
36 - Strange Path Problems
37 - Window Native Toolchain Issues
38 o Documentation
39
40ENVIRONMENTS
41^^^^^^^^^^^^
42
43 NuttX requires a POSIX development environment such as you would find under
44 Linux or macOS. NuttX may also be installed and built on Windows system
45 if you also provide such a POSIX development environment. Options for a
46 POSIX development environment under Windows include:
47
48 - An installation of Linux on a virtual machine (VM) in Windows. I have
49 not been happy using a VM myself. I have had stability problems with
50 open source VMs and commercial VMs cost more than I want to spend.
51 Sharing files with Linux running in a VM is awkward; sharing devices
52 connected to the Windows box with Linux in a VM is, at the very least,
53 confusing; Using Windows tools (such as Segger J-Link) with files
54 built under the Linux VM is not a possibility.
55
56 - The Cygwin environment. Instructions for installation of Cygwin on a
57 Windows system are provided in the following paragraph, "Installing
58 Cygwin". Cygwin is a mature, well-tested, and very convenient
59 environment. It is especially convenient if you need to
60 integrate with Windows tools and files. Downsides are that the
61 installation time is very long and the compile times are slow.
62
63 - Ubuntu/Bash shell under Windows 10. This is a new option under
64 Windows 10. See the section "Ubuntu Bash under Windows 10" below.
65 This is an improvement over Cygwin if your concern is compile time;
66 its build performance is comparable to native Linux, certainly better
67 than the Cygwin build time. It also installs in a tiny fraction of
68 the time as Cygwin, perhaps 20 minutes for the basic Ubuntu install
69 (vs. more than a day for the complete Cygwin install).
70
71 There have been even more recent ports of Linux environment to
72 Windows. I need to update this section to include some mention of
73 these alternatives.
74
75 - The MSYS environment. MSYS derives from an older version of Cygwin
76 simplified and adapted to work more naturally in the Windows
77 environment. See http://www.mingw.org/wiki/MSYS if you are
78 interested in using MSYS. The advantages of the MSYS environment is
79 that it is better integrted with the native Windows environment and
80 lighter weight; it uses only a minimal number of add-on POSIX-land
81 tools.
82
83 The download link in that Wiki takes you to the SourceForge download
84 site. The SourceForge MSYS project has been stagnant for some time.
85 The MSYS project has more recently moved to
86 http://odsn.net/projects/sfnet_mingwbundle. Downloads of current .zip
87 files are available there but no instructions for the installation.
88
89 - MSYS2 appears to be a re-write of MSYS based on a newer version of
90 Cygwin. Is it available at https://www.msys2.org. A windows
91 installer is available at that site along with very good installation
92 instructions. The download is relatively quick (at least compared to
93 Cygwin) and the 'pacman' package management tool supports supports
94 simple system updates. For example, 'pacman -S git' will install the
95 GIT command line utilities.
96
97 - Other POSIX environments. Check out:
98
99 UnxUtils: https://sourceforge.net/projects/unxutils/,
100 https://en.wikipedia.org/wiki/UnxUtils
101 MobaXterm: https://mobaxterm.mobatek.net/
102 Gow: https://github.com/bmatzelle/gow/wiki
103
104 Disclaimer: In principle, these should work. However, I have never
105 used any of these environments and cannot guarantee that there is
106 not some less-than-obvious issues.
107
108 NuttX can also be installed and built on a native Windows system, but with
109 some potential tool-related issues (see the discussion "Native Windows
110 Build" under "Building NuttX" below). GNUWin32 is used to provide
111 compatible native windows tools.
112
113Installing Cygwin
114-----------------
115
116 Installing Cygwin on your Windows PC is simple, but time consuming. See
117 http://www.cygwin.com/ for installation instructions. Basically you just
118 need to download a tiny setup.exe program and it does the real, network
119 installation for you.
120
121 Some Cygwin installation tips:
122
123 1. Install at C:\cygwin
124
125 2. Install EVERYTHING: "Only the minimal base packages from the
126 Cygwin distribution are installed by default. Clicking on categories
127 and packages in the setup.exe package installation screen will
128 provide you with the ability to control what is installed or updated.
129 Clicking on the "Default" field next to the "All" category will
130 provide you with the opportunity to install every Cygwin package.
131 Be advised that this will download and install hundreds of megabytes
132 to your computer."
133
134 If you use the "default" installation, you will be missing many
135 of the Cygwin utilities that you will need to build NuttX. The
136 build will fail in numerous places because of missing packages.
137
138 NOTE: The last time I installed EVERYTHING, the download was
139 about 5GiB. The server I selected was also very slow so it took
140 over a day to do the whole install!
141
142 NOTE: You don't really have to install EVERYTHING but I cannot
143 answer the question "Then what should I install?" I don't know
144 the answer to that and so will continue to recommend installing
145 EVERYTHING.
146
147 You should certainly be able to omit "Science", "Math", and
148 "Publishing". You can try omitting KDE, Gnome, GTK, and other
149 graphics packages if you don't plan to use them.
150
151 Perhaps a minimum set would be those packages listed below for the
152 "Ubuntu Bash under Windows 10" installation?
153
154 UPDATE: Sergey Frolov had success with the following minimal
155 Cygwin configuration:
156
157 1. After starting the Cygwin installer, keep the recommended
158 packages that are pre-selected in the default configuration.
159 2. Using the installation tools, add the following packages:
160
161 make (GNU make) bison libgmp3-dev
162 gcc-core byacc libmpfr-dev
163 gcc-g++ gperf libmpc-dev
164 flex gdb automake-1.15
165 libncurses-dev libgmp-dev
166
167 After installing Cygwin, you will get lots of links for installed
168 tools and shells. I use the RXVT native shell. It is fast and reliable
169 and does not require you to run the Cygwin X server (which is neither
170 fast nor reliable). Unless otherwise noted, the rest of these
171 instructions assume that you are at a bash command line prompt in
172 either Linux or in Cygwin shell.
173
174Using MSYS
175----------
176
177 MSYS is an environment the derives from Cygwin. Thus, most things said
178 about Cygwin apply equally to MSYS. This section will, then, focus on
179 the differences when using MSYS, specifically MSYS2.
180
181 Here is it assumed that you have already downloaded and installed MSYS2
182 from https://www.msys2.org using the windows installer available at that
183 location. It is also assumed that you have brought in the necessary
184 tools using the 'pacman' package management tool Tools needed including:
185
186 pacman -S git
187 pacman -S make
188 pacman -S gcc
189 pacman -S gdb
190
191 And possibly others depending upon your usage. Then you will need to
192 build and install kconfig-frontends per the instructions of the top-level
193 README.txt file in the tools repository. This requires the following
194 additional tools:
195
196 pacman -S bison
197 pacman -S gperf
198 pacman -S ncurses-devel
199 pacman -S automake-wrapper
200 pacman -S autoconf
201 pacman -S pkg-config
202
203 Because of some versioning issues, I had to run 'aclocal' prior to
204 running the kconfig-frontends configure script. See "Configuring NuttX"
205 below for further information.
206
207 Unlike Cygwin, MSYS does not support symbolic links. The 'ln -s' command
208 will, in fact, copy a directory! This means that you Make.defs file will
209 have to include definitions like:
210
211 ifeq ($(CONFIG_WINDOWS_MSYS),y)
212 DIRLINK = $(TOPDIR)/tools/copydir.sh
213 DIRUNLINK = $(TOPDIR)/tools/unlink.sh
214 endif
215
216 This will force the directory copies to work in a way that can be handled
217 by the NuttX build system. NOTE: The default link.sh script has been
218 updated so that is should now be MSYS2 compatible. The above is preferred
219 but no longer necessary in the Make.defs file.
220
221 To build the simulator under MSYS, you also need:
222
223 pacman -S zlib-devel
224
225 It appears that you cannot use directory names with spaces in them like
226 "/c/Program\ Files \(86\)" in the MSYS path variable. I worked around this
227 by create Windows junctions like this::
228
229 1. Open the a windows command terminal,
230 2. CD to c:\msys64, then
231 3. mklink /j programfiles "C:/Program\ Files" and
232 4. mklink /j programfiles86 "C:/Program\ Files\ \(x86\)"
233
234 They then show up as /programfiles and /programfiles86 with the MSYS2
235 sandbox. Thos paths can then be used with the PATH variable. I had
236 to do something similar for the path to the GNU Tools "ARM Embedded
237 Toolchain" which also has spaces in the path name.
238
239Ubuntu Bash under Windows 10
240----------------------------
241
242 A better version of a command-line only Ubuntu under Windows 10 (beta)
243 has recently been made available from Microsoft.
244
245 Installation
246 ------------
247 Installation instructions abound on the Internet complete with screen
248 shots. I will attempt to duplicate those instructions in full here.
249 Here are the simplified installation steps:
250
251 - Open "Settings".
252 - Click on "Update & security".
253 - Click on "For Developers".
254 - Under "Use developer features", select the "Developer mode" option to
255 setup the environment to install Bash.
256 - A message box should pop up. Click "Yes" to turn on developer mode.
257 - After the necessary components install, you'll need to restart your
258 computer.
259
260 Once your computer reboots:
261
262 - Open "Control Panel".
263 - Click on "Programs".
264 - Click on "Turn Windows features on or off".
265 - A list of features will pop up, check the "Windows Subsystem for Linux
266 (beta)" option.
267 - Click OK.
268 - Once the components installed on your computer, click the "Restart
269 now" button to complete the task.
270
271 After your computer restarts, you will notice that Bash will not appear in
272 the "Recently added" list of apps, this is because Bash isn't actually
273 installed yet. Now that you have setup the necessary components, use the
274 following steps to complete the installation of Bash:
275
276 - Open "Start", do a search for bash.exe, and press "Enter".
277 - On the command prompt, type y and press Enter to download and install
278 Bash from the Windows Store. This will take awhile.
279 - Then you'll need to create a default UNIX user account. This account
280 doesn't have to be the same as your Windows account. Enter the
281 username in the required field and press Enter (you can't use the
282 username "admin").
283 - Close the "bash.exe" command prompt.
284
285 Now that you completed the installation and setup, you can open the Bash
286 tool from the Start menu like you would with any other app.
287
288 Accessing Windows Files from Ubuntu
289 -----------------------------------
290 File systems will be mounted under "/mnt" so for example "C:\Program Files"
291 appears at "/mnt/c/Program Files". This is as opposed to Cygwin where
292 the same directory would appear at "/cygdrive/c/Program Files".
293
294 With these differences (perhaps a few other Windows quirks) the Ubuntu
295 install works just like Ubuntu running natively on your PC.
296
297 A good tip for file sharing is to use symbolic links within your Ubuntu
298 home directory. For example, suppose you have your "projects" directory
299 at C:\Documents\projects. Then you can set up a link to the projects/
300 directory in your Ubuntu directory like:
301
302 ln -s /mnt/c/Documents/projects projects
303
304 Accessing Ubuntu Files From Windows
305 -----------------------------------
306 In Ubuntu Userspace for Windows, the Ubuntu file system root directory is
307 at:
308
309 %localappdata%\lxss\rootfs
310
311 Or
312
313 C:\Users\Username\AppData\Local\lxss\rootfs
314
315 However, I am unable to see my files under the rootfs\home directory.
316 After some looking around, I find the home directory
317 %localappdata%\lxss\home.
318
319 With that trick access to the /home directory, you should actually be
320 able to use Windows tools outside of the Ubuntu sandbox with versions of
321 NuttX built within the sandbox using that path.
322
323 Executing Windows Tools from Ubuntu
324 -----------------------------------
325 You can also execute Windows tools from within the Ubuntu sandbox:
326
327 /mnt/c/Program\ Files\ \(x86\)/Microchip/xc32/v1.43/bin/xc32-gcc.exe --version
328 Unable to translate current working directory. Using C:\WINDOWS\System32
329 xc32-gcc.exe (Microchip Technology) 4.8.3 MPLAB XC32 Compiler v1.43 Build date: Mar 1 2017
330 ...
331
332 The error message indicates that there are more issues: You cannot mix
333 Windows tools that use Windows style paths in an environment that uses
334 POSIX paths. I think you would have to use Linux tools only from within
335 the Ubuntu sandbox.
336
337 Install Ubuntu Software
338 -----------------------
339 Use "sudo apt-get install <package name>". As examples, this is how
340 you would get GIT:
341
342 sudo apt-get install git
343
344 This will get you a compiler for your host PC:
345
346 sudo apt-get install gcc
347
348 This will get you an ARM compiler for your target:
349
350 sudo apt-get install gcc-arm-none-eabi
351
352 NOTE: That is just an example. I am not sure if apt-get will give you a
353 current or usable compiler. You should carefully select your toolchain
354 for the needs of your project.
355
356 You will also need to get the kconfig-frontends configuration as
357 described below under "NuttX Configuration Tool". In order to build the
358 kconfig-frontends configuration tool you will also need: make, gperf,
359 flex, bison, and libncurses-dev.
360
361 That is enough to do a basic NuttX build.
362
363 Integrating with Windows Tools
364 ------------------------------
365 If you want to integrate with Windows native tools, then you would need
366 deal with the same kind of craziness as with integrating Cygwin with
367 native toolchains, see the section "Cygwin Build Problems" below.
368
369 However, there is currently no build support for using Windows native
370 tools with Ubuntu under Windows. This tool combination is made to work
371 with Cygwin through the use of the 'cygpath -w' tool that converts paths
372 from say '/cydrive/c/Program Files' to 'C:\Program Files'. There is,
373 however, no corresponding tool to convert '/mnt/c/Program Files' in the
374 Ubuntu environment.
375
376 Graphics Support
377 ----------------
378 The Ubuntu version support by Microsoft is a command-line only version.
379 There is no support for Linux graphics utilities.
380
381 This limitation is not a limitation of Ubuntu, however, only in what
382 Microsoft is willing to support. If you install a X-Server, then you
383 can also use basic graphics utilities. See for example:
384
385 http://www.howtogeek.com/261575/how-to-run-graphical-linux-desktop-applications-from-windows-10s-bash-shell/
386
387 Many Linux graphics programs would, however, also require a graphics
388 framework like GTK or Qt. So this might be a trip down the rabbit hole.
389
390INSTALLATION
391^^^^^^^^^^^^
392
393 There are two ways to get NuttX: You may download released, stable
394 tarballs from either the Bitbucket or Sourceforge download locations.
395 Or you may get NuttX by cloning the Bitbucket GIT repositories. Let's
396 consider the released tarballs first:
397
398Download and Unpack
399-------------------
400
401 Download and unpack the NuttX tarball. If you are reading this, then
402 you have probably already done that. After unpacking, you will end
403 up with a directory called nuttx-version (where version is the NuttX
404 version number). You might want to rename that directory nuttx to
405 match the various instructions in the documentation and some scripts
406 in the source tree.
407
408 Download locations:
409
410 https://bitbucket.org/nuttx/nuttx/downloads
411 https://sourceforge.net/projects/nuttx/files/nuttx/
412
413Semi-Optional apps/ Package
414---------------------------
415
416 All NuttX libraries and example code used to be in included within
417 the NuttX source tree. As of NuttX-6.0, this application code was
418 moved into a separate tarball, the apps tarball. If you are just
419 beginning with NuttX, then you will want to download the versioned
420 apps tarball along with the NuttX tarball. If you already have your
421 own product application directory, then you may not need the apps
422 tarball.
423
424 It is called "Semi-optional" because if you don't have some apps/
425 directory, NuttX will *fail* to build! You do not necessarily need
426 to use the NuttX apps tarball but may, instead, provide your own
427 custom application directory. Such a custom directory would need
428 to include a valid Makefile to support the build and a valid Kconfig
429 file to support the configuration. More about these files later.
430
431 Download then unpack the apps tarball in the same directory where you
432 unpacked the NuttX tarball. After you unpack the apps tarball, you
433 will have a new directory called apps-version (where the version
434 should exactly match the version of the NuttX tarball). Again, you
435 might want to rename the directory to simply apps/ to match what
436 you read in the documentation
437
438 After unpacking (and renaming) the apps tarball, you will have two
439 directories side by side like this:
440
441 |
442 +----+----+
443 | |
444 nuttx/ apps/
445
446 This is important because the NuttX build will expect to find the
447 apps directory in that (default) location. That default location
448 can be changed by modifying your NuttX configuration file, but that
449 is another story.
450
451Installation Directories with Spaces in the Path
452------------------------------------------------
453
454 The nuttx build directory should reside in a path that contains no
455 spaces in any higher level directory name. For example, under
456 Cygwin, your home directory might be formed from your first and last
457 names like: "/home/First Last". That will cause strange errors when
458 the make system tries to build.
459
460 [Actually, that problem is probably not too difficult to fix. Some
461 Makefiles probably just need some paths within double quotes]
462
463 I work around spaces in the home directory name, by creating a
464 new directory that does not contain any spaces, such as /home/nuttx.
465 Then I install NuttX in /home/nuttx and always build from
466 /home/nuttx/nuttx-code.
467
468Downloading from Repositories
469-----------------------------
470
471 Cloning the Repository
472
473 BEFORE cloning repositories on any Windows platform do the following GIT
474 command:
475
476 git config --global core.autocrlf false
477
478 That will avoid conversions of linefeeds (newlines, \n) to carriage
479 return plus linefeed sequences (\r\n)
480
481 The current NuttX du jour is available in from a GIT repository. Here are
482 instructions for cloning the core NuttX RTOS (corresponding to the nuttx
483 tarball discussed above)::
484
485 git clone https://bitbucket.org/nuttx/nuttx.git nuttx
486
487 And the semi-optional apps/ application directory and be cloned like:
488
489 git clone https://bitbucket.org/nuttx/apps.git apps
490
491 That will give you the same directory structure like this:
492
493 |
494 +----+----+
495 | |
496 nuttx/ apps/
497
498 Configuring the Clones
499
500 The following steps need to be performed for each of the repositories.
501 After changing to the clone directory:
502
503 Set your identity:
504
505 git config --global user.name "My Name"
506 git config --global user.email my.name@example.com
507
508 Colorized diffs are much easier to read:
509
510 git config --global color.branch auto
511 git config --global color.diff auto
512 git config --global color.interactive auto
513 git config --global color.status auto
514
515 Checkout other settings
516
517 git config --list
518
519 Cloning NuttX Inside Cygwin
520
521 If you are cloning the NuttX repository, it is recommended to avoid
522 automatic end of lines conversions by git. These conversions may break
523 some scripts like configure.sh. Before cloning, do the following:
524
525 git config --global core.autocrlf false
526
527Related Repositories
528--------------------
529
530 These are standalone repositories:
531
532 * https://bitbucket.org/nuttx/apps
533
534 This directory holds an optional package of applications and libraries
535 can be used with the NuttX RTOS. There is a README.txt file there that
536 will provide more information about that package.
537
538 * https://bitbucket.org/nuttx/nxwidgets
539
540 This is the NuttX C++ graphics support. This includes NxWM, the tiny
541 NuttX Window Manager.
542
543 * https://bitbucket.org/nuttx/uclibc
544
545 This repository contains a version of the uClibc++ C++ library. This code
546 originates from http://cxx.uclibc.org/ and has been adapted for NuttX by the
547 RGMP team (http://rgmp.sourceforge.net/wiki/index.php/Main_Page).
548
549 * https://bitbucket.org/nuttx/buildroot
550
551 A environment that you can to use to build a custom, NuttX GNU toolchain.
552
553 * https://bitbucket.org/nuttx/tools
554
555 There are snapshots of some tools here that you will need to work with
556 NuttX: kconfig-frontends, genromfs, and others.
557
558 * https://bitbucket.org/nuttx/pascal
559
560 Yes, this really is a Pascal compiler. The Pascal p-code run-time and
561 pcode debugger can be built as a part of NuttX.
562
563Notes about Header Files
564------------------------
565
566 Other C-Library Header Files.
567
568 When a GCC toolchain is built, it must be built against a C library.
569 The compiler together with the contents of the C library completes the
570 C language definition and provides the complete C development
571 environment. NuttX provides its own, built-in C library. So the
572 complete, consistent C language definition for use with NuttX comes from
573 the combination of the compiler and the header files provided by the
574 NuttX C library.
575
576 When a GCC toolchain is built, it incorporates the C library header
577 files into the compiler internal directories and, in this way, the C
578 library really becomes a part of the toolchain. If you use the NuttX
579 buildroot toolchain as described below under "NuttX Buildroot
580 Toolchain", your GCC toolchain will build against the NuttX C library
581 and will incorporate the NuttX C library header files as part of the
582 toolchain.
583
584 If you use some other, third-party tool chain, this will not be the
585 case, however. Those toolchains were probably built against some
586 other, incompatible C library distribution (such as newlib). Those
587 tools will have incorporated the incompatible C library header files
588 as part of the toolchain. These incompatible header files must *not*
589 be used with NuttX because they will conflict with definitions in the
590 NuttX built-in C-Library. For such toolchains that include header
591 files from a foreign C-Library, NuttX must be compiled without using
592 the standard header files that are distributed with your toolchain.
593 This prevents including conflicting, incompatible header files such
594 as stdio.h.
595
596 The math.h and stdarg.h are probably the two most trouble some header
597 files to deal with. These troublesome header files are discussed in
598 more detail below.
599
600 Header Files Provided by Your Toolchain.
601
602 Certain header files, such as setjmp.h, stdarg.h, and math.h, may still
603 be needed from your toolchain and your compiler may not, however, be able
604 to find these if you compile NuttX without using standard header files
605 (i.e., with -nostdinc). If that is the case, one solution is to copy
606 those header file from your toolchain into the NuttX include directory.
607
608 Duplicated Header Files.
609
610 There are also a few header files that can be found in the nuttx/include
611 directory which are duplicated by the header files from your toolchain.
612 stdint.h and stdbool.h are examples. If you prefer to use the stdint.h
613 and stdbool.h header files from your toolchain, those could be copied
614 into the nuttx/include/ directory. Using most other header files from
615 your toolchain would probably cause errors.
616
617 math.h
618
619 Even though you should not use a foreign C-Library, you may still need
620 to use other, external libraries with NuttX. In particular, you may
621 need to use the math library, libm.a. NuttX supports a generic, built-in
622 math library that can be enabled using CONFIG_LIBM=y. However, you may
623 still want to use a higher performance external math library that has
624 been tuned for your CPU. Sometimes such tuned math libraries are
625 bundled with your toolchain.
626
627 The math library header file, math.h, is a then special case. If you do
628 nothing, the standard math.h header file that is provided with your
629 toolchain will be used.
630
631 If you have a custom, architecture specific math.h header file, then
632 that header file should be placed at arch/<cpu>/include/math.h. There
633 is a stub math.h header file located at include/nuttx/lib/math.h. This stub
634 header file can be used to "redirect" the inclusion to an architecture-
635 specific math.h header file. If you add an architecture specific math.h
636 header file then you should also define CONFIG_ARCH_MATH_H=y in your
637 NuttX Configuration file. If CONFIG_ARCH_MATH_H is selected, then the
638 top-level Makefile will copy the stub math.h header file from
639 include/nuttx/lib/math.h to include/math.h where it will become the system
640 math.h header file. The stub math.h header file does nothing other
641 than to include that architecture-specific math.h header file as the
642 system math.h header file.
643
644 float.h
645
646 If you enable the generic, built-in math library, then that math library
647 will expect your toolchain to provide the standard float.h header file.
648 The float.h header file defines the properties of your floating point
649 implementation. It would always be best to use your toolchain's float.h
650 header file but if none is available, a default float.h header file will
651 be provided if this option is selected. However, there is no assurance
652 that the settings in this float.h are actually correct for your platform!
653
654 stdarg.h
655
656 In most cases, the correct version of stdarg.h is the version provided
657 with your toolchain. However, sometimes there are issues with
658 using your toolchains stdarg.h. For example, it may attempt to draw in
659 header files that do not exist in NuttX or perhaps the header files that
660 it uses are not compatible with the NuttX header files. In those cases,
661 you can use an architecture-specific stdarg.h header file by defining
662 CONFIG_ARCH_STDARG_H=y.
663
664 See the discussion above for the math.h header. This setting works
665 exactly the same for the stdarg.h header file.
666
667CONFIGURING NUTTX
668^^^^^^^^^^^^^^^^^
669
670Instantiating "Canned" Configurations
671-------------------------------------
672
673 configure.sh and configure.bat:
674
675 "Canned" NuttX configuration files are retained in:
676
677 boards/<arch-name>/<chip-name>/<board-name>/configs/<config-dir>
678
679 Where <board-name> is the name of your development board and <config-dir>
680 is the name of the sub-directory containing a specific configuration for
681 that board. <arch-name> and <chip-name> refer to characteristics of the
682 MCU used on the board: <arch-name> is the CPU architecture implemented
683 by the MCU; <chip-name> identifies the MCU chip family. Only a few
684 steps are required to instantiate a NuttX configuration, but to make the
685 configuration even easier there are scripts available in the tools/
686 sub-directory combines those simple steps into one command.
687
688 There is one tool for use with any Bash-like shell that does configuration
689 steps. It is used as follows:
690
691 tools/configure.sh <board-name>:<config-dir>
692
693 There is an alternative Windows batch file that can be used in the windows
694 native environment like:
695
696 tools\configure.bat <board-name>:<config-dir>
697
698 And, to make sure that other platforms are supported, there is also a
699 C program at tools/configure.c that can be compiled to establish the
700 board configuration.
701
702 See tools/README.txt for more information about these scripts.
703
704 General information about configuring NuttX can be found in:
705
706 {TOPDIR}/boards/README.txt
707 {TOPDIR}/boards/<arch-name>/<chip-name>/<board-name>/README.txt
708
709 The Hidden Configuration Scripts:
710
711 As mentioned above, there are only a few simple steps to instantiating a
712 NuttX configuration. Those steps are hidden by the configuration scripts
713 but are summarized below:
714
715 1. Copy Files
716
717 Configuring NuttX requires only copying two files from the
718 <config-dir> to the directory where you installed NuttX (TOPDIR):
719
720 Copy boards/<arch-name>/<chip-name>/<board-name>/configs/<config-dir>/Make.def
721 to {TOPDIR}/Make.defs
722
723 OR
724
725 Copy boards/<arch-name>/<chip-name>/<board-name>/scripts/Make.def
726 to {TOPDIR}/Make.defs
727
728 Make.defs describes the rules needed by your tool chain to compile
729 and link code. You may need to modify this file to match the
730 specific needs of your toolchain. NOTE that a configuration may
731 have its own unique Make.defs file in its configuration directory or
732 it may use a common Make.defs file for the board in the scripts/
733 directory. The first takes precedence.
734
735 Copy boards/<arch-name>/<chip-name>/<board-name>/configs/<config-dir>/defconfig
736 to{TOPDIR}/.config
737
738 The defconfig file holds the actual build configuration. This
739 file is included by all other make files to determine what is
740 included in the build and what is not. This file is also used
741 to generate a C configuration header at include/nuttx/config.h.
742
743 Copy other, environment-specific files to{TOPDIR}
744
745 This might include files like .gdbinit or IDE configuration files
746 like .project or .cproject.
747
748 2. Refresh the Configuration
749
750 New configuration setting may be added or removed. Existing settings
751 may also change there values or options. This must be handled by
752 refreshing the configuration as described below.
753
754 NOTE: NuttX uses only compressed defconfig files. For the NuttX
755 defconfig files, this refreshing step is *NOT* optional; it is also
756 necessary to uncompress and regenerate the full making file. This is
757 discussed further below.
758
759Refreshing Configurations
760-------------------------
761
762 Configurations can get out of date. As new configuration settings are
763 added or removed or as dependencies between configuration settings
764 change, the contents of a default configuration can become out of synch
765 with the build systems. Hence, it is a good practice to "refresh" each
766 configuration after configuring and before making. To refresh the
767 configuration, use the NuttX Configuration Tool like this:
768
769 make oldconfig
770
771 AFTER you have instantiated the NuttX configuration as described above.
772 The configuration step copied the .config file into place in the top-level
773 NuttX directory; 'make oldconfig' step will then operate on that .config
774 file to bring it up-to-date.
775
776 If your configuration is out of date, you will be prompted by 'make oldconfig'
777 to resolve the issues detected by the configuration tool, that is, to
778 provide values for the new configuration options in the build system. Doing
779 this can save you a lot of problems down the road due to obsolete settings in
780 the default board configuration file. The NuttX configuration tool is
781 discussed in more detail in the following paragraph.
782
783 Confused about what the correct value for a new configuration item should
784 be? Enter ? in response to the 'make oldconfig' prompt and it will show
785 you the help text that goes with the option.
786
787 If you don't want to make any decisions are willing to just accept the
788 recommended default value for each new configuration item, an even easier
789 way is:
790
791 make olddefconfig
792
793 The olddefconfig target will simply bring your configuration up to date with
794 the current Kconfig files, setting any new options to the default value.
795 No questions asked.
796
797NuttX Configuration Tool
798------------------------
799
800 An automated tool has been incorporated to support re-configuration
801 of NuttX. This tool is based on the kconfig-frontends application available
802 at https://bitbucket.org/nuttx/tools/src/master/kconfig-frontends/. (This
803 is a snapshot of http://ymorin.is-a-geek.org/projects/kconfig-frontends.)
804 This application provides a tool called 'kconfig-mconf' that is used by the
805 NuttX top-level Makefile. The following make target is provided:
806
807 make menuconfig
808
809 This make target will bring up NuttX configuration menus.
810
811 WARNING: Never do 'make menuconfig' on a configuration that has
812 not been converted to use the kconfig-frontends tools! This will
813 damage your configuration (see
814 http://www.nuttx.org/doku.php?id=wiki:howtos:convertconfig).
815
816 How do we tell a new configuration from an old one? See "Incompatibilities
817 with Older Configurations" below.
818
819 The 'menuconfig' make target depends on two things:
820
821 1. The Kconfig configuration data files that appear in almost all
822 NuttX directories. These data files are the part that is still
823 under development (patches are welcome!). The Kconfig files
824 contain configuration information for the configuration settings
825 relevant to the directory in which the Kconfig file resides.
826
827 NOTE: For a description of the syntax of this configuration file,
828 see kconfig-language.txt in the tools repository at
829 https://bitbucket.org/nuttx/tools
830
831 2. The 'kconfig-mconf' tool. 'kconfig-mconf' is part of the
832 kconfig-frontends package. You can download that package from the
833 snapshot in the tools repository at https://bitbucket.org/nuttx/tools.
834
835 Building kconfig-frontends under Linux may be as simple as
836 'configure; make; make install' but there may be some build
837 complexities, especially if you are building under Cygwin. See
838 the more detailed build instructions in the top-level README.txt
839 file of the tools repository at https://bitbucket.org/nuttx/tools.
840
841 The 'make install' step will, by default, install the 'kconfig-mconf'
842 tool at /usr/local/bin/mconf. Where ever you choose to
843 install 'kconfig-mconf', make certain that your PATH variable includes
844 a path to that installation directory.
845
846 The kconfig-frontends tools will not build in a native Windows
847 environment directly "out-of-the-box". For the Windows native
848 case, you should use the modified version of kconfig-frontends
849 that can be found at
850 http://uvc.de/posts/linux-kernel-configuration-tool-mconf-under-windows.html
851
852 The basic configuration order is "bottom-up":
853
854 - Select the build environment,
855 - Select the processor,
856 - Select the board,
857 - Select the supported peripherals
858 - Configure the device drivers,
859 - Configure the application options on top of this.
860
861 This is pretty straight forward for creating new configurations
862 but may be less intuitive for modifying existing configurations.
863
864 Another ncurses-based tool that is an option to kconfig-mconf is
865 kconfig-nconf. The differences are primary in in the aesthetics of the
866 UI. If you have kconfig-nconf built, then you can invoke that front end
867 with:
868
869 make nconfig
870
871 If you have an environment that supports the Qt or GTK graphical systems
872 (probably KDE or gnome, respectively, or Cygwin under Windows with Qt or
873 GTK installed), then you can also build the graphical kconfig-frontends,
874 kconfig-qconf and kconfig-gconf. In these case, you can start the
875 graphical configurator with either:
876
877 make qconfig
878
879 or
880
881 make gconfig
882
883 Some keyboard shortcuts supported by kconfig-mconf, the tool that runs
884 when you do 'make menuconfig':
885
886 - '?' will bring up the mconfig help display.
887
888 - '/' can be used find configuration selections.
889
890 - 'Z' can be used to reveal hidden configuration options
891
892 These last two shortcuts are described further in the following
893 paragraphs.
894
895Finding Selections in the Configuration Menus
896---------------------------------------------
897
898 The NuttX configuration options have gotten complex and it can be very
899 difficult to find options in the menu trees if you are not sure where
900 to look. The "basic configuration order" describe above can help to
901 narrow things down.
902
903 But if you know exactly what configuration setting you want to select,
904 say CONFIG_XYZ, but not where to find it, then the 'make menuconfig'
905 version of the tool offers some help: By pressing the '/' key, the
906 tool will bring up a menu that will allow you to search for a
907 configuration item. Just enter the string CONFIG_XYZ and press 'ENTER'.
908 It will show you not only where to find the configuration item, but
909 also all of the dependencies related to the configuration item.
910
911Reveal Hidden Configuration Options
912-----------------------------------
913
914 If you type 'Z', then kconfig-mconf will change what is displayed.
915 Normally, only enabled features that have all of their dependencies met
916 are displayed. That is, of course, not very useful if you would like to
917 discover new options or if you are looking for an option and do not
918 realize that the dependencies have not yet been selected and, hence, it
919 is not displayed.
920
921 But if you enter 'Z', then every option will be shown, whether or not its
922 dependencies have been met. You can then see everything that could be
923 selected with the right dependency selections. These additional options
924 will be shown the '-' for the selection and for the value (since it
925 cannot be selected and has no value). About all you do is to select
926 the <Help> option to see what the dependencies are.
927
928Make Sure that You are on the Right Platform
929--------------------------------------------
930
931 Saved configurations may run on Linux, Cygwin (32- or 64-bit), or other
932 platforms. The platform characteristics can be changed use 'make
933 menuconfig'. Sometimes this can be confusing due to the differences
934 between the platforms. Enter sethost.sh
935
936 sethost.sh is a simple script that changes a configuration to your
937 host platform. This can greatly simplify life if you use many different
938 configurations. For example, if you are running on Linux and you
939 configure like this:
940
941 tools/configure.sh board:configuration
942
943 The you can use the following command to both (1) make sure that the
944 configuration is up to date, AND (2) the configuration is set up
945 correctly for Linux:
946
947 tools/sethost.sh -l
948
949 Or, if you are on a Windows/Cygwin 64-bit platform:
950
951 tools/sethost.sh -c
952
953 Or, for MSYS/MSYS2:
954
955 tools/sethost.sh -g
956
957 Other options are available from the help option built into the
958 script. You can see all options with:
959
960 tools/sethost.sh -h
961
962 Recently, the options to the configure.sh (and configure.bat) scripts have
963 been extended so that you both setup the configuration, select for the host
964 platform that you use, and uncompress and refresh the defconfig file all in
965 one command like:
966
967 tools/configure.sh -l board:configuration
968
969 For a Linux host or for a Windows/Cygwin host:
970
971 tools/configure.sh -h board:configuration
972
973 Other options are available from the help option built into the
974 script. You can see all options with:
975
976 tools/configure.sh -h
977
978Comparing Two Configurations
979----------------------------
980
981 If you try to compare two configurations using 'diff', you will probably
982 not be happy with the result. There are superfluous things added to
983 the configuration files that make comparisons with the human eye
984 difficult.
985
986 There is a tool at nuttx/tools/cmpconfig.c that can be built to simplify
987 these comparisons. The output from this difference tool will show only
988 the meaningful differences between two configuration files. This tool is
989 built as follows:
990
991 cd nuttx/tools
992 make -f Makefile.host
993
994 This will create a program called 'cmpconfig' or 'comconfig.exe' on Windows.
995
996 Why would you want to compare two configuration files? Here are a few
997 of the reasons why I do this
998
999 1. When I create a new configuration I usually base it on an older
1000 configuration and I want to know, "What are the options that I need to
1001 change to add the new feature to the older configurations?" For example,
1002 suppose that I have a boardA/nsh configuration and I want to create a
1003 boardA/nxwm configuration. Suppose I already have boardB/nsh and
1004 boardB/nxwm configurations. Then by comparing the boardB/nsh with the
1005 boardB/nxwm I can see the modifications that I would need to make to my
1006 boardA/nsh to create a new boardA/nxwm.
1007
1008 2. But the most common reason that I use the 'cmpconfig' program is to
1009 check the results of "refreshing" a configuration with 'make oldconfig'
1010 (see the paragraph "Refreshing Configurations" above). The 'make
1011 oldconfig' command will make changes to my configuration and using
1012 'cmpconfig', I can see precisely what those changes were and if any
1013 should be of concern to me.
1014
1015 3. The 'cmpconfig' tool can also be useful when converting older, legacy
1016 manual configurations to the current configurations based on the
1017 kconfig-frontends tools. See the following paragraph.
1018
1019Making defconfig Files
1020----------------------
1021
1022 .config Files as defconfig Files:
1023
1024 The minimum defconfig file is simply the generated .config file with
1025 CONFIG_APPS_DIR setting removed or commented out. That setting provides
1026 the name and location of the apps/ directory relative to the nuttx build
1027 directory. The default is ../apps/, however, the apps directory may be
1028 any other location and may have a different name. For example, the name
1029 of versioned NuttX releases are always in the form apps-xx.yy where xx.yy
1030 is the version number.
1031
1032 Finding the apps/ Directory Path:
1033
1034 When the default configuration is installed using one of the scripts or
1035 programs in the NuttX tools directory, there will be an option to provide
1036 the path to the apps/ directory. If not provided, then the configure tool
1037 will look around and try to make a reasonable decision about where the
1038 apps/ directory is located.
1039
1040 Compressed defconfig Files:
1041
1042 The Makefile also supports an option to generate very small defconfig
1043 files. The .config files are quite large and complex. But most of the
1044 settings in the .config file simply have the default settings from the
1045 Kconfig files. These .config files can be converted into small defconfig
1046 file:
1047
1048 make savedefconfig
1049
1050 That make target will generate a defconfig file in the top-level
1051 directory. The size reduction is really quite remarkable:
1052
1053 wc -l .config defconfig
1054 1085 .config
1055 82 defconfig
1056 1167 total
1057
1058 In order to be usable, the .config file installed from the compressed
1059 defconfig file must be reconstituted using:
1060
1061 make olddefconfig
1062
1063 NOTE 1: Only compressed defconfig files are retained in the NuttX repository.
1064 All patches and PRs that attempt to add or modify a defconfig file MUST
1065 use the compressed defconfig format as created by 'make savdefconfig.'
1066
1067 NOTE 2: When 'make savedefconfig' runs it will try several things some of
1068 which are expected to fail. In these cases you will see an error message
1069 from make followed by "(ignored)." You should also ignore these messages
1070
1071 CAUTION: This size reduction was accomplished by removing all setting
1072 from the .config file that were at the default value. 'make olddefconfig'
1073 can regenerate the original .config file by simply restoring those default
1074 settings. The underlying assumption here is, of course, that the default
1075 settings do not change. If the default settings change, and they often
1076 do, then the original .config may not be reproducible.
1077
1078 So if your project requires 100% reproducibility over a long period of
1079 time, you make want to save the complete .config files vs. the standard,
1080 compressed defconfig file.
1081
1082 Configuring with "Compressed" defconfig Files:
1083
1084 As described above defconfig, all NuttX defconfig files are compressed
1085 using 'make savedeconfig'. These compressed defconfig files are
1086 generally not fully usable as they are and may not build the target
1087 binaries that you want because the compression process removed all of
1088 the default settings from the defconfig file. To restore the default
1089 settings, you should run the following after configuring:
1090
1091 make olddefconfig
1092
1093 That will restore the the missing defaulted values.
1094
1095 Using this command after configuring is generally a good practice anyway:
1096 Even if the defconfig files are not "compressed" in this fashion, the
1097 defconfig file may be old and the only way to assure that the installed
1098 .config is is up to date is via 'make oldconfig' or 'make olddefconfig'.
1099 See the paragraph above entitled ""Refreshing Configurations" for
1100 additional information.
1101
1102Incompatibilities with Older Configurations
1103-------------------------------------------
1104
1105 ***** WARNING *****
1106
1107 The current NuttX build system supports *only* the new compressed,
1108 defconfig configuration files generated using the kconfig-frontends tools
1109 as described in the preceding section. Support for the older, legacy,
1110 manual configurations was eliminated in NuttX 7.0; support for
1111 uncompressed .config-files-as-defconfig files was eliminated after
1112 NuttX-7.21. All configurations must now be done using the
1113 kconfig-frontends tool. The older manual configurations and the new
1114 kconfig-frontends configurations are not compatible. Old legacy
1115 configurations can *not* be used with the kconfig-frontends tool and,
1116 hence, cannot be used with releases of NuttX 7.0 and beyond:
1117
1118 If you run 'make menuconfig' with a legacy configuration the resulting
1119 configuration will probably not be functional.
1120
1121 Q: How can I tell if a configuration is a new kconfig-frontends
1122 configuration or an older, manual configuration?
1123
1124 A: Only old, manual configurations will have an appconfig file
1125
1126
1127 Q: How can I convert a older, manual configuration into a new,
1128 kconfig-frontends toolchain.
1129
1130 A: Refer to http://www.nuttx.org/doku.php?id=wiki:howtos:convertconfig
1131
1132 ***** WARNING *****
1133
1134 As described above, whenever you use a configuration, you really should
1135 always refresh the configuration with the following command *before* you
1136 make NuttX:
1137
1138 make oldconfig
1139
1140 OR
1141
1142 make olddefconfig
1143
1144 This will make sure that the configuration is up-to-date in the event that
1145 it has lapsed behind the current NuttX development (see the paragraph
1146 "Refreshing Configurations" above). But this only works with *new*
1147 configuration files created with the kconfig-frontends tools.
1148
1149 Further, this step is *NOT* optional with the new, compressed defconfig
1150 files. It is a necessary step that will also uncompress the defconfig
1151 file, regenerating the .config and making it usable for NuttX builds.
1152
1153 Never do 'make oldconfig' (OR 'make menuconfig') on a configuration that
1154 has not been converted to use the kconfig-frontends tools! This will
1155 damage your configuration (see
1156 http://www.nuttx.org/doku.php?id=wiki:howtos:convertconfig).
1157
1158NuttX Configuration Tool under DOS
1159----------------------------------
1160
1161 Recent versions of NuttX support building NuttX from a native Windows
1162 console window (see "Native Windows Build" below). But kconfig-frontends
1163 is a Linux tool. At one time this was a problem for Windows users, but
1164 now there is a specially modified version of the kconfig-frontends tools
1165 that can be used:
1166 http://uvc.de/posts/linux-kernel-configuration-tool-mconf-under-windows.html
1167
1168 The configuration steps most recent versions of NuttX require the
1169 kconfig-tweak tool that is not not available in the the above. However,
1170 there has been an update to this Kconfig Windows tools that does include
1171 kconfig-tweak: http://reclonelabs.com/more-kconfig-awesomeness-for-windows/
1172
1173 Source code is available here: https://github.com/reclone/kconfig-frontends-win32
1174 and https://github.com/reclone/kconfig-frontends-win32/releases
1175
1176 It is also possible to use the version of kconfig-frontends built
1177 under Cygwin outside of the Cygwin "sandbox" in a native Windows
1178 environment:
1179
1180 1. You can run the configuration tool using Cygwin. However, the
1181 Cygwin Makefile.win will complain so to do this will, you have
1182 to manually edit the .config file:
1183
1184 a. Delete the line: CONFIG_WINDOWS_NATIVE=y
1185 b. Change the apps/ directory path, CONFIG_APPS_DIR to use Unix
1186 style delimiters. For example, change "..\apps" to "../apps"
1187
1188 And of course, after you use the configuration tool you need to
1189 restore CONFIG_WINDOWS_NATIVE=y and the correct CONFIG_APPS_DIR.
1190
1191 2) You can, with some effort, run the Cygwin kconfig-mconf tool
1192 directly in the Windows console window. In this case, you do not
1193 have to modify the .config file, but there are other complexities:
1194
1195 a. You need to temporarily set the Cygwin directories in the PATH
1196 variable then run kconfig-mconf manually like:
1197
1198 kconfig-mconf Kconfig
1199
1200 There is a Windows batch file at tools/kconfig.bat that automates
1201 these steps:
1202
1203 tools/kconfig menuconfig
1204
1205 b. There is an issue with accessing DOS environment variables from
1206 the Cygwin kconfig-mconf running in the Windows console. The
1207 following change to the top-level Kconfig file seems to work
1208 around these problems:
1209
1210 config APPSDIR
1211 string
1212 - option env="APPSDIR"
1213 + default "../apps"
1214
1215TOOLCHAINS
1216^^^^^^^^^^
1217
1218Cross-Development Toolchains
1219----------------------------
1220
1221 In order to build NuttX for your board, you will have to obtain a cross-
1222 compiler to generate code for your target CPU. For each board,
1223 configuration, there is a README.txt file (at
1224 boards/<arch-name>/<chip-name>/<board-name>/README.txt).
1225 That README file contains suggestions and information about appropriate
1226 tools and development environments for use with your board.
1227
1228 In any case, the PATH environment variable will need to be updated to
1229 include the location where the build can find the toolchain binaries.
1230
1231NuttX Buildroot Toolchain
1232-------------------------
1233
1234 For many configurations, a DIY set of tools is available for NuttX. These
1235 tools can be downloaded from the NuttX Bitbucket.org file repository. After
1236 unpacking the buildroot tarball, you can find instructions for building
1237 the tools in the buildroot/boards/README.txt file.
1238
1239 Check the README.txt file in the configuration directory for your board
1240 to see if you can use the buildroot toolchain with your board (this
1241 README.txt file is located in
1242 boards/<arch-name>/<chip-name>/<board-name>/README.txt).
1243
1244 This toolchain is available for both the Linux and Cygwin development
1245 environments.
1246
1247 Advantages: (1) NuttX header files are built into the tool chain,
1248 and (2) related support tools like NXFLAT tools, the ROMFS
1249 genromfs tools, and the kconfig-frontends tools can be built into your
1250 toolchain.
1251
1252 Disadvantages: This tool chain is not was well supported as some other
1253 toolchains. GNU tools are not my priority and so the buildroot tools
1254 often get behind. For example, until recently there was no EABI support
1255 in the NuttX buildroot toolchain for ARM.
1256
1257 NOTE: For Cortex-M3/4, there are OABI and EABI versions of the buildroot
1258 toolchains. If you are using the older OABI toolchain the prefix for
1259 the tools will be arm-nuttx-elf-; for the EABI toolchain the prefix will
1260 be arm-nuttx-eabi-. If you are using the older OABI toolchain with
1261 an ARM Cortex-M3/4, you will need to set CONFIG_ARMV7M_OABI_TOOLCHAIN
1262 in the .config file in order to pick the right tool prefix.
1263
1264 If the make system ever picks the wrong prefix for your toolchain, you
1265 can always specify the prefix on the command to override the default
1266 like:
1267
1268 make CROSSDEV=arm-nuttx-elf
1269
1270SHELLS
1271^^^^^^
1272
1273 The NuttX build relies on some shell scripts. Some are inline in the
1274 Makefiles and many are executable scripts in the tools/. directory. The
1275 scripts were all developed using bash and many contain bash shell
1276 dependencies.
1277
1278 Most of the scripts begin with #!/bin/bash to specifically select the
1279 bash shell. Some still have #!/bin/sh but I haven't heard any complaints
1280 so these must not have bash dependencies.
1281
1282 There are two shell issues that I have heard of:
1283
1284 1. Linux where /bin/sh refers to an incompatible shell (like ksh or csh).
1285
1286 In this case, bash is probably available and the #!/bin/bash at the
1287 beginning of the file should do the job. If any scripts with #!/bin/sh
1288 fail, try changing that to #!/bin/bash and let me know about the change.
1289
1290 2. FreeBSD with the Bourne Shell and no bash shell.
1291
1292 The other, reverse case has also been reported on FreeBSD setups that
1293 have the Bourne shell, but not bash. In this base, #!/bin/bash fails
1294 but #!/bin/sh works okay. My recommendation in this case is to create
1295 a symbolic link at /bin/bash that refers to the Bourne shell.
1296
1297 There may still be issues, however, with certain the bash-centric scripts
1298 that will require modifications.
1299
1300BUILDING NUTTX
1301^^^^^^^^^^^^^^
1302
1303Building
1304--------
1305
1306 NuttX builds in-place in the source tree. You do not need to create
1307 any special build directories. Assuming that your Make.defs is setup
1308 properly for your tool chain and that PATH environment variable contains
1309 the path to where your cross-development tools are installed, the
1310 following steps are all that are required to build NuttX:
1311
1312 cd{TOPDIR}
1313 make
1314
1315 At least one configuration (eagle100) requires additional command line
1316 arguments on the make command. Read
1317 {TOPDIR}/boards/<arch-name>/<chip-name>/<board-name>/README.txt to see
1318 if that applies to your target.
1319
1320Re-building
1321-----------
1322
1323 Re-building is normally simple -- just type make again.
1324
1325 But there are some things that can "get you" when you use the Cygwin
1326 development environment with Windows native tools. The native Windows
1327 tools do not understand Cygwin's symbolic links, so the NuttX make system
1328 does something weird: It copies the configuration directories instead of
1329 linking to them (it could, perhaps, use the NTFS 'mklink' command, but it
1330 doesn't).
1331
1332 A consequence of this is that you can easily get confused when you edit
1333 a file in one of the linked (i.e., copied) directories, re-build NuttX,
1334 and then not see your changes when you run the program. That is because
1335 build is still using the version of the file in the copied directory, not
1336 your modified file!
1337
1338 Older versions of NuttX did not support dependencies in this
1339 configuration. So a simple work around this annoying behavior in this
1340 case was the following when you re-build:
1341
1342 make clean_context all
1343
1344 This 'make' command will remove of the copied directories, re-copy them,
1345 then make NuttX.
1346
1347 However, more recent versions of NuttX do support dependencies for the
1348 Cygwin build. As a result, the above command will cause everything to be
1349 rebuilt (because it removes and will cause recreating the
1350 include/nuttx/config.h header file). A much less gracefully but still
1351 effective command in this case is the following for the ARM configuration:
1352
1353 rm -rf arch/arm/src/chip arch/arm/src/board
1354
1355 This "kludge" simple removes the copied directories. These directories
1356 will be re-created when you do a normal 'make' and your edits will then be
1357 effective.
1358
1359Build Targets and Options
1360-------------------------
1361
1362 Build Targets:
1363 Below is a summary of the build targets available in the top-level
1364 NuttX Makefile:
1365
1366 all
1367
1368 The default target builds the NuttX executable in the selected output
1369 formats.
1370
1371 clean
1372
1373 Removes derived object files, archives, executables, and temporary
1374 files, but retains the configuration and context files and directories.
1375
1376 distclean
1377
1378 Does 'clean' then also removes all configuration and context files.
1379 This essentially restores the directory structure to its original,
1380 unconfigured stated.
1381
1382 Application housekeeping targets. The APPDIR variable refers to the user
1383 application directory. A sample apps/ directory is included with NuttX,
1384 however, this is not treated as part of NuttX and may be replaced with a
1385 different application directory. For the most part, the application
1386 directory is treated like any other build directory in the Makefile script.
1387 However, as a convenience, the following targets are included to support
1388 housekeeping functions in the user application directory from the NuttX
1389 build directory.
1390
1391 apps_clean
1392
1393 Perform the clean operation only in the user application directory
1394
1395 apps_distclean
1396
1397 Perform the distclean operation only in the user application directory.
1398 The apps/.config file is preserved so that this is not a "full" distclean
1399 but more of a configuration "reset" for the application directory.
1400
1401 export
1402
1403 The export target will package the NuttX libraries and header files into
1404 an exportable package. Caveats: (1) These needs some extension for the KERNEL
1405 build. (2) The logic in tools/mkexport.sh only supports GCC and, for example,
1406 explicitly assumes that the archiver is 'ar'
1407
1408 download
1409
1410 This is a helper target that will rebuild NuttX and download it to the target
1411 system in one step. The operation of this target depends completely upon
1412 implementation of the DOWNLOAD command in the user Make.defs file. It will
1413 generate an error an error if the DOWNLOAD command is not defined.
1414
1415 The following targets are used internally by the make logic but can be invoked
1416 from the command under certain conditions if necessary.
1417
1418 depend
1419
1420 Create build dependencies. (NOTE: There is currently no support for build
1421 dependencies under Cygwin using Windows-native toolchains.)
1422
1423 context
1424
1425 The context target is invoked on each target build to assure that NuttX is
1426 properly configured. The basic configuration steps include creation of the
1427 the config.h and version.h header files in the include/nuttx directory and
1428 the establishment of symbolic links to configured directories.
1429
1430 clean_context
1431
1432 This is part of the distclean target. It removes all of the header files
1433 and symbolic links created by the context target.
1434
1435 Build Options:
1436 Of course, the value any make variable an be overridden from the make command
1437 line. However, there is one particular variable assignment option that may
1438 be useful to you:
1439
1440 V=1
1441
1442 This is the build "verbosity flag." If you specify V=1 on the make command
1443 line, you will see the exact commands used in the build. This can be very
1444 useful when adding new boards or tracking down compile time errors and
1445 warnings (Contributed by Richard Cochran).
1446
1447Native Windows Build
1448--------------------
1449
1450 The beginnings of a Windows native build are in place but still not often
1451 used as of this writing. The build was functional but because of lack of
1452 use may find some issues to be resolved with this build configuration.
1453
1454 The windows native build logic initiated if CONFIG_WINDOWS_NATIVE=y is
1455 defined in the NuttX configuration file:
1456
1457 This build:
1458
1459 - Uses all Windows style paths
1460 - Uses primarily Windows batch commands from cmd.exe, with
1461 - A few extensions from GNUWin32
1462
1463 In this build, you cannot use a Cygwin or MSYS shell. Rather the build must
1464 be performed in a Windows console window. Here is a better terminal than the
1465 standard issue, CMD.exe terminal: ConEmu which can be downloaded from:
1466 https://sourceforge.net/projects/conemu/ or https://conemu.github.io/ .
1467
1468 Build Tools. The build still relies on some Unix-like commands. I use
1469 the GNUWin32 tools that can be downloaded from http://gnuwin32.sourceforge.net/
1470 using the 'Download all' selection. Individual packages can be download
1471 instead if you know what you are doing and want a faster download (No, I
1472 can't tell you which packages you should or should not download).
1473
1474 Host Compiler: I use the MingGW GCC compiler which can be downloaded from
1475 http://www.mingw.org/. If you are using GNUWin32, then it is recommended
1476 the you not install the optional MSYS components as there may be conflicts.
1477
1478 This capability should still be considered a work in progress because:
1479
1480 (1) It has not been verified on all targets and tools, and
1481 (2) it still lacks some of the creature-comforts of the more mature
1482 environments.
1483
1484Installing GNUWin32
1485-------------------
1486
1487 The Windows native build will depend upon a few Unix-like tools that can be
1488 provided either by MSYS or GNUWin32. The GNUWin32 are available from
1489 http://gnuwin32.sourceforge.net/. GNUWin32 provides ports of tools with a
1490 GPL or similar open source license to modern MS-Windows (Microsoft Windows
1491 2000 / XP / 2003 / Vista / 2008 / 7). See
1492 http://gnuwin32.sourceforge.net/packages.html for a list of all of the tools
1493 available in the GNUWin32 package.
1494
1495 The SourceForge project is located here:
1496 http://sourceforge.net/projects/gnuwin32/. The project is still being
1497 actively supported (although some of the Windows ports have gotten very old).
1498
1499 Some commercial toolchains include a subset of the GNUWin32 tools in the
1500 installation. My recommendation is that you download the GNUWin32 tools
1501 directly from the sourceforge.net website so that you will know what you are
1502 using and can reproduce your build environment.
1503
1504 GNUWin32 Installation Steps:
1505
1506 The following steps will download and execute the GNUWin32 installer.
1507
1508 1. Download GetGNUWin32-x.x.x.exe from
1509 http://sourceforge.net/projects/getgnuwin32/files/. This is the
1510 installer. The current version as of this writing is 0.6.3.
1511
1512 2. Run the installer.
1513
1514 3. Accept the license.
1515
1516 4. Select the installation directory. My recommendation is the
1517 directory that contains this README file (<this-directory>).
1518
1519 5. After running GetGNUWin32-0.x.x.exe, you will have a new directory
1520 <this-directory>/GetGNUWin32
1521
1522 Note that the GNUWin32 installer didn't install GNUWin32. Instead, it
1523 installed another, smarter downloader. That downloader is the GNUWin32
1524 package management tool developed by the Open SSL project.
1525
1526 The following steps probably should be performed from inside a DOS shell.
1527
1528 6. Change to the directory created by GetGNUWin32-x.x.x.exe
1529
1530 cd GetGNUWin32
1531
1532 7. Execute the download.bat script. The download.bat script will download
1533 about 446 packages! Enough to have a very complete Linux-like environment
1534 under the DOS shell. This will take awhile. This step only downloads
1535 the packages and the next step will install the packages.
1536
1537 download
1538
1539 8. This step will install the downloaded packages. The argument of the
1540 install.bat script is the installation location. C:\gnuwin32 is the
1541 standard install location:
1542
1543 install C:\gnuwin32
1544
1545 NOTE: This installation step will install *all* GNUWin32 packages... far
1546 more than you will ever need. If disc space is a problem for you, you might
1547 need to perform a manual installation of the individual ZIP files that you
1548 will find in the <this directory>/GetGNUWin32/packages directory.
1549
1550CYGWIN BUILD PROBLEMS
1551^^^^^^^^^^^^^^^^^^^^^
1552
1553Performance
1554-----------
1555
1556 Build performance under Cygwin is really not so bad, certainly not as good
1557 as a Linux build. However, often you will find that the performance is
1558 not just bad but terrible. If you are seeing awful performance.. like two
1559 or three compilations per second.. the culprit is usually your Windows
1560 Anti-Virus protection interfering with the build tool program execution.
1561
1562 I use Cygwin quite often and I use Windows Defender. In order to get good
1563 build performance, I routinely keep the Windows Defender "Virus & Threat
1564 Protections Settings" screen up: I disable "Real-Time Protection" just
1565 before entering 'make' then turn "Real-Time Protection" back on when the
1566 build completes. With this additional nuisance step, I find that build
1567 performance under Cygwin is completely acceptable.
1568
1569Strange Path Problems
1570---------------------
1571
1572 If you see strange behavior when building under Cygwin then you may have
1573 a problem with your PATH variable. For example, if you see failures to
1574 locate files that are clearly present, that may mean that you are using
1575 the wrong version of a tool. For example, you may not be using Cygwin's
1576 'make' program at /usr/bin/make. Try:
1577
1578 which make
1579 /usr/bin/make
1580
1581 When you install some toolchains (such as Yargarto or CodeSourcery tools),
1582 they may modify your PATH variable to include a path to their binaries.
1583 At that location, they may have GNUWin32 versions of the tools. So you
1584 might actually be using a version of make that does not understand Cygwin
1585 paths.
1586
1587 The solution is either:
1588
1589 1. Edit your PATH to remove the path to the GNUWin32 tools, or
1590 2. Put /usr/local/bin, /usr/bin, and /bin at the front of your path:
1591
1592 export PATH=/usr/local/bin:/usr/bin:/bin:$PATH
1593
1594Window Native Toolchain Issues
1595------------------------------
1596
1597 There are many popular Windows native toolchains that may be used with NuttX.
1598 Examples include CodeSourcery (for Windows), devkitARM, and several vendor-
1599 provided toolchains. There are several limitations with using a and Windows
1600 based toolchain in a Cygwin environment. The three biggest are:
1601
1602 1. The Windows toolchain cannot follow Cygwin paths. Path conversions are
1603 performed automatically in the Cygwin makefiles using the 'cygpath' utility
1604 but you might easily find some new path problems. If so, check out 'cygpath -w'
1605
1606 2. Windows toolchains cannot follow Cygwin symbolic links. Many symbolic links
1607 are used in Nuttx (e.g., include/arch). The make system works around these
1608 problems for the Windows tools by copying directories instead of linking them.
1609 But this can also cause some confusion for you: For example, you may edit
1610 a file in a "linked" directory and find that your changes had no effect.
1611 That is because you are building the copy of the file in the "fake" symbolic
1612 directory. If you use a Windows toolchain, you should get in the habit of
1613 making like this:
1614
1615 make clean_context all
1616
1617 An alias in your .bashrc file might make that less painful. The rebuild
1618 is not a long as you might think because there is no dependency checking
1619 if you are using a native Windows toolchain. That bring us to #3:
1620
1621General Pre-built Toolchain Issues
1622----------------------------------
1623
1624 To continue with the list of "Window Native Toolchain Issues" we can add
1625 the following. These, however, are really just issues that you will have
1626 if you use any pre-built toolchain (vs. building the NuttX toolchain from
1627 the NuttX buildroot package):
1628
1629 There may be incompatibilities with header files, libraries, and compiler
1630 built-in functions detailed below. For the most part, these issues
1631 are handled in the existing make logic. But if you are breaking new ground,
1632 then you may encounter these:
1633
1634 4. Header Files. Most pre-built toolchains will build with a foreign C
1635 library (usually newlib, but maybe uClibc or glibc if you are using a
1636 Linux toolchain). This means that the header files from the foreign
1637 C library will be built into the toolchain. So if you "include <stdio.h>",
1638 you will get the stdio.h from the incompatible, foreign C library and
1639 not the nuttx stdio.h (at nuttx/include/stdio.h) that you wanted.
1640
1641 This can cause confusion in the builds and you must always be
1642 sure the -nostdinc is included in the CFLAGS. That will assure that
1643 you take the include files only from
1644
1645 5. Libraries. What was said above header files applies to libraries.
1646 You do not want to include code from the libraries of any foreign
1647 C libraries built into your toolchain. If this happens you will get
1648 perplexing errors about undefined symbols. To avoid these errors,
1649 you will need to add -nostdlib to your CFLAGS flags to assure that
1650 you only take code from the NuttX libraries.
1651
1652 This, however, may causes other issues for libraries in the toolchain
1653 that you do want (like libgcc.a or libm.a). These are special-cased
1654 in most Makefiles, but you could still run into issues of missing
1655 libraries.
1656
1657 6. Built-Ins. Some compilers target a particular operating system.
1658 Many people would, for example, like to use the same toolchain to
1659 develop Linux and NuttX software. Compilers built for other
1660 operating systems may generate incompatible built-in logic and,
1661 for this reason, -fno-builtin should also be included in your
1662 C flags
1663
1664 And finally you may not be able to use NXFLAT.
1665
1666 7. NXFLAT. If you use a pre-built toolchain, you will lose all support
1667 for NXFLAT. NXFLAT is a binary format described in
1668 Documentation/NuttXNxFlat.html. It may be possible to build
1669 standalone versions of the NXFLAT tools; there are a few examples
1670 of this in the buildroot repository at https://bitbucket.org/nuttx/buildroot
1671 However, it is possible that there could be interoperability issues
1672 with your toolchain since they will be using different versions of
1673 binutils and possibly different ABIs.
1674
1675Building Original Linux Boards in Cygwin
1676----------------------------------------
1677
1678 Some default board configurations are set to build under Linux and others
1679 to build under Windows with Cygwin. Various default toolchains may also
1680 be used in each configuration. It is possible to change the default
1681 setup. Here, for example, is what you must do in order to compile a
1682 default Linux configuration in the Cygwin environment using the
1683 CodeSourcery for Windows toolchain. After instantiating a "canned"
1684 NuttX configuration, run the target 'menuconfig' and set the following
1685 items:
1686
1687 Build Setup->Build Host Platform->Windows
1688 Build Setup->Windows Build Environment->Cygwin
1689 System Type->Toolchain Selection->CodeSourcery GNU Toolchain under Windows
1690
1691 In Windows 7 it may be required to open the Cygwin shell as Administrator
1692 ("Run As" option, right button) you find errors like "Permission denied".
1693
1694Recovering from Bad Configurations
1695----------------------------------
1696
1697 Many people make the mistake of configuring NuttX with the "canned"
1698 configuration and then just typing 'make' with disastrous consequences;
1699 the build may fail with mysterious, uninterpretable, and irrecoverable
1700 build errors. If, for example, you do this with an unmodified Linux
1701 configuration in a Windows/Cgwin environment, you will corrupt the
1702 build environment. The environment will be corrupted because of POSIX vs
1703 Windows path issues and with issues related to symbolic links. If you
1704 make the mistake of doing this, the easiest way to recover is to just
1705 start over: Do 'make distclean' to remove every trace of the corrupted
1706 configuration, reconfigure from scratch, and make certain that the set
1707 the configuration correctly for your platform before attempting to make
1708 again.
1709
1710 Just fixing the configuration file after you have instantiated the bad
1711 configuration with 'make' is not enough.
1712
1713DOCUMENTATION
1714^^^^^^^^^^^^^
1715
1716Additional information can be found in the Documentation/ directory and
1717also in README files that are scattered throughout the source tree. The
1718documentation is in HTML and can be access by loading the following file
1719into your Web browser:
1720
1721 Documentation/index.html
1722
1723NuttX documentation is also available online at http://www.nuttx.org.
1724
1725Below is a guide to the available README files in the NuttX source tree:
1726
1727nuttx/
1728 |
1729 |- arch/
1730 | |
1731 | |- arm/
1732 | | `- src
1733 | | |- common
1734 | | | `- README_lwl_console.txt
1735 | | |- lpc214x
1736 | | | `-README.txt
1737 | | `- stm32l4
1738 | | `- README.txt
1739 | |- renesas/
1740 | | |- include/
1741 | | | `-README.txt
1742 | | |- src/
1743 | | | `-README.txt
1744 | |- x86/
1745 | | |- include/
1746 | | | `-README.txt
1747 | | `- src/
1748 | | `-README.txt
1749 | `- z80/
1750 | | `- src/
1751 | | |- z80/README.txt
1752 | | `- z180/README.txt, z180_mmu.txt
1753 | `- README.txt
1754 |- audio/
1755 | `-README.txt
1756 |- binfmt/
1757 | `-libpcode/
1758 | `-README.txt
1759 |- boards/
1760 | |- arm/
1761 | | |- a1x/
1762 | | | `- pcduino-a10/
1763 | | | `- README.txt
1764 | | |- am335x/
1765 | | | `- beaglebone-black/
1766 | | | `- README.txt
1767 | | |- c5471/
1768 | | | `- c5471evm/
1769 | | | `- README.txt
1770 | | |- cxd56xx/
1771 | | | `- spresense/
1772 | | | `- README.txt
1773 | | |- dm320/
1774 | | | `- ntosd-dm320/
1775 | | | |- doc/README.txt
1776 | | | `- README.txt
1777 | | |- efm32/
1778 | | | |- efm32-g8xx-stk/
1779 | | | | `- README.txt
1780 | | | |- efm32gg-stk3700/
1781 | | | | `- README.txt
1782 | | | `- olimex-efm32g880f128-stk/
1783 | | | `- README.txt
1784 | | |- imx6/
1785 | | | `- sabre-6quad/
1786 | | | `- README.txt
1787 | | |- imxrt/
1788 | | | |- imxrt1050-evk/
1789 | | | | `- README.txt
1790 | | | `- imxrt1060-evk/
1791 | | | `- README.txt
1792 | | |- kinetis/
1793 | | | |- freedom-k28f/
1794 | | | | `- README.txt
1795 | | | |- freedom-k64f/
1796 | | | | `- README.txt
1797 | | | |- freedom-k66f/
1798 | | | | `- README.txt
1799 | | | |- kwikstik-k40/
1800 | | | | `- README.txt
1801 | | | |- teensy-3.x/
1802 | | | | `- README.txt
1803 | | | |- twr-k60n512/
1804 | | | | `- README.txt
1805 | | | `- twr-k64f120m/
1806 | | | `- README.txt
1807 | | |- kl/
1808 | | | |- freedom-kl25z/
1809 | | | | `- README.txt
1810 | | | |- freedom-kl26z/
1811 | | | | `- README.txt
1812 | | | `- teensy-lc/
1813 | | | `- README.txt
1814 | | |- lc823450/
1815 | | | `- lc823450-xgevk/
1816 | | | `- README.txt
1817 | | |- lpc17xx_40xx/
1818 | | | |- lincoln60/
1819 | | | | `- README.txt
1820 | | | |- lpc4088-devkit/
1821 | | | | `- README.txt
1822 | | | |- lpc4088-quickstart/
1823 | | | | `- README.txt
1824 | | | |- lpcxpresso-lpc1768/
1825 | | | | `- README.txt
1826 | | | |- lx_cpu/
1827 | | | | `- README.txt
1828 | | | |- mbed/
1829 | | | | `- README.txt
1830 | | | |- mcb1700/
1831 | | | | `- README.txt
1832 | | | |- olimex-lpc1766stk/
1833 | | | | `- README.txt
1834 | | | |- open1788/
1835 | | | | `- README.txt
1836 | | | |- pnev5180b/
1837 | | | | `- README.txt
1838 | | | |- u-blox-c027/
1839 | | | | `- README.txt
1840 | | | `- zkit-arm-1769/
1841 | | | `- README.txt
1842 | | |- lpc214x/
1843 | | | |- mcu123-lpc214x/
1844 | | | | `- README.txt
1845 | | | `- zp214xpa/
1846 | | | `- README.txt
1847 | | |- lpc2378/
1848 | | | `- olimex-lpc2378/
1849 | | | `- README.txt
1850 | | |- lpc31xx/
1851 | | | |- ea3131/
1852 | | | | `- README.txt
1853 | | | |- ea3152/
1854 | | | | `- README.txt
1855 | | | `- olimex-lpc-h3131/
1856 | | | `- README.txt
1857 | | |- lpc43xx/
1858 | | | |- bambino-200e/
1859 | | | | `- README.txt
1860 | | | |- lpc4330-xplorer/
1861 | | | | `- README.txt
1862 | | | |- lpc4337-ws/
1863 | | | | `- README.txt
1864 | | | |- lpc4357-evb/
1865 | | | | `- README.txt
1866 | | | `- lpc4370-link2/
1867 | | | `- README.txt
1868 | | |- lpc54xx/
1869 | | | `- lpcxpresso-lpc54628/
1870 | | | `- README.txt
1871 | | |- max326xx/
1872 | | | `- max32660-evsys/
1873 | | | `- README.txt
1874 | | |- moxart/
1875 | | | `- moxa/
1876 | | |- nrf52/
1877 | | | `- nrf52-generic/
1878 | | | `- README.txt
1879 | | |- nuc1xx/
1880 | | | `- nutiny-nuc120/
1881 | | | `- README.txt
1882 | | |- s32k1xx/
1883 | | | |- s32k118evb/
1884 | | | | `- README.txt
1885 | | | |- s32k146evb/
1886 | | | | `- README.txt
1887 | | | `- s32k148evb/
1888 | | | `- README.txt
1889 | | |- sam34/
1890 | | | |- arduino-due/
1891 | | | | `- README.txt
1892 | | | |- flipnclick-sam3x/
1893 | | | | `- README.txt
1894 | | | |- sam3u-ek/
1895 | | | | `- README.txt
1896 | | | |- sam4cmp-db/
1897 | | | | `- README.txt
1898 | | | |- sam4e-ek/
1899 | | | | `- README.txt
1900 | | | |- sam4l-xplained/
1901 | | | | `- README.txt
1902 | | | |- sam4s-xplained/
1903 | | | | `- README.txt
1904 | | | `- sam4s-xplained-pro/
1905 | | | `- README.txt
1906 | | |- sama5/
1907 | | | |- sama5d2-xult/
1908 | | | | `- README.txt
1909 | | | |- sama5d3x-ek/
1910 | | | | `- README.txt
1911 | | | |- sama5d3-xplained/
1912 | | | | `- README.txt
1913 | | | `- sama5d4-ek/
1914 | | | `- README.txt
1915 | | |- samd2l2/
1916 | | | |- arduino-m0/
1917 | | | | `- README.txt
1918 | | | |- samd20-xplained/
1919 | | | | `- README.txt
1920 | | | |- samd21-xplained/
1921 | | | | `- README.txt
1922 | | | `- saml21-xplained/
1923 | | | `- README.txt
1924 | | |- samd5e5/
1925 | | | `- metro-m4/
1926 | | | `- README.txt
1927 | | |- samv7/
1928 | | | |- same70-xplained/
1929 | | | | `- README.txt
1930 | | | `- samv71-xult/
1931 | | | `- README.txt
1932 | | |- stm32/
1933 | | | |- axoloti/
1934 | | | | `- README.txt
1935 | | | |- clicker2-stm32/
1936 | | | | `- README.txt
1937 | | | |- cloudctrl/
1938 | | | | `- README.txt
1939 | | | |- fire-stm32v2/
1940 | | | | `- README.txt
1941 | | | |- hymini-stm32v/
1942 | | | | `- README.txt
1943 | | | |- maple/
1944 | | | | `- README.txt
1945 | | | |- mikroe-stm32f4/
1946 | | | | `- README.txt
1947 | | | |- nucleo-f103rb/
1948 | | | | `- README.txt
1949 | | | |- nucleo-f207zg/
1950 | | | | `- README.txt
1951 | | | |- nucleo-f302r8/
1952 | | | | `- README.txt
1953 | | | |- nucleo-f303re/
1954 | | | | `- README.txt
1955 | | | |- nucleo-f303ze/
1956 | | | | `- README.txt
1957 | | | |- nucleo-f334r8/
1958 | | | | `- README.txt
1959 | | | |- nucleo-f410rb/
1960 | | | | `- README.txt
1961 | | | |- nucleo-f446re/
1962 | | | | `- README.txt
1963 | | | |- nucleo-f4x1re/
1964 | | | | `- README.txt
1965 | | | |- nucleo-l152re/
1966 | | | | `- README.txt
1967 | | | |- olimexino-stm32/
1968 | | | |- olimex-stm32-e407/
1969 | | | | `- README.txt
1970 | | | |- olimex-stm32-h405/
1971 | | | | `- README.txt
1972 | | | |- olimex-stm32-h407/
1973 | | | | `- README.txt
1974 | | | |- olimex-stm32-p107/
1975 | | | |- olimex-stm32-p207/
1976 | | | | `- README.txt
1977 | | | |- olimex-stm32-p407/
1978 | | | | `- README.txt
1979 | | | |- omnibusf4/
1980 | | | | `- README.txt
1981 | | | |- photon/
1982 | | | | `- README.txt
1983 | | | |- shenzhou/
1984 | | | | `- README.txt
1985 | | | |- stm32_tiny/
1986 | | | | `- README.txt
1987 | | | |- stm3210e-eval/
1988 | | | | `- README.txt
1989 | | | |- stm3220g-eval/
1990 | | | | `- README.txt
1991 | | | |- stm3240g-eval/
1992 | | | | `- README.txt
1993 | | | |- stm32butterfly2/
1994 | | | |- stm32f103-minimum/
1995 | | | | `- README.txt
1996 | | | |- stm32f334-disco/
1997 | | | | `- README.txt
1998 | | | |- stm32f3discovery/
1999 | | | | `- README.txt
2000 | | | |- stm32f411e-disco/
2001 | | | | `- README.txt
2002 | | | |- stm32f429i-disco/
2003 | | | | `- README.txt
2004 | | | |- stm32f4discovery/
2005 | | | | `- README.txt
2006 | | | |- stm32ldiscovery/
2007 | | | | `- README.txt
2008 | | | |- stm32vldiscovery/
2009 | | | | `- README.txt
2010 | | | `- viewtool-stm32f107/
2011 | | | `- README.txt
2012 | | |- stm32f0l0g0/
2013 | | | |- b-l072z-lrwan1/
2014 | | | | `- README.txt
2015 | | | |- nucleo-f072rb/
2016 | | | | `- README.txt
2017 | | | |- nucleo-f091rc/
2018 | | | | `- README.txt
2019 | | | |- nucleo-g070rb/
2020 | | | | `- README.txt
2021 | | | |- nucleo-g071rb/
2022 | | | | `- README.txt
2023 | | | |- nucleo-l073rz/
2024 | | | | `- README.txt
2025 | | | |- stm32f051-discovery/
2026 | | | | `- README.txt
2027 | | | `- stm32f072-discovery/
2028 | | | `- README.txt
2029 | | |- stm32f7/
2030 | | | |- nucleo-144/
2031 | | | | `- README.txt
2032 | | | |- stm32f746g-disco/
2033 | | | | |- configs/fb/README.txt
2034 | | | | |- configs/nxdemo/README.txt
2035 | | | | |- configs/nxterm/README.txt
2036 | | | | `- README.txt
2037 | | | |- stm32f746-ws/
2038 | | | `- stm32f769i-disco/
2039 | | | `- README.txt
2040 | | |- stm32h7/
2041 | | | `- nucleo-h743zi/
2042 | | | `- README.txt
2043 | | |- stm32l4/
2044 | | | |- b-l475e-iot01a/
2045 | | | | `- README.txt
2046 | | | |- nucleo-l432kc/
2047 | | | | `- README.txt
2048 | | | |- nucleo-l452re/
2049 | | | | `- README.txt
2050 | | | |- nucleo-l476rg/
2051 | | | | `- README.txt
2052 | | | |- nucleo-l496zg/
2053 | | | | `- README.txt
2054 | | | |- stm32l476-mdk/
2055 | | | | `- README.txt
2056 | | | |- stm32l476vg-disco/
2057 | | | | `- README.txt
2058 | | | `- stm32l4r9ai-disco/
2059 | | | `- README.txt
2060 | | |- str71x/
2061 | | | `- olimex-strp711/
2062 | | | `- README.txt
2063 | | |- tiva/
2064 | | | |- dk-tm4c129x/
2065 | | | | `- README.txt
2066 | | | |- eagle100/
2067 | | | | `- README.txt
2068 | | | |- ekk-lm3s9b96/
2069 | | | | `- README.txt
2070 | | | |- launchxl-cc1310/
2071 | | | | `- README.txt
2072 | | | |- launchxl-cc1312r1/
2073 | | | | `- README.txt
2074 | | | |- lm3s6432-s2e/
2075 | | | | `- README.txt
2076 | | | |- lm3s6965-ek/
2077 | | | | `- README.txt
2078 | | | |- lm3s8962-ek/
2079 | | | | `- README.txt
2080 | | | |- lm4f120-launchpad/
2081 | | | | `- README.txt
2082 | | | |- tm4c123g-launchpad/
2083 | | | | `- README.txt
2084 | | | `- tm4c1294-launchpad/
2085 | | | `- README.txt
2086 | | |- tms570/
2087 | | | |- launchxl-tms57004/
2088 | | | | `- README.txt
2089 | | | `- tms570ls31x-usb-kit/
2090 | | | `- README.txt
2091 | | `- xmc4/
2092 | | `- xmc4500-relax/
2093 | | `- README.txt
2094 | |- avr/
2095 | | |- at32uc3/
2096 | | | `- avr32dev1/
2097 | | | `- README.txt
2098 | | |- at90usb/
2099 | | | |- micropendous3/
2100 | | | | `- README.txt
2101 | | | `- teensy-2.0/
2102 | | | `- README.txt
2103 | | `- atmega/
2104 | | |- amber/
2105 | | | `- README.txt
2106 | | |- arduino-mega2560/
2107 | | | `- README.txt
2108 | | `- moteino-mega/
2109 | | `- README.txt
2110 | |- hc/
2111 | | `- mcs92s12ne64/
2112 | | |- demo9s12ne64/
2113 | | | `- README.txt
2114 | | `- ne64badge/
2115 | | `- README.txt
2116 | |- mips/
2117 | | |- pic32mx/
2118 | | | |- mirtoo/
2119 | | | | `- README.txt
2120 | | | |- pic32mx7mmb/
2121 | | | | `- README.txt
2122 | | | |- pic32mx-starterkit/
2123 | | | | `- README.txt
2124 | | | |- sure-pic32mx/
2125 | | | | `- README.txt
2126 | | | `- ubw32/
2127 | | | `- README.txt
2128 | | `-pic32mz/
2129 | | |- flipnclick-pic32mz/
2130 | | | `- README.txt
2131 | | `- pic32mz-starterkit/
2132 | | `- README.txt
2133 | |- misoc/
2134 | | `- lm32/
2135 | | `- misoc/
2136 | | `- README.txt
2137 | |- or1k/
2138 | | `- mor1kx/
2139 | | `- or1k/
2140 | | `- README.txt
2141 | |- renesas/
2142 | | |- m32262f8/
2143 | | | `- skp16c26/
2144 | | | `- README.txt
2145 | | `-sh7032/
2146 | | `- us7032evb1/
2147 | | `- README.txt
2148 | |- risc-v/
2149 | | |- gap8/
2150 | | | `- gapuino/
2151 | | | `- README.txt
2152 | | `-nr5m100/
2153 | | `- nr5m100-nexys4/
2154 | | `- README.txt
2155 | |- sim/
2156 | | `- sim/
2157 | | `- sim/
2158 | | |- include/README.txt
2159 | | `- README.txt
2160 | |- x86/
2161 | | `- qemu/
2162 | | `- qemu-i486/
2163 | | `- README.txt
2164 | |- xtensa/
2165 | | `- esp32/
2166 | | `- esp32-core/
2167 | | `- README.txt
2168 | |- z16/
2169 | | `- z16f2811/
2170 | | `- z16f2800100zcog/
2171 | | |- configs/nsh/README.txt
2172 | | |- configs/ostest/README.txt
2173 | | |- configs/pashello/README.txt
2174 | | `- README.txt
2175 | |- z80/
2176 | | |- ez80/
2177 | | | |- ez80f910200kitg/
2178 | | | | |- configs/ostest/README.txt
2179 | | | | `- README.txt
2180 | | | |- ez80f910200zco/
2181 | | | | |- configs/dhcpd/README.txt
2182 | | | | |- configs/httpd/README.txt
2183 | | | | |- configs/nettest/README.txt
2184 | | | | |- configs/nsh/README.txt
2185 | | | | |- configs/poll/README.txt
2186 | | | | `- README.txt
2187 | | | `- makerlisp/
2188 | | | |- configs/nsh_flash/README.txt
2189 | | | |- configs/nsh_ram/README.txt
2190 | | | |- configs/sdboot/README.txt
2191 | | | `- README.txt
2192 | | |- z180/
2193 | | | `- p112/
2194 | | | `- README.txt
2195 | | |- z8/
2196 | | | |- z8encore000zco/
2197 | | | | |- configs/ostest/README.txt
2198 | | | | `- README.txt
2199 | | | `- z8f64200100kit/
2200 | | | |- configs/ostest/README.txt
2201 | | | `- README.txt
2202 | | `- z80/
2203 | | `- z80sim/
2204 | | `- README.txt
2205 | `-README.txt
2206 |- drivers/
2207 | |- eeprom/
2208 | | `- README.txt
2209 | |- lcd/
2210 | | | README.txt
2211 | | `- pcf8574_lcd_backpack_readme.txt
2212 | |- mtd/
2213 | | `- README.txt
2214 | |- sensors/
2215 | | `- README.txt
2216 | |- syslog/
2217 | | `- README.txt
2218 | `- README.txt
2219 |- fs/
2220 | |- binfs/
2221 | | `- README.txt
2222 | |- cromfs/
2223 | | `- README.txt
2224 | |- mmap/
2225 | | `- README.txt
2226 | |- nxffs/
2227 | | `- README.txt
2228 | |- smartfs/
2229 | | `- README.txt
2230 | |- procfs/
2231 | | `- README.txt
2232 | |- spiffs/
2233 | | `- README.md
2234 | `- unionfs/
2235 | `- README.txt
2236 |- graphics/
2237 | `- README.txt
2238 |- libs/
2239 | |- README.txt
2240 | |- libc/
2241 | | |- zoneinfo
2242 | | | `- README.txt
2243 | | `- README.txt
2244 | |- libdsp/
2245 | | `- README.txt
2246 | |- libnx/
2247 | | |- nxfongs
2248 | | | `- README.txt
2249 | | `- README.txt
2250 | |- libxx/
2251 | `- README.txt
2252 |- mm/
2253 | |- shm/
2254 | | `- README.txt
2255 | `- README.txt
2256 |- net/
2257 | |- sixlowpan
2258 | | `- README.txt
2259 | `- README.txt
2260 |- pass1/
2261 | `- README.txt
2262 |- syscall/
2263 | `- README.txt
2264 `- tools/
2265 `- README.txt
2266
2267Below is a guide to the available README files in the semi-optional apps/
2268source tree:
2269
2270apps/
2271 |- examples/
2272 | |- bastest/README.txt
2273 | |- json/README.txt
2274 | |- pashello/README.txt
2275 | `- README.txt
2276 |- gpsutils/
2277 | `- minmea/README.txt
2278 |- graphics/
2279 | |- tiff/README.txt
2280 | `- traveler/tools/tcledit/README.txt
2281 |- interpreters/
2282 | |- bas/
2283 | | `- README.txt
2284 | |- ficl/
2285 | | `- README.txt
2286 | `- README.txt
2287 |- modbus/
2288 | `- README.txt
2289 |- netutils/
2290 | |- discover/
2291 | | `- README.txt
2292 | |- ftpc/
2293 | | `- README.txt
2294 | |- json/
2295 | | `- README.txt
2296 | |- telnetd/
2297 | | `- README.txt
2298 | `- README.txt
2299 |- nshlib/
2300 | `- README.txt
2301 |- NxWidgets/
2302 | `- README.txt
2303 |- system/
2304 | |- cdcacm/
2305 | | `- README.txt
2306 | |- i2c/
2307 | | `- README.txt
2308 | |- inifile/
2309 | | `- README.txt
2310 | |- install/
2311 | | `- README.txt
2312 | |- nsh/
2313 | | `- README.txt
2314 | |- nxplayer/
2315 | | `- README.txt
2316 | |- psmq/
2317 | | `- README.txt
2318 | |- symtab/
2319 | | `- README.txt
2320 | |- termcurses/
2321 | | `- README.txt
2322 | |- usbmsc/
2323 | | `- README.txt
2324 | `- zmodem/
2325 | `- README.txt
2326 `- wireless
2327 |- bluetooth/
2328 | `- btsak/
2329 | `- README.txt
2330 `- ieee802154
2331 `- i8sak/
2332 `- README.txt
2333
2334Additional README.txt files in the other, related repositories:
2335
2336NxWidgets/
2337 |- Doxygen
2338 | `- README.txt
2339 |- tools
2340 | `- README.txt
2341 |- UnitTests
2342 | `- README.txt
2343 `- README.txt
2344
2345buildroot/
2346 `- README.txt
2347
2348tools/
2349 `- README.txt
2350
2351uClibc++/
2352 `- README.txt
2353
2354pascal/
2355 `- README.txt
2356