This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push: new b8c35f667 remove nshlib/README.md which is already in Documentation/applications/nsh b8c35f667 is described below commit b8c35f667e5470f8afbc24cfc839eca05eada1ee Author: raiden00pl <raide...@railab.me> AuthorDate: Mon Oct 30 09:22:27 2023 +0100 remove nshlib/README.md which is already in Documentation/applications/nsh --- nshlib/README.md | 2061 ------------------------------------------------------ 1 file changed, 2061 deletions(-) diff --git a/nshlib/README.md b/nshlib/README.md deleted file mode 100644 index 23d06b542..000000000 --- a/nshlib/README.md +++ /dev/null @@ -1,2061 +0,0 @@ -# `nshlib` NuttShell (NSH) - -This directory contains the NuttShell (NSH) library. This library can be linked -with other logic to provide a simple shell application for NuttX. - -- Console/NSH Front End -- Command Overview -- Conditional Command Execution -- Looping -- Built-In Variables -- Current Working Directory - - Environment Variables -- NSH Start-Up Script -- Simple Commands -- Built-In Applications -- NSH Configuration Settings - - Command Dependencies on Configuration Settings - - Built-in Application Configuration Settings - - NSH-Specific Configuration Settings -- Common Problems - -## Console / NSH Front End - -Using settings in the configuration file, NSH may be configured to use either -the serial `stdin`/`out` or a telnet connection as the console or BOTH. When NSH -is started, you will see the following welcome on either console: - -``` -NuttShell (NSH) -nsh> -``` - -`nsh>` is the NSH prompt and indicates that you may enter a command from the -console. - -## Command Overview - -This directory contains the NuttShell (NSH). This is a simple shell-like -application. At present, NSH supports the following commands forms: - -- Simple command: - - ``` - <cmd> - ``` - -- Command with re-directed output: - - ``` - <cmd> > <file> - <cmd> >> <file> - ``` - -- Background command: - - ``` - <cmd> & - ``` - -- Re-directed background command: - - ``` - <cmd> > <file> & - <cmd> >> <file> & - ``` - -Where: - -- `<cmd>` - is any one of the simple commands listed later. -- `<file>` - is the full or relative path to any writeable object in the file - system name space (file or character driver). Such objects will be referred to - simply as files throughout this README. - -NSH executes at the mid-priority (`128`). Backgrounded commands can be made to -execute at higher or lower priorities using nice: - -``` -[nice [-d <niceness>>]] <cmd> [> <file>|>> <file>] [&] -``` - -Where `<niceness>` is any value between `-20` and `19` where lower (more -negative values) correspond to higher priorities. The default niceness is `10`. - -Multiple commands per line. NSH will accept multiple commands per command line -with each command separated with the semi-colon character (`;`). - -If `CONFIG_NSH_CMDPARMS` is selected, then the output from commands, from file -applications, and from NSH built-in commands can be used as arguments to other -commands. The entity to be executed is identified by enclosing the command line -in back quotes. For example, - -```shell -set FOO `myprogram $BAR` -``` - -Will execute the program named myprogram passing it the value of the environment -variable `BAR`. The value of the environment variable `FOO` is then set output -of myprogram on stdout. Because this feature commits significant resources, it -is disabled by default. - -If `CONFIG_NSH_ARGCAT` is selected, the support concatenation of strings with -environment variables or command output. For example: - -```shell -set FOO XYZ -set BAR 123 -set FOOBAR ABC_${FOO}_${BAR} -``` - -would set the environment variable `FOO` to `XYZ`, `BAR` to `123` and `FOOBAR` -to `ABC_XYZ_123`. If `NSH_ARGCAT` is not selected, then a slightly small FLASH -footprint results but then also only simple environment variables like `$FOO` -can be used on the command line. - -`CONFIG_NSH_QUOTE` enables back-slash quoting of certain characters within the -command. This option is useful for the case where an NSH script is used to -dynamically generate a new NSH script. In that case, commands must be treated as -simple text strings without interpretation of any special characters. Special -characters such as `$`, `` ` ``, `"`, and others must be retained intact as part of -the test string. This option is currently only available is `CONFIG_NSH_ARGCAT` -is also selected. - -## Conditional Command Execution - -An `if-then[-else]-fi` construct is also supported in order to support -conditional execution of commands. This works from the command line but is -primarily intended for use within NSH scripts (see the `sh` command). The syntax -is as follows: - -``` -if [!] <cmd> -then - [sequence of <cmd>] -else - [sequence of <cmd>] -fi -``` - -## Looping - -`while-do-done` and `until-do-done` looping constructs are also supported. These -works from the command line but are primarily intended for use within NSH -scripts (see the `sh` command). The syntax is as follows: - -``` -while <test-cmd>; do <cmd-sequence>; done -``` - -(Execute `<cmd-sequence>` as long as `<test-cmd>` has an exit status of zero.) - -``` -until <test-cmd>; do <cmd-sequence>; done -``` - -(Execute `<cmd-sequence>` as long as `<test-cmd>` has a non-zero exit status.) - -A break command is also supported. The break command is only meaningful within -the body of the a `while` or `until` loop, between the do and done tokens. If -the break command is executed within the body of a loop, the loop will -immediately terminate and execution will continue with the next command -immediately following the done token. - -## Built-In Variables - -- `$?` - The result of the last simple command execution. - -## Current Working Directory - -All path arguments to commands may be either an absolute path or a path relative -to the current working directory. The current working directory is set using the -`cd` command and can be queried either by using the `pwd` command or by using -the `echo $PWD` command. - -### Environment Variables: - -- `PWD` - The current working directory -- `OLDPWD` - The previous working directory - -## NSH System-init And Start-Up Script - -NSH supports options to provide a system init script and start up script for NSH. -In general this capability is enabled with `CONFIG_NSH_ROMFSETC`, but has -several other related configuration options as described in the final section -of this README. This capability also depends on: - -- `CONFIG_DISABLE_MOUNTPOINT` not set -- `CONFIG_FS_ROMFS` - -### Default Script Behavior - -The implementation that is provided is intended to provide great flexibility for -the use of script files, include system init file and start-up file. This -paragraph will discuss the general behavior when all of the configuration -options are set to the default values. - -System-init script is executed before Start-up script. The system-init script -is mainly used for file system mounting and core system service startup, and the -start-up script is used for application and other system service startup. So, -Between them, some initialize can use filesystem and core system service, -Examples: Peripheral driver initialize at `boardctl(BOARDIOC_FINALINIT, 0)`. - -In this default case, enabling `CONFIG_NSH_ROMFSETC` will cause NSH to behave as -follows at NSH startup time: - -- NSH will create a read-only RAM disk (a ROM disk), containing a tiny ROMFS - file system containing the following: - - ``` - | `--init.d/ - `-- rcS - `-- rc.sysinit - ```` - - Where `rcS` is the NSH start-up script - Where `rc.sysinit` is the NSH system-init script - -- NSH will then mount the ROMFS file system at `/etc`, resulting in: - - ``` - |--dev/ - | `-- ram0 - `--etc/ - `--init.d/ - `-- rcS - `-- rc.sysinit - ``` - -- By default, the contents of `rc.sysinit` script are: - - ```shell - # Create a RAMDISK and mount it at XXXRDMOUNTPOINTXXX - - mkrd -m 1 -s 512 1024 - mkfatfs /dev/ram1 - mount -t vfat /dev/ram1 /tmp - ``` - -- NSH will execute the script at `/etc/init.d/rc.sysinit` at system init - before the first NSH prompt. After execution of the script, the root - FS will look like: - - ``` - |--dev/ - | |-- ram0 - | `-- ram1 - |--etc/ - | `--init.d/ - | `-- rcS - | `-- rc.sysinit - `--tmp/ - ``` - -### Modifying the ROMFS Image - -The contents of the `/etc` directory are retained in the file -`apps/nshlib/nsh_romfsimg.h` (OR, if `CONFIG_NSH_ARCHROMFS` is defined, -`include/arch/board/rcS.template`). In order to modify the start-up behavior, -there are three things to study: - -1. Configuration Options. - The additional `CONFIG_NSH_ROMFSETC` configuration options discussed in the - final section of this README. - -2. `tools/mkromfsimg.sh` Script. - The script `tools/mkromfsimg.sh` creates `nsh_romfsimg.h`. It is not - automatically executed. If you want to change the configuration settings - associated with creating and mounting the `/tmp` directory, then it will be - necessary to re-generate this header file using the `mkromfsimg.sh` script. - - The behavior of this script depends upon three things: - - - The configuration settings of the installed NuttX configuration. - - The genromfs tool (available from http://romfs.sourceforge.net). - - The file `apps/nshlib/rcS.template` (OR, if `CONFIG_NSH_ARCHROMFS` is - defined, `include/arch/board/rcs.template`) - -3. `rc.sysinit.template`. The file `apps/nshlib/rc.sysinit.template` contains - the general form of the `rc.sysinit.template` file; configured values - are plugged into this template file to produce the final `rc.sysinit` file. - - `rcS.template`. The file `apps/nshlib/rcS.template` contains the general form - of the `rcS` file; configured values are plugged into this template file to - produce the final `rcS` file. - -**Note**: `apps/nshlib/rc.sysinit.template` and ` apps/nshlib/rcS.template` -generates the standard, default `nsh_romfsimg.h` file. If `CONFIG_NSH_ARCHROMFS` -is defined in the NuttX configuration file, then a custom, board-specific -`nsh_romfsimg.h` file residing in `boards/<arch>/<chip>/<board>/include` will be -used. **Note** when the OS is configured, `include/arch/board` will be linked to -`boards/<arch>/<chip>/<board>/include`. - -All of the startup-behavior is contained in `rc.sysinit.template` and -`rcS.template`. The role of `mkromfsimg.sh` is to (1) apply the specific -configuration settings to `rc.sysinit.template` to create the final -`rc.sysinit.template`, and `rcS.template` to create the final `rcS` and -(2) to generate the header file `nsh_romfsimg.h` containing the ROMFS file -system image. - -## Simple Commands - -- `[ <expression> ]` - `test <expression>` - - These are two alternative forms of the same command. They support evaluation - of a boolean expression which sets `$?`. This command is used most frequently - as the conditional command following the `if` in the `if-then[-else]-fi` - construct. - - **Expression Syntax**: - - ``` - expression = simple-expression | !expression | - expression -o expression | expression -a expression - - simple-expression = unary-expression | binary-expression - - unary-expression = string-unary | file-unary - - string-unary = -n string | -z string - - file-unary = -b file | -c file | -d file | -e file | -f file | - -r file | -s file | -w file - - binary-expression = string-binary | numeric-binary - - string-binary = string = string | string == string | string != string - - numeric-binary = integer -eq integer | integer -ge integer | - integer -gt integer | integer -le integer | - integer -lt integer | integer -ne integer - ``` - -- `addroute <target> [<netmask>] <router>` - `addroute default <ipaddr> <interface>` - - This command adds an entry in the routing table. The new entry - will map the IP address of a router on a local network(`<router>`) - to an external network characterized by the `<target>` IP address and - a network mask `<netmask>` - - The netmask may also be expressed using IPv4 CIDR or IPv6 slash - notation. In that case, the netmask need not be provided. - - **Example**: - - ``` - nsh> addroute 11.0.0.0 255.255.255.0 10.0.0.2 - ``` - - which is equivalent to - - ``` - nsh> addroute 11.0.0.0/24 10.0.0.2 - ``` - - The second form of the `addroute` command can be used to set the default - gateway. - -- `arp [-t|-a <ipaddr>|-d <ipaddr>|-s <ipaddr> <hwaddr>]` - - Access the OS ARP table. - - - `-a <ipaddr>` - Will show the hardware address that the IP address `<ipaddr>` is mapped to. - - - `-d <ipaddr>` - Will delete the mapping for the IP address `<ipaddr>` from the ARP table. - - - `-s <ipaddr> <hwaddr>` - Will set (or replace) the mapping of the IP address `<ipaddr>` to the - hardware address `<hwaddr>`. - - - `-t` - Will dump the entire content of the ARP table. This option is only - available if `CONFIG_NETLINK_ROUTE` is enabled. - - **Example**: - - ``` - nsh> arp -a 10.0.0.1 - nsh: arp: no such ARP entry: 10.0.0.1 - - nsh> arp -s 10.0.0.1 00:13:3b:12:73:e6 - nsh> arp -a 10.0.0.1 - HWAddr: 00:13:3b:12:73:e6 - - nsh> arp -d 10.0.0.1 - nsh> arp -a 10.0.0.1 - nsh: arp: no such ARP entry: 10.0.0.1 - ``` - -- `base64dec [-w] [-f] <string or filepath>` - -- `base64dec [-w] [-f] <string or filepath>` - -- `basename <path> [<suffix>]` - - Extract the final string from a `<path>` by removing the preceding path - segments and (optionally) removing any trailing `<suffix>`. - -- `break` - - The `break` command is only meaningful within the body of the a `while` or - `until` loop, between the do and done tokens. Outside of a loop, `break` - command does nothing. If the break command is executed within the body of a - loop, the loop will immediately terminate and execution will continue with the - next command immediately following the done token. - -- `cat <path> [<path> [<path> ...]]` - - This command copies and concatenates all of the files at `<path>` to the - console (or to another file if the output is redirected). - -- `cd [<dir-path>|-|~|..]` - - Changes the current working directory (`PWD`). Also sets the previous working - directory environment variable (`OLDPWD`). - - **Forms**: - - - `cd <dir-path>` sets the current working directory to `<dir-path>`. - - `cd -` sets the current working directory to the previous working directory - (`$OLDPWD`). Equivalent to `cd $OLDPWD`. - - `cd` or `cd ~` set the current working directory to the _home_ directory. - The _home_ directory can be configured by setting `CONFIG_LIBC_HOMEDIR` in - the configuration file. The default _home_ directory is `/`. - - `cd ..` sets the current working directory to the parent directory. - -- `cmp <path1> <path2>` - - Compare of the contents of the file at `<file1>` with the contents of the file - at `<path2>`. Returns an indication only if the files differ. - -- `cp <source-path> <dest-path>` - - Copy of the contents of the file at `<source-path>` to the location in the - file system indicated by `<path-path>` - -- `date [-s "MMM DD HH:MM:SS YYYY"] [-u]` - - Show or set the current date and time. - - Only one format is used both on display and when setting the date/time: - `MMM DD HH:MM:SS YYYY`. For example, - - ```shell - data -s "Sep 1 11:30:00 2011" - ``` - - 24-hour time format is assumed. - -- `dd if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>]` - - Copy blocks from `<infile>` to `<outfile>`. `<nfile>` or `<outfile>` may be - the path to a standard file, a character device, or a block device. - - **Examples**: - - 1. Read from character device, write to regular file. This will create a new - file of the specified size filled with zero. - - ```shell - nsh> dd if=/dev/zero of=/tmp/zeros bs=64 count=16 - nsh> ls -l /tmp - /tmp: - -rw-rw-rw- 1024 ZEROS - ``` - - 2. Read from character device, write to block device. This will fill the - entire block device with zeros. - - ```shell - nsh> ls -l /dev - /dev: - brw-rw-rw- 0 ram0 - crw-rw-rw- 0 zero - nsh> dd if=/dev/zero of=/dev/ram0 - ``` - - 3. Read from a block device, write to a character device. This will read the - entire block device and dump the contents in the bit bucket. - - ```shell - nsh> ls -l /dev - /dev: - crw-rw-rw- 0 null - brw-rw-rw- 0 ram0 - nsh> dd if=/dev/ram0 of=/dev/null - ``` - -- `delroute <target> [<netmask>]` - - This command removes an entry from the routing table. The entry removed will - be the first entry in the routing table that matches the external network - characterized by the `<target>` IP address and the network mask `<netmask>` - - The netmask may also be expressed using IPv4 CIDR or IPv6 slash notation. In - that case, the netmask need not be provided. - - **Example**: - - ``` - nsh> delroute 11.0.0.0 255.255.255.0 - ``` - - which is equivalent to - - ``` - nsh> delroute 11.0.0.0/24 - ``` - -- `df` - - Show the state of each mounted volume. - - **Example**: - - ``` - nsh> mount - /etc type romfs - /tmp type vfat - nsh> df - Block Number - Size Blocks Used Available Mounted on - 64 6 6 0 /etc - 512 985 2 983 /tmp - nsh> - ``` - -- `dirname <path>` - - Extract the path string leading up to the full `<path>` by removing the final - directory or file name. - -- `dmesg` - - This command can be used to dump (and clear) the content of any buffered - syslog output messages. This command is only available if - `CONFIG_RAMLOG_SYSLOG` is enabled. In that case, syslog output will be - collected in an in-memory, circular buffer. Entering the `dmesg` command will - dump the content of that in-memory, circular buffer to the NSH console output. - `dmesg` has the side effect of clearing the buffered data so that entering - `dmesg` again will show only newly buffered data. - -- `echo [-n] [<string|$name> [<string|$name>...]]` - - Copy the sequence of strings and expanded environment variables to console out - (or to a file if the output is re-directed). - - The `-n` option will suppress the trailing newline character. - -- `env` - - Show the current name-value pairs in the environment. **Example**: - - ``` - nsh> env - PATH=/bin - - nsh> set foo bar - nsh> env - PATH=/bin - foo=bar - - nsh> unset PATH - nsh> env - foo=bar - - nsh> - ``` - - **Note**: NSH variables are **not** shown by the `env` command. - -- `exec <hex-address>` - - Execute the user logic at address `<hex-address>`. NSH will pause until the - execution unless the user logic is executed in background via - `exec <hex-address> &` - -- `exit` - - Exit NSH. Only useful if you have started some other tasks (perhaps using the - `exec` command) and you would like to have NSH out of the way. - -- `export <name> [<value>]` - - The `export` command sets an environment variable, or promotes an NSH variable - to an environment variable. As examples: - - 1. Using `export` to promote an NSH variable to an environment variable. - - ``` - nsh> env - PATH=/bin - - nsh> set foo bar - nsh> env - PATH=/bin - - nsh> export foo - nsh> env - PATH=/bin - foo=bar - ``` - - A group-wide environment variable is created with the same value as the - local NSH variable; the local NSH variable is removed. - - **Note**: This behavior differs from the Bash shell. Bash will retain the - local Bash variable which will shadow the environment variable of the same - name and same value. - - 2. Using `export` to set an environment variable - - ``` - nsh> export dog poop - nsh> env - PATH=/bin - foo=bar - dog=poop - ``` - - The export command is not supported by NSH unless both `CONFIG_NSH_VARS=y` and - `CONFIG_DISABLE_ENVIRON` is not set. - -- `free` - - Show the current state of the memory allocator. For example, - - ``` - nsh> free - free - total used free largest - Mem: 4194288 1591552 2602736 2601584 - ``` - - Where: - - - total - This is the total size of memory allocated for use - by `malloc` in bytes. - - used - This is the total size of memory occupied by - chunks handed out by `malloc`. - - free - This is the total size of memory occupied by - free (not in use) chunks. - - largest - Size of the largest free (not in use) chunk. - -- `get [-b|-n] [-f <local-path>] -h <ip-address> <remote-path>` - - Use TFTP to copy the file at `<remote-address>` from the host whose IP - address is identified by `<ip-address>`. Other options: - - - `-f <local-path>` - The file will be saved relative to the current working directory unless - `<local-path>` is provided. - - `-b|-n` - Selects either binary (_octet_) or text (_netascii_) transfer mode. Default: - text. - -- `help [-v] [<cmd>]` - - Presents summary information about NSH commands to console. Options: - - - `-v` - Show verbose output will full command usage. - - - `<cmd>` - Show full command usage only for this command. - -- `hexdump <file or device>` - - Dump data in hexadecimal format from a file or character device. - -- `ifconfig [nic_name [address_family] [[mtu <len>] | [<ip-address>|dhcp]] [dr|gw|gateway <dr-address>] [netmask <net-mask>|prefixlen <len>] [dns <dns-address>] [hw <hw-mac>]]` - - Show the current configuration of the network, for example: - - ``` - nsh> ifconfig - eth0 HWaddr 00:18:11:80:10:06 - IPaddr:10.0.0.2 DRaddr:10.0.0.1 Mask:255.255.255.0 - ``` - - if networking statistics are enabled (`CONFIG_NET_STATISTICS`), then - this command will also show the detailed state of transfers by protocol. - - **Note**: This commands depends upon having the `procfs` file system configured - into the system. The `procfs` file system must also have been mounted - with a command like: - - ``` - nsh> mount -t procfs /proc - ``` - -- `ifdown <interface>` - - Take down the interface identified by the name `<interface>`. - - **Example**: - - ``` - ifdown eth0 - ``` - -- `ifup <interface>` - - Bring up down the interface identified by the name `<interface>`. - - **Example**: - - ``` - ifup eth0 - ``` - -- `insmod <file-path> <module-name>` - - Install the loadable OS module at `<file-path>` as module `<module-name>` - - **Example**: - - ``` - nsh> ls -l /mnt/romfs - /mnt/romfs: - dr-xr-xr-x 0 . - -r-xr-xr-x 9153 chardev - nsh> ls -l /dev - /dev: - crw-rw-rw- 0 console - crw-rw-rw- 0 null - brw-rw-rw- 0 ram0 - crw-rw-rw- 0 ttyS0 - nsh> insmod /mnt/romfs/chardev mydriver - nsh> ls -l /dev - /dev: - crw-rw-rw- 0 chardev - crw-rw-rw- 0 console - crw-rw-rw- 0 null - brw-rw-rw- 0 ram0 - crw-rw-rw- 0 ttyS0 - nsh> lsmod - NAME INIT UNINIT ARG TEXT SIZE DATA SIZE - mydriver 20404659 20404625 0 20404580 552 204047a8 0 - ``` - -- `irqinfo` - - Show the current count of interrupts taken on all attached interrupts. - - **Example**: - - ``` - nsh> irqinfo - IRQ HANDLER ARGUMENT COUNT RATE - 3 00001b3d 00000000 156 19.122 - 15 0000800d 00000000 817 100.000 - 30 00000fd5 20000018 20 2.490 - ``` - -- `kill -<signal> <pid>` - - Send the `<signal>` to the task identified by `<pid>`. - -- `losetup [-d <dev-path>] | [[-o <offset>] [-r] <ldev-path> <file-path>]` - - Setup or teardown the loop device: - - 1. Teardown the setup for the loop device at `<dev-path>`: - - ```shell - losetup d <dev-path> - ``` - - 2. Setup the loop device at `<dev-path>` to access the file at `<file-path>` - as a block device: - - ```shell - losetup [-o <offset>] [-r] <dev-path> <file-path> - ``` - - **Example**: - - ``` - nsh> dd if=/dev/zero of=/tmp/image bs=512 count=512 - nsh> ls -l /tmp - /tmp: - -rw-rw-rw- 262144 IMAGE - nsh> losetup /dev/loop0 /tmp/image - nsh> ls -l /dev - /dev: - brw-rw-rw- 0 loop0 - nsh> mkfatfs /dev/loop0 - nsh> mount -t vfat /dev/loop0 /mnt/example - nsh> ls -l /mnt - ls -l /mnt - /mnt: - drw-rw-rw- 0 example/ - nsh> echo "This is a test" >/mnt/example/atest.txt - nsh> ls -l /mnt/example - /mnt/example: - -rw-rw-rw- 16 ATEST.TXT - nsh> cat /mnt/example/atest.txt - This is a test - nsh> - ``` - -- `ln [-s] <target> <link>` - - The link command will create a new symbolic link at `<link>` for the - existing file or directory, `<target>`. This implementation is simplied - for use with NuttX in these ways: - - - Links may be created only within the NuttX top-level, pseudo file - system. No file system currently supported by NuttX provides - symbolic links. - - For the same reason, only soft links are implemented. - - File privileges are ignored. - - `c_time` is not updated. - -- `ls [-lRs] <dir-path>` - - Show the contents of the directory at `<dir-path>`. **Note**: - `<dir-path>` must refer to a directory and no other file system - object. - - Options: - - - `-R` Show the constents of specified directory and all of its - sub-directories. - - `-s` Show the size of the files along with the filenames in the listing. - - `-l` Show size and mode information along with the filenames in the listing. - -- `lsmod` - - Show information about the currently installed OS modules. This information - includes: - - - The module name assigned to the module when it was installed (`NAME`, - string). - - The address of the module initialization function (`INIT`, hexadecimal). - - The address of the module un-initialization function (`UNINIT`, - hexadecimal). - - An argument that will be passed to the module un-initialization function - (`ARG`, hexadecimal). - - The start of the `.text` memory region (`TEXT`, hexadecimal). - - The size of the `.text` memory region size (`SIZE`, decimal). - - The start of the `.bss`/`.data` memory region (`DATA`, hexadecimal). - - The size of the `.bss`/`.data` memory region size (`SIZE`, decimal). - - **Example**: - - ``` - nsh> lsmod - NAME INIT UNINIT ARG TEXT SIZE DATA SIZE - mydriver 20404659 20404625 0 20404580 552 204047a8 0 - ``` - -- `md5 [-f] <string or filepath>` - -- `mb <hex-address>[=<hex-value>][ <hex-byte-count>]` - `mh <hex-address>[=<hex-value>][ <hex-byte-count>]` - `mw <hex-address>[=<hex-value>][ <hex-byte-count>]` - - Access memory using byte size access (`mb`), 16-bit accesses (`mh`), - or 32-bit access (`mw`). In each case, - - - `<hex-address>`. Specifies the address to be accessed. The current value at - that address will always be read and displayed. - - `<hex-address>=<hex-value>`. Read the value, then write `<hex-value>` to the - location. - - `<hex-byte-count>`. Perform the `mb`, `mh`, or `mw` operation on a total of - `<hex-byte-count>` bytes, increment the `<hex-address>` appropriately - after each access - - **Example**: - - ``` - nsh> mh 0 16 - 0 = 0x0c1e - 2 = 0x0100 - 4 = 0x0c1e - 6 = 0x0110 - 8 = 0x0c1e - a = 0x0120 - c = 0x0c1e - e = 0x0130 - 10 = 0x0c1e - 12 = 0x0140 - 14 = 0x0c1e - nsh> - ``` - -- `mkdir <path>` - - Create the directory at `<path>`. All components of of `<path>` except the - final directory name must exist on a mounted file system; the final directory - must not. - - Recall that NuttX uses a pseudo file system for its root file system. The - `mkdir` command can only be used to create directories in volumes set up with - the `mount` command; it cannot be used to create directories in the pseudo file - system. - - **Example**: - - ``` - nsh> mkdir /mnt/fs/tmp - nsh> ls -l /mnt/fs - /mnt/fs: - drw-rw-rw- 0 TESTDIR/ - drw-rw-rw- 0 TMP/ - nsh> - ``` - -- `mkfatfs [-F <fatsize>] [-r <rootdirentries>] <block-driver>` - - Format a `fat` file system on the block device specified by `<block-driver>` - path. The FAT size may be provided as an option. Without the `<fatsize>` - option, mkfatfs will select either the FAT12 or FAT16 format. For historical - reasons, if you want the FAT32 format, it must be explicitly specified on the - command line. - - The `-r` option may be specified to select the the number of entries in the - root directory. Typical values for small volumes would be `112` or `224`; - `512` should be used for large volumes, such as hard disks or very large SD - cards. The default is `512` entries in all cases. - - The reported number of root directory entries used with FAT32 is zero because - the FAT32 root directory is a cluster chain. - - NSH provides this command to access the `mkfatfs()` NuttX API. This block - device must reside in the NuttX pseudo file system and must have been created - by some call to `register_blockdriver()` (see `include/nuttx/fs/fs.h`). - -- `mkfifo <path>` - - Creates a FIFO character device anywhere in the pseudo file system, creating - whatever pseudo directories that may be needed to complete the full path. By - convention, however, device drivers are place in the standard `/dev` - directory. After it is created, the FIFO device may be used as any other - device driver. NSH provides this command to access the `mkfifo()` NuttX API. - - **Example**: - - ``` - nsh> ls -l /dev - /dev: - crw-rw-rw- 0 console - crw-rw-rw- 0 null - brw-rw-rw- 0 ram0 - nsh> mkfifo /dev/fifo - nsh> ls -l /dev - ls -l /dev - /dev: - crw-rw-rw- 0 console - crw-rw-rw- 0 fifo - crw-rw-rw- 0 null - brw-rw-rw- 0 ram0 - nsh> - ``` - -- `mkrd [-m <minor>] [-s <sector-size>] <nsectors>` - - Create a ramdisk consisting of `<nsectors>`, each of size `<sector-size>` (or - `512` bytes if `<sector-size>` is not specified). The ramdisk will be - registered as `/dev/ram<minor>`. If `<minor>` is not specified, mkrd will - attempt to register the ramdisk as `/dev/ram0`. - - **Example**: - - ``` - nsh> ls /dev - /dev: - console - null - ttyS0 - ttyS1 - nsh> mkrd 1024 - nsh> ls /dev - /dev: - console - null - ram0 - ttyS0 - ttyS1 - nsh> - ``` - - Once the ramdisk has been created, it may be formatted using the `mkfatfs` - command and mounted using the `mount` command. - - **Example**: - - ``` - nsh> mkrd 1024 - nsh> mkfatfs /dev/ram0 - nsh> mount -t vfat /dev/ram0 /tmp - nsh> ls /tmp - /tmp: - nsh> - ``` - -- `mount [-t <fstype> [-o <options>] <block-device> <dir-path>]` - - The `mount` command performs one of two different operations. If no parameters - are provided on the command line after the `mount` command, then the `mount` - command will enumerate all of the current mountpoints on the console. - - If the mount parameters are provided on the command after the `mount` command, - then the `mount` command will mount a file system in the NuttX pseudo-file - system. `mount` performs a three way association, binding: - - - File system. The `-t <fstype>` option identifies the type of file system - that has been formatted on the `<block-device>`. As of this writing, `vfat` - is the only supported value for `<fstype>` - - - Block Device. The `<block-device>` argument is the full or relative path to - a block driver inode in the pseudo file system. By convention, this is a - name under the `/dev` sub-directory. This `<block-device>` must have been - previously formatted with the same file system type as specified by - `<fstype>` - - - Mount Point. The mount point is the location in the pseudo file system where - the mounted volume will appear. This mount point can only reside in the - NuttX pseudo file system. By convention, this mount point is a subdirectory - under `/mnt`. The `mount` command will create whatever pseudo directories - that may be needed to complete the full path but the full path must not - already exist. - - After the volume has been mounted in the NuttX pseudo file system, it may be - access in the same way as other objects in the file system. - - **Examples**: - - ``` - nsh> ls -l /dev - /dev: - crw-rw-rw- 0 console - crw-rw-rw- 0 null - brw-rw-rw- 0 ram0 - nsh> ls /mnt - nsh: ls: no such directory: /mnt - nsh> mount -t vfat /dev/ram0 /mnt/fs - nsh> ls -l /mnt/fs/testdir - /mnt/fs/testdir: - -rw-rw-rw- 15 TESTFILE.TXT - nsh> echo "This is a test" >/mnt/fs/testdir/example.txt - nsh> ls -l /mnt/fs/testdir - /mnt/fs/testdir: - -rw-rw-rw- 15 TESTFILE.TXT - -rw-rw-rw- 16 EXAMPLE.TXT - nsh> cat /mnt/fs/testdir/example.txt - This is a test - nsh> - - nsh> mount - /etc type romfs - /tmp type vfat - /mnt/fs type vfat - ``` - -- `mv <old-path> <new-path>` - - Rename the file object at `<old-path>` to `<new-path>`. Both paths must - reside in the same mounted file system. - -- `nfsmount <server-address> <mount-point> <remote-path>` - - Mount the remote NFS server directory `<remote-path>` at `<mount-point>` on - the target machine. `<server-address>` is the IP address of the remote server. - -- `nslookup <host-name>` - - Lookup and print the IP address associated with `<host-name>` - -- `passwd <username> <password>` - - Set the password for the existing user `<username>` to `<password>` - -- `pmconfig [stay|relax] [normal|idle|standby|sleep]` - - Control power management subsystem. - -- `poweroff [<n>]` - - Shutdown and power off the system. This command depends on board- specific - hardware support to power down the system. The optional, decimal numeric - argument `<n>` may be included to provide power off mode to board-specific - power off logic. - - **Note**: Supporting both the `poweroff` and `shutdown` commands is redundant. - -- `printf [\xNN] [\n\r\t] [<string|$name> [<string|$name>...]]` - - Copy the sequence of strings, characters and expanded environment variables to - console out (or to a file if the output is re-directed). - - No trailing newline character is added. The escape sequences `\n`, `\r` or - `\t` can be used to add line feed, carriage return or tab character to output, - respectively. - - The hexadecimal escape sequence `\xNN` takes up to two hexadesimal digits to - specify the printed character. - -- `ps` - - Show the currently active threads and tasks. For example: - - ``` - nsh> ps - PID PRI POLICY TYPE NPX STATE EVENT SIGMASK COMMAND - 0 0 FIFO Kthread --- Ready 00000000 Idle Task - 1 128 RR Task --- Running 00000000 init - 2 128 FIFO Task --- Waiting Semaphore 00000000 nsh_telnetmain() - 3 100 RR pthread --- Waiting Semaphore 00000000 <pthread>(21) - nsh> - ``` - - **Note**: This commands depends upon having the `procfs` file system - configured into the system. The procfs file system must also have been mounted - with a command like: - - ```shell - nsh> mount -t procfs /proc - ``` - -- `put [-b|-n] [-f <remote-path>] -h <ip-address> <local-path>` - - Copy the file at <local-address> to the host whose IP address is - identified by <ip-address>. Other options: - - - `-f <remote-path>` - The file will be saved with the same name on the host unless - unless `<local-path>` is provided. - - - `-b|-n` - Selects either binary (_octet_) or test (_netascii_) transfer - mode. Default: text. - -- `pwd` - - Show the current working directory. - - ``` - nsh> cd /dev - nsh> pwd - /dev - nsh> - ``` - - Same as `echo $PWD` - - ``` - nsh> echo $PWD - /dev - nsh> - ``` - -- `readlink <link>` - - Show target of a soft link. - -- `switchboot <image path> - - Switch to the updated or specified boot system. This command depends on - hardware support CONFIG_BOARDCTL_SWITCH_BOOT. `<image path>` point to a - partion or file which contain the firmware to boot. - -- `boot [<image path> [<header size>]]` - - Boot a new firmware image. This command depends on hardware support - CONFIG_BOARDCTL_BOOT_IMAGE. `<image path>` may point to a partion or file - which contain the firmware to boot. The optional, numeric argument - `<header size>` may be useful for skipping metadata information preprended - to the firmware image. - -- `reboot [<n>]` - - Reset and reboot the system immediately. This command depends on hardware - support to reset the system. The optional, decimal numeric argument `<n>` may - be included to provide reboot mode to board-specific reboot logic. - - **Note**: Supporting both the `reboot` and `shutdown` commands is redundant. - -- `rm <file-path>` - - Remove the specified `<file-path>` name from the mounted file system. Recall - that NuttX uses a pseudo file system for its root file system. The `rm` - command can only be used to remove (`unlink`) files in volumes set up with the - `mount` command; it cannot be used to remove names from the pseudo file - system. - - **Example**: - - ``` - nsh> ls /mnt/fs/testdir - /mnt/fs/testdir: - TESTFILE.TXT - EXAMPLE.TXT - nsh> rm /mnt/fs/testdir/example.txt - nsh> ls /mnt/fs/testdir - /mnt/fs/testdir: - TESTFILE.TXT - nsh> - ``` - -- `rmdir <dir-path>` - - Remove the specified `<dir-path>` directory from the mounted file system. - Recall that NuttX uses a pseudo file system for its root file system. The - `rmdir` command can only be used to remove directories from volumes set up - with the `mount` command; it cannot be used to remove directories from the - pseudo file system. - - **Example**: - - ``` - nsh> mkdir /mnt/fs/tmp - nsh> ls -l /mnt/fs - /mnt/fs: - drw-rw-rw- 0 TESTDIR/ - drw-rw-rw- 0 TMP/ - nsh> rmdir /mnt/fs/tmp - nsh> ls -l /mnt/fs - ls -l /mnt/fs - /mnt/fs: - drw-rw-rw- 0 TESTDIR/ - nsh> - ``` - -- `rmmod <module-name>` - - Remove the loadable OS module with the `<module-name>`. **Note**: An OS module - can only be removed if it is not busy. - - **Example**: - - ``` - nsh> lsmod - NAME INIT UNINIT ARG TEXT SIZE DATA SIZE - mydriver 20404659 20404625 0 20404580 552 204047a8 0 - nsh> rmmod mydriver - nsh> lsmod - NAME INIT UNINIT ARG TEXT SIZE DATA SIZE - nsh> - ``` - -- `route ipv4|ipv6` - - Show the contents of routing table for IPv4 or IPv6. - - If only IPv4 or IPv6 is enabled, then the argument is optional but, if - provided, must match the enabled internet protocol version. - -- `rptun start|stop <dev-path>` - - Start or stop the OpenAMP RPC tunnel device at `<dev-path>`. - -- `set [{+|-}{e|x|xe|ex}] [<name> <value>]` - - Set the variable `<name>` to the string `<value>` and or set NSH parser - control options. - - For example, a variable may be set like this: - - ``` - nsh> echo $foobar - - nsh> set foobar foovalue - nsh> echo $foobar - foovalue - nsh> - ``` - - If `CONFIG_NSH_VARS` is selected, the effect of this `set` command is to set - the local NSH variable. Otherwise, the group-wide environment variable will be - set. - - If the local NSH variable has already been 'promoted' to an environment - variable, then the `set` command will set the value of the environment - variable rather than the local NSH variable. - - **Note**: The Bash shell does not work this way. Bash would set the value of - both the local Bash variable and of the environment variable of the same name - to the same value. - - If `CONFIG_NSH_VARS` is selected and no arguments are provided, then the `set` - command will list all list all NSH variables. - - ``` - nsh> set - foolbar=foovalue - ``` - - Set the _exit on error control_ and/or _print a trace_ of commands when - parsing scripts in NSH. The settinngs are in effect from the point of - execution, until they are changed again, or in the case of the init script, - the settings are returned to the default settings when it exits. Included - child scripts will run with the parents settings and changes made in the child - script will effect the parent on return. - - Use `set -e` to enable and `set +e` to disable (ignore) the exit condition - on commands. The default is `-e`. Errors cause script to exit. - - Use `set -x` to enable and `set +x` to disable (silence) printing a trace of - the script commands as they are ececuted. The default is `+x`. No printing of - a trace of script commands as they are executed. - - - Example 1 - no exit on command not found - - ``` - set +e - notacommand - ``` - - - Example 2 - will exit on command not found - - ``` - set -e - notacommand - ``` - - - Example 3 - will exit on command not found, and print a trace of the script commands - - ``` - set -ex - ``` - - - Example 4 - will exit on command not found, and print a trace of the script commands - and set foobar to foovalue. - - ``` - set -ex foobar foovalue - nsh> echo $foobar - foovalue - ``` - -- `shutdown [--reboot]` - - Shutdown and power off the system or, optionally, reset and reboot the system - immediately. This command depends on hardware support to power down or reset - the system; one, both, or neither behavior may be supported. - - **Note**: The `shutdown` command duplicates the behavior of the `poweroff` and - `reboot` commands. - -- `sleep <sec>` - - Pause execution (sleep) of `<sec>` seconds. - -- `source <script-path>` - - Execute the sequence of NSH commands in the file referred to by - `<script-path>`. - -- `telnetd` - - The Telnet daemon may be started either programmatically by calling - `nsh_telnetstart()` or it may be started from the NSH command line using this - `telnetd` command. - - Normally this command would be suppressed without `CONFIG_SYSTEM_TELNETD` - because the Telnet daemon is automatically started in `nsh_main.c`. The - exception is when `CONFIG_NETINIT_NETLOCAL` is selected. IN that case, the - network is not enabled at initialization but rather must be enabled from the - NSH command line or via other applications. - - In that case, calling `nsh_telnetstart()` before the the network is - initialized will fail. - -- `time "<command>"` - - Perform command timing. This command will execute the following `<command>` - string and then show how much time was required to execute the command. Time - is shown with a resolution of 100 microseconds which may be beyond the - resolution of many configurations. Note that the `<command>` must be enclosed - in quotation marks if it contains spaces or other delimiters. - - **Example**: - - ``` - nsh> time "sleep 2" - - 2.0100 sec - nsh> - ``` - - The additional 10 milliseconds in this example is due to the way that the - `sleep` command works: It always waits one system clock tick longer than - requested and this test setup used a 10 millisecond periodic system timer. - Sources of error could include various quantization errors, competing CPU - usage, and the additional overhead of the `time` command execution itself - which is included in the total. - - The reported time is the elapsed time from starting of the command to - completion of the command. This elapsed time may not necessarily be just the - processing time for the command. It may included interrupt level processing, - for example. In a busy system, command processing could be delayed if - pre-empted by other, higher priority threads competing for CPU time. So the - reported time includes all CPU processing from the start of the command to its - finish possibly including unrelated processing time during that interval. - - Notice that: - - ``` - nsh> time "sleep 2 &" - sleep [3:100] - - 0.0000 sec - nsh> - ``` - - Since the `sleep` command is executed in background, the `sleep` command - completes almost immediately. As opposed to the following where the `time` - command is run in background with the `sleep` command: - - ``` - nsh> time "sleep 2" & - time [3:100] - nsh> - 2.0100 sec - ``` - -- `truncate -s <length> <file-path>` - - Shrink or extend the size of the regular file at `<file-path>` to the - specified `<length>`. - - A `<file-path>` argument that does not exist is created. The `<length>` option - is NOT optional. - - If a `<file-path>` is larger than the specified size, the extra data is lost. - If a `<file-path>` is shorter, it is extended and the extended part reads as - zero bytes. - -- `umount <dir-path>` - - Un-mount the file system at mount point `<dir-path>`. The `umount` command can - only be used to un-mount volumes previously mounted using `mount` command. - - **Example**: - - ``` - nsh> ls /mnt/fs - /mnt/fs: - TESTDIR/ - nsh> umount /mnt/fs - nsh> ls /mnt/fs - /mnt/fs: - nsh: ls: no such directory: /mnt/fs - nsh> - ``` - -- `unset <name>` - - Remove the value associated with the variable `<name>`. This will remove the - name-value pair from both the NSH local variables and the group-wide - environment variables. For example: - - ``` - nsh> echo $foobar - foovalue - nsh> unset foobar - nsh> echo $foobar - - nsh> - ``` - -- `uptime [options]` - - Display the current time, how long the system has been running, and the load - average of the system over the last 1, 5, and 15 minutes. - - options: - - -p, show uptime in pretty format - - -h, display this help and exit - - -s, system up since - - **Example**: - - ``` - nsh> uptime - 19:35:01 up 1:40, load average: 0.00, 0.00, 0.00 - nsh> - nsh> - nsh> uptime -s - 2022-09-16 17:54:26 - nsh> - nsh> - nsh> uptime -p - up 1 hour, 40 minutes - nsh> - nsh> - nsh> uptime -h - Usage: - uptime [options] - Options: - -p, show uptime in pretty format - -h, display this help and exit - -s, system up since - nsh> - ``` - -- `urldecode [-f] <string or filepath>` - -- `urlencode [-f] <string or filepath>` - -- `uname [-a | -imnoprsv]` - - Print certain system information. With no options, the output is the same as - `-s`. - - - `-a` Print all information, in the following order, except omit `-p` and - `-i` if unknown: - - `-s`, `-o`, Print the operating system name (NuttX) - - `-n` Print the network node hostname (only available if `CONFIG_NET=y`) - - `-r` Print the kernel release - - `-v` Print the kernel version - - `-m` Print the machine hardware name - - `-i` Print the machine platform name - - `-p` Print "unknown" - -- `useradd <username> <password>` - - Add a new user with `<username>` and `<password>` - -- `userdel <username>` - - Delete the user with the name `<username>` - -- `usleep <usec>` - - Pause execution (sleep) of `<usec>` microseconds. - -- `wget [-o <local-path>] <url>` - - Use HTTP to copy the file at `<url>` to the current directory. Options: - - - `-o <local-path>` The file will be saved relative to the current working - directory and with the same name as on the HTTP server unless `<local-path>` - is provided. - -- `xd <hex-address> <byte-count>` - - Dump <byte-count> bytes of data from address `<hex-address>` - - **Example**: - - ``` - nsh> xd 410e0 512 - Hex dump: - 0000: 00 00 00 00 9c 9d 03 00 00 00 00 01 11 01 10 06 ................ - 0010: 12 01 11 01 25 08 13 0b 03 08 1b 08 00 00 02 24 ....%..........$ - ... - 01f0: 08 3a 0b 3b 0b 49 13 00 00 04 13 01 01 13 03 08 .:.;.I.......... - nsh> - ``` - -## Built-In Commands - -In addition to the commands that are part of NSH listed above, there can be -additional, external _built-in_ applications that can be added to NSH. These are -separately excecuble programs but will appear much like the commands that are a -part of NSH. The primary difference from the user's perspective is that help -information about the built-in applications is not directly available from NSH. -Rather, you will need to execute the application with the -h option to get help -about using the built-in applications. - -There are several built-in appliations in the `apps/` repository. No attempt is -made here to enumerate all of them. But a few of the more common built- in -applications are listed below. - -- `ping [-c <count>] [-i <interval>] <ip-address>` - `ping6 [-c <count>] [-i <interval>] <ip-address>` - - Test the network communication with a remote peer. Example: - - ``` - nsh> 10.0.0.1 - PING 10.0.0.1 56 bytes of data - 56 bytes from 10.0.0.1: icmp_seq=1 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=2 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=3 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=4 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=5 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=6 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=7 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=8 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=9 time=0 ms - 56 bytes from 10.0.0.1: icmp_seq=10 time=0 ms - 10 packets transmitted, 10 received, 0% packet loss, time 10190 ms - nsh> - ``` - - `ping6` differs from `ping` in that it uses IPv6 addressing. - -## NSH Configuration Settings - -The availability of the above commands depends upon features that may or may not -be enabled in the NuttX configuration file. The following table indicates the -dependency of each command on NuttX configuration settings. General -configuration settings are discussed in the NuttX Porting Guide. Configuration -settings specific to NSH as discussed at the bottom of this README file. - -## Command Dependencies on Configuration Settings - - Command | Depends on Configuration -----------|-------------------------- -[ | !`CONFIG_NSH_DISABLESCRIPT` -addroute | `CONFIG_NET` && `CONFIG_NET_ROUTE` -arp | `CONFIG_NET` && `CONFIG_NET_ARP` -base64dec | `CONFIG_NETUTILS_CODECS` && `CONFIG_CODECS_BASE64` -base64enc | `CONFIG_NETUTILS_CODECS` && `CONFIG_CODECS_BASE64` -basename | - -break | !`CONFIG_NSH_DISABLESCRIPT` && !`CONFIG_NSH_DISABLE_LOOPS` -cat | - -cd | !`CONFIG_DISABLE_ENVIRON` -cp | - -dd | - -delroute | `CONFIG_NET` && `CONFIG_NET_ROUTE` -df | !`CONFIG_DISABLE_MOUNTPOINT` -dirname | - -dmesg | `CONFIG_RAMLOG_SYSLOG` -echo | - -env | `CONFIG_FS_PROCFS` && !`CONFIG_DISABLE_ENVIRON` && !`CONFIG_PROCFS_EXCLUDE_ENVIRON` -exec | - -exit | - -export | `CONFIG_NSH_VARS` && !`CONFIG_DISABLE_ENVIRON` -free | - -get | `CONFIG_NET` && `CONFIG_NET_UDP` && MTU >= 558 (see note 1) -help | - -hexdump | - -ifconfig | `CONFIG_NET` && `CONFIG_FS_PROCFS` && !`CONFIG_FS_PROCFS_EXCLUDE_NET` -ifdown | `CONFIG_NET` && `CONFIG_FS_PROCFS` && !`CONFIG_FS_PROCFS_EXCLUDE_NET` -ifup | `CONFIG_NET` && `CONFIG_FS_PROCFS` && !`CONFIG_FS_PROCFS_EXCLUDE_NET` -insmod | `CONFIG_MODULE` -irqinfo | `CONFIG_FS_PROCFS` && `CONFIG_SCHED_IRQMONITOR` -kill | - -losetup | !`CONFIG_DISABLE_MOUNTPOINT` && `CONFIG_DEV_LOOP` -ln | `CONFIG_PSEUDOFS_SOFTLINK` -ls | - -lsmod | `CONFIG_MODULE` && `CONFIG_FS_PROCFS` && !`CONFIG_FS_PROCFS_EXCLUDE_MODULE` -md5 | `CONFIG_NETUTILS_CODECS` && `CONFIG_CODECS_HASH_MD5` -mb,mh,mw | - -mkdir | !`CONFIG_DISABLE_MOUNTPOINT` || !`CONFIG_DISABLE_PSEUDOFS_OPERATIONS` -mkfatfs | !`CONFIG_DISABLE_MOUNTPOINT` && `CONFIG_FSUTILS_MKFATFS` -mkfifo | `CONFIG_PIPES` && `CONFIG_DEV_FIFO_SIZE` > 0 -mkrd | !`CONFIG_DISABLE_MOUNTPOINT` -mount | !`CONFIG_DISABLE_MOUNTPOINT` -mv | !`CONFIG_DISABLE_MOUNTPOINT` || !`CONFIG_DISABLE_PSEUDOFS_OPERATIONS` -nfsmount | !`CONFIG_DISABLE_MOUNTPOINT` && `CONFIG_NET` && `CONFIG_NFS` -nslookup | `CONFIG_LIBC_NETDB` && `CONFIG_NETDB_DNSCLIENT` -password | !`CONFIG_DISABLE_MOUNTPOINT` && `CONFIG_NSH_LOGIN_PASSWD` -pmconfig | `CONFIG_PM` && !`CONFIG_NSH_DISABLE_PMCONFIG` -poweroff | `CONFIG_BOARDCTL_POWEROFF` -printf | - -ps | `CONFIG_FS_PROCFS` && !`CONFIG_FS_PROCFS_EXCLUDE_PROC` -put | `CONFIG_NET` && `CONFIG_NET_UDP` && MTU >= 558 (see note 1,2) -pwd | !`CONFIG_DISABLE_ENVIRON` -readlink | `CONFIG_PSEUDOFS_SOFTLINK` -reboot | `CONFIG_BOARDCTL_RESET` -rm | !`CONFIG_DISABLE_MOUNTPOINT` || !`CONFIG_DISABLE_PSEUDOFS_OPERATIONS` -rmdir | !`CONFIG_DISABLE_MOUNTPOINT` || !`CONFIG_DISABLE_PSEUDOFS_OPERATIONS` -rmmod | `CONFIG_MODULE` -route | `CONFIG_FS_PROCFS` && `CONFIG_FS_PROCFS_EXCLUDE_NET` && <br> !`CONFIG_FS_PROCFS_EXCLUDE_ROUTE` && `CONFIG_NET_ROUTE` && <br> !`CONFIG_NSH_DISABLE_ROUTE` && (`CONFIG_NET_IPv4` || `CONFIG_NET_IPv6`) -rptun | `CONFIG_RPTUN` -set | `CONFIG_NSH_VARS` || !`CONFIG_DISABLE_ENVIRON` -shutdown | `CONFIG_BOARDCTL_POWEROFF` || `CONFIG_BOARDCTL_RESET` -sleep | - -source | !`CONFIG_NSH_DISABLESCRIPT` -test | !`CONFIG_NSH_DISABLESCRIPT` -telnetd | `CONFIG_NSH_TELNET` && `CONFIG_SYSTEM_TELNETD` -time | - -truncate | !`CONFIG_DISABLE_MOUNTPOINT` -umount | !`CONFIG_DISABLE_MOUNTPOINT` -uname | !`CONFIG_NSH_DISABLE_UNAME` -unset | `CONFIG_NSH_VARS` || !`CONFIG_DISABLE_ENVIRON` -uptime | !`CONFIG_NSH_DISABLE_UPTIME` -urldecode | `CONFIG_NETUTILS_CODECS` && `CONFIG_CODECS_URLCODE` -urlencode | `CONFIG_NETUTILS_CODECS` && `CONFIG_CODECS_URLCODE` -useradd | !`CONFIG_DISABLE_MOUNTPOINT` && `CONFIG_NSH_LOGIN_PASSWD` -userdel | !`CONFIG_DISABLE_MOUNTPOINT` && `CONFIG_NSH_LOGIN_PASSWD` -usleep | - -get | `CONFIG_NET` && `CONFIG_NET_TCP` -xd | - - -**Notes**: - -1. Because of hardware padding, the actual MTU required for `put` and `get` - operations size may be larger. -2. Special TFTP server start-up options will probably be required to permit - creation of file for the correct operation of the `put` command. - -In addition, each NSH command can be individually disabled via one of the -following settings. All of these settings make the configuration of NSH -potentially complex but also allow it to squeeze into very small memory -footprints. - -``` -CONFIG_NSH_DISABLE_ADDROUTE, CONFIG_NSH_DISABLE_BASE64DEC, CONFIG_NSH_DISABLE_BASE64ENC, -CONFIG_NSH_DISABLE_BASENAME, CONFIG_NSH_DISABLE_CAT, CONFIG_NSH_DISABLE_CD, -CONFIG_NSH_DISABLE_CP, CONFIG_NSH_DISABLE_DD, CONFIG_NSH_DISABLE_DELROUTE, -CONFIG_NSH_DISABLE_DF, CONFIG_NSH_DISABLE_DIRNAME, CONFIG_NSH_DISABLE_DMESG, -CONFIG_NSH_DISABLE_ECHO, CONFIG_NSH_DISABLE_ENV, CONFIG_NSH_DISABLE_EXEC, -CONFIG_NSH_DISABLE_EXIT, CONFIG_NSH_DISABLE_EXPORT, CONFIG_NSH_DISABLE_FREE, -CONFIG_NSH_DISABLE_GET, CONFIG_NSH_DISABLE_HELP, CONFIG_NSH_DISABLE_HEXDUMP, -CONFIG_NSH_DISABLE_IFCONFIG, CONFIG_NSH_DISABLE_IFUPDOWN, CONFIG_NSH_DISABLE_KILL, -CONFIG_NSH_DISABLE_LOSETUP, CONFIG_NSH_DISABLE_LN, CONFIG_NSH_DISABLE_LS, -CONFIG_NSH_DISABLE_MD5, CONFIG_NSH_DISABLE_MB, CONFIG_NSH_DISABLE_MKDIR, -CONFIG_NSH_DISABLE_MKFATFS, CONFIG_NSH_DISABLE_MKFIFO, CONFIG_NSH_DISABLE_MKRD, -CONFIG_NSH_DISABLE_MH, CONFIG_NSH_DISABLE_MODCMDS, CONFIG_NSH_DISABLE_MOUNT, -CONFIG_NSH_DISABLE_MW, CONFIG_NSH_DISABLE_MV, CONFIG_NSH_DISABLE_NFSMOUNT, -CONFIG_NSH_DISABLE_NSLOOKUP, CONFIG_NSH_DISABLE_PASSWD, CONFIG_NSH_DISABLE_PING6, -CONFIG_NSH_DISABLE_POWEROFF, CONFIG_NSH_DISABLE_PRINTF, CONFIG_NSH_DISABLE_PS, -CONFIG_NSH_DISABLE_PUT, CONFIG_NSH_DISABLE_PWD, CONFIG_NSH_DISABLE_READLINK, -CONFIG_NSH_DISABLE_REBOOT, CONFIG_NSH_DISABLE_RM, CONFIG_NSH_DISABLE_RPTUN, -CONFIG_NSH_DISABLE_RMDIR, CONFIG_NSH_DISABLE_ROUTE, CONFIG_NSH_DISABLE_SET, -CONFIG_NSH_DISABLE_SHUTDOWN, CONFIG_NSH_DISABLE_SLEEP, CONFIG_NSH_DISABLE_SOURCE, -CONFIG_NSH_DISABLE_TEST, CONFIG_NSH_DISABLE_TIME, CONFIG_NSH_DISABLE_TRUNCATE, -CONFIG_NSH_DISABLE_UMOUNT, CONFIG_NSH_DISABLE_UNSET, CONFIG_NSH_DISABLE_UPTIME, -CONFIG_NSH_DISABLE_URLDECODE, CONFIG_NSH_DISABLE_URLENCODE, CONFIG_NSH_DISABLE_USERADD, -CONFIG_NSH_DISABLE_USERDEL, CONFIG_NSH_DISABLE_USLEEP, CONFIG_NSH_DISABLE_WGET, -CONFIG_NSH_DISABLE_XD -``` - -Verbose help output can be suppressed by defining `CONFIG_NSH_HELP_TERSE`. In -that case, the `help` command is still available but will be slightly smaller. - -## Built-in Application Configuration Settings - -All built-in applications require that support for NSH built-in applications has -been enabled. This support is enabled with `CONFIG_BUILTIN=y` and -`CONFIG_NSH_BUILTIN_APPS=y`. - -Application | Depends on Configuration -------------|-------------------------- -ping | `CONFIG_NET` && `CONFIG_NET_ICMP` && `CONFIG_NET_ICMP_SOCKET` && <br> `CONFIG_SYSTEM_PING` -ping6 | `CONFIG_NET` && `CONFIG_NET_ICMPv6` && `CONFIG_NET_ICMPv6_SOCKET` && <br> `CONFIG_SYSTEM_PING6` - -## NSH-Specific Configuration Settings - -The behavior of NSH can be modified with the following settings in the -`boards/<arch>/<chip>/<board>/configs/<config>/defconfig` file: - -- `CONFIG_NSH_READLINE` – Selects the minimal implementation of `readline()`. - This minimal implementation provides on backspace for command line editing. - -- `CONFIG_NSH_CLE` - - Selects the more extensive, EMACS-like command line editor. Select this option - only if (1) you don't mind a modest increase in the FLASH footprint, and (2) - you work with a terminal that support VT100 editing commands. - - Selecting this option will add probably 1.5-2KB to the FLASH footprint. - -- `CONFIG_NSH_BUILTIN_APPS` – Support external registered, _builtin_ - applications that can be executed from the NSH command line (see - `apps/README.md` for more information). - -- `CONFIG_NSH_FILEIOSIZE` – Size of a static I/O buffer used for file access - (ignored if there is no file system). Default is `1024`. - -- `CONFIG_NSH_STRERROR` – `strerror(errno)` makes more readable output but - `strerror()` is very large and will not be used unless this setting is `y`. - This setting depends upon the `strerror()` having been enabled with - `CONFIG_LIBC_STRERROR`. - -- `CONFIG_NSH_LINELEN` – The maximum length of one command line and of one - output line. Default: `80` - -- `CONFIG_NSH_DISABLE_SEMICOLON` – By default, you can enter multiple NSH - commands on a line with each command separated by a semicolon. You can disable - this feature to save a little memory on FLASH challenged platforms. Default: - `n` - -- `CONFIG_NSH_CMDPARMS` - - If selected, then the output from commands, from file applications, and from - NSH built-in commands can be used as arguments to other commands. The entity - to be executed is identified by enclosing the command line in back quotes. For - example, - - ```shell - set FOO `myprogram $BAR` - ``` - - Will execute the program named myprogram passing it the value of the - environment variable `BAR`. The value of the environment variable FOO is then - set output of myprogram on stdout. Because this feature commits significant - resources, it is disabled by default. - - The `CONFIG_NSH_CMDPARMS` interim output will be retained in a temporary file. - Full path to a directory where temporary files can be created is taken from - `CONFIG_LIBC_TMPDIR` and it defaults to `/tmp` if `CONFIG_LIBC_TMPDIR` is not - set. - -- `CONFIG_NSH_MAXARGUMENTS` – The maximum number of NSH command arguments. - Default: `6` - -- `CONFIG_NSH_ARGCAT` - - Support concatenation of strings with environment variables or command - output. For example: - - ```shell - set FOO XYZ - set BAR 123 - set FOOBAR ABC_${FOO}_${BAR} - ``` - - would set the environment variable `FOO` to `XYZ`, `BAR` to `123` and `FOOBAR` - to `ABC_XYZ_123`. If `NSH_ARGCAT` is not selected, then a slightly small FLASH - footprint results but then also only simple environment variables like `$FOO` - can be used on the command line. - -- `CONFIG_NSH_VARS` - - By default, there are no internal NSH variables. NSH will use OS environment - variables for all variable storage. If this option, NSH will also support - local NSH variables. These variables are, for the most part, transparent and - work just like the OS environment variables. The difference is that when you - create new tasks, all of environment variables are inherited by the created - tasks. NSH local variables are not. - - If this option is enabled (and `CONFIG_DISABLE_ENVIRON` is not), then a new - command called 'export' is enabled. The export command works very must like - the set command except that is operates on environment variables. When - `CONFIG_NSH_VARS` is enabled, there are changes in the behavior of certain - commands - - Command | w/o `CONFIG_NSH_VARS` | w/`CONFIG_NSH_VARS` - -----------------|----------------------------------|--------------------- - `set <a> <b>` | Set environment var `a` to `b`. | Set NSH var `a` to `b`. - `set` | Causes an error. | Lists all NSH variables. - `unset <a>` | Unsets environment var `a`. | Unsets both environment var and NSH var `a`. - `export <a> <b>` | Causes an error. | Unsets NSH var `a`. Sets environment var `a` to `b`. - `export <a>` | Causes an error. | Sets environment var `a` to NSH var `b` (or `""`). <br> Unsets local var `a`. - `env` | Lists all environment variables. | Lists all environment variables (only). - -- `CONFIG_NSH_QUOTE` – Enables back-slash quoting of certain characters within - the command. This option is useful for the case where an NSH script is used to - dynamically generate a new NSH script. In that case, commands must be treated - as simple text strings without interpretation of any special characters. - Special characters such as `$`, `` ` ``, `"`, and others must be retained - intact as part of the test string. This option is currently only available is - `CONFIG_NSH_ARGCAT` is also selected. - -- `CONFIG_NSH_NESTDEPTH` – The maximum number of nested `if-then[-else]-fi` - sequences that are permissible. Default: `3` - -- `CONFIG_NSH_DISABLESCRIPT` – This can be set to `y` to suppress support for - scripting. This setting disables the `sh`, `test`, and `[` commands and the - `if-then[-else]-fi` construct. This would only be set on systems where a - minimal footprint is a necessity and scripting is not. - -- `CONFIG_NSH_DISABLE_ITEF` – If scripting is enabled, then then this option can - be selected to suppress support for `if-then-else-fi` sequences in scripts. - This would only be set on systems where some minimal scripting is required but - `if-then-else-fi` is not. - -- `CONFIG_NSH_DISABLE_LOOPS` – If scripting is enabled, then then this option - can be selected suppress support for `while-do-done` and `until-do-done` - sequences in scripts. This would only be set on systems where some minimal - scripting is required but looping is not. - -- `CONFIG_NSH_DISABLEBG` – This can be set to `y` to suppress support for - background commands. This setting disables the `nice` command prefix and the - `&` command suffix. This would only be set on systems where a minimal - footprint is a necessity and background command execution is not. - -- `CONFIG_NSH_MMCSDMINOR` – If the architecture supports an MMC/SD slot and if - the NSH architecture specific logic is present, this option will provide the - MMC/SD minor number, i.e., the MMC/SD block driver will be registered as - `/dev/mmcsdN` where `N` is the minor number. Default is zero. - -- `CONFIG_NSH_ROMFSETC` – Mount a ROMFS file system at `/etc` and provide a - system init script at `/etc/init.d/rc.sysinit` and a startup script at - `/etc/init.d/rcS`. The default system init script will mount a FAT FS RAMDISK - at `/tmp` but the logic is easily extensible. - -- `CONFIG_NSH_CONSOLE` - - If `CONFIG_NSH_CONSOLE` is set to `y`, then a serial console front-end is - selected. - - Normally, the serial console device is a UART and RS-232 interface. However, - if `CONFIG_USBDEV` is defined, then a USB serial device may, instead, be used - if the one of the following are defined: - - - `CONFIG_PL2303` and `CONFIG_PL2303_CONSOLE` - Sets up the Prolifics PL2303 emulation as a console device at - `/dev/console`. - - - `CONFIG_CDCACM` and `CONFIG_CDCACM_CONSOLE` - Sets up the CDC/ACM serial device as a console device at `/dev/console`. - - - `CONFIG_NSH_USBCONSOLE` – If defined, then the an arbitrary USB device may - be used to as the NSH console. In this case, `CONFIG_NSH_USBCONDEV` must be - defined to indicate which USB device to use as the console. - - - `CONFIG_NSH_USBCONDEV` – If `CONFIG_NSH_USBCONSOLE` is set to `y`, then - `CONFIG_NSH_USBCONDEV` must also be set to select the USB device used to - support the NSH console. This should be set to the quoted name of a - read-/write-able USB driver. Default: `/dev/ttyACM0`. - - If there are more than one USB devices, then a USB device minor number may - also need to be provided: - - - `CONFIG_NSH_USBDEV_MINOR` – The minor device number of the USB device. - Default: `0` - - - `CONFIG_NSH_USBKBD` – Normally NSH uses the same device for `stdin`, - `stdout`, and `stderr`. By default, that device is `/dev/console`. If this - option is selected, then NSH will use a USB HID keyboard for stdin. In this - case, the keyboard is connected directly to the target (via a USB host - interface) and the data from the keyboard will drive NSH. NSH output - (`stdout` and `stderr`) will still go to `/dev/console`. - - - `CONFIG_NSH_USBKBD_DEVNAME` – If `NSH_USBKBD` is set to `y`, then - `NSH_USBKBD_DEVNAME` must also be set to select the USB keyboard device used - to support the NSH console input. This should be set to the quoted name of a - read- able keyboard driver. Default: `/dev/kbda`. - - - `CONFIG_NSH_USBDEV_TRACE` – If USB tracing is enabled - (`CONFIG_USBDEV_TRACE`), then NSH can be configured to show the buffered USB - trace data after each NSH command: - - If `CONFIG_NSH_USBDEV_TRACE` is selected, then USB trace data can be - filtered as follows. Default: Only USB errors are traced. - - - `CONFIG_NSH_USBDEV_TRACEINIT` - Show initialization events - - `CONFIG_NSH_USBDEV_TRACECLASS` - Show class driver events - - `CONFIG_NSH_USBDEV_TRACETRANSFERS` - Show data transfer events - - `CONFIG_NSH_USBDEV_TRACECONTROLLER` - Show controller events - - `CONFIG_NSH_USBDEV_TRACEINTERRUPTS` - Show interrupt-related events. - -- `CONFIG_NSH_ALTCONDEV` and `CONFIG_NSH_CONDEV` - - If `CONFIG_NSH_CONSOLE` is set to `y`, then `CONFIG_NSH_ALTCONDEV` may also be - selected to enable use of an alternate character device to support the NSH - console. If `CONFIG_NSH_ALTCONDEV` is selected, then `CONFIG_NSH_CONDEV` holds - the quoted name of a readable/write-able character driver such as: - `CONFIG_NSH_CONDEV="/dev/ttyS1"`. This is useful, for example, to separate the - NSH command line from the system console when the system console is used to - provide debug output. Default: stdin and stdout (probably `/dev/console`) - - **Note 1**: When any other device other than `/dev/console` is used for a - user interface, (1) linefeeds (`\n`) will not be expanded to carriage return - / linefeeds (`\r\n`). You will need to configure your terminal program to - account for this. And (2) input is not automatically echoed so you will have - to turn local echo on. - - **Note 2**: This option forces the console of all sessions to use - `NSH_CONDEV`. Hence, this option only makes sense for a system that supports - only a single session. This option is, in particular, incompatible with - Telnet sessions because each Telnet session must use a different console - device. - -- `CONFIG_NSH_TELNET` – If `CONFIG_NSH_TELNET` is set to `y`, then a TELENET - server front-end is selected. When this option is provided, you may log into - NuttX remotely using telnet in order to access NSH. - -- `CONFIG_NSH_ARCHINIT` – Set if your board provides architecture specific - initialization via the board-interface function `boardctl()`. This function - will be called early in NSH initialization to allow board logic to do such - things as configure MMC/SD slots. - -If Telnet is selected for the NSH console, then we must configure the resources -used by the Telnet daemon and by the Telnet clients. - -- `CONFIG_SYSTEM_TELNETD_PORT` – The telnet daemon will listen on this TCP port - number for connections. Default: `23` -- `CONFIG_SYSTEM_TELNETD_PRIORITY` – Priority of the Telnet daemon. Default: - `SCHED_PRIORITY_DEFAULT` -- `CONFIG_SYSTEM_TELNETD_STACKSIZE` – Stack size allocated for the Telnet - daemon. Default: `2048` -- `CONFIG_SYSTEM_TELNETD_SESSION_PRIORITY` – Priority of the Telnet client. Default: - `SCHED_PRIORITY_DEFAULT` -- `CONFIG_SYSTEM_TELNETD_SESSION_STACKSIZE` – Stack size allocated for the Telnet - client. Default: `3072` - -One or both of CONFIG_NSH_CONSOLE and `CONFIG_NSH_TELNET` must be defined. If -`CONFIG_NSH_TELNET` is selected, then there some other configuration settings -that apply: - -- `CONFIG_NET=y` – Of course, networking must be enabled -- `CONFIG_NET_TCP=y` – TCP/IP support is required for telnet (as well as various - other TCP-related configuration settings). -- `CONFIG_NETINIT_DHCPC` – Obtain the IP address via DHCP. -- `CONFIG_NETINIT_IPADDR` – If `CONFIG_NETINIT_DHCPC` is NOT set, then the - static IP address must be provided. -- `CONFIG_NETINIT_DRIPADDR` – Default router IP address. -- `CONFIG_NETINIT_NETMASK` – Network mask. -- `CONFIG_NETINIT_NOMAC` – Set if your ethernet hardware has no built-in MAC - address. If set, a bogus MAC will be assigned. - -If you use DHCPC, then some special configuration network options are required. -These include: - -- `CONFIG_NET=y` – Of course, networking must be enabled. -- `CONFIG_NET_UDP=y` – UDP support is required for DHCP (as well as various other - UDP-related configuration settings). -- `CONFIG_NET_BROADCAST=y` – UDP broadcast support is needed. -- `CONFIG_NET_ETH_PKTSIZE=650` (or larger). Per RFC2131 (p. 9), the DHCP client - must be prepared to receive DHCP messages of up to `576` bytes (excluding - Ethernet, IP, or UDP headers and FCS). **Note**: Note that the actual MTU - setting will depend upon the specific link protocol. Here Ethernet is - indicated. - -If `CONFIG_NSH_ROMFSETC` is selected, then the following additional -configuration setting apply: - -- `CONFIG_NSH_ROMFSMOUNTPT` – The default mountpoint for the ROMFS volume is - `/etc`, but that can be changed with this setting. This must be a absolute - path beginning with `/`. - -- `CONFIG_NSH_SYSINITSCRIPT` – This is the relative path to the system init - script within the mountpoint. The default is `init.d/rc.sysinit`. This - is a relative path and must not start with `/`. - -- `CONFIG_NSH_INITSCRIPT` – This is the relative path to the startup script - within the mountpoint. The default is `init.d/rcS`. This is a relative path - and must not start with `/`. - -- `CONFIG_NSH_ROMFSDEVNO` – This is the minor number of the ROMFS block device. - The default is `0` corresponding to `/dev/ram0`. - -- `CONFIG_NSH_ROMFSSECTSIZE` – This is the sector size to use with the ROMFS - volume. Since the default volume is very small, this defaults to `64` but - should be increased if the ROMFS volume were to be become large. Any value - selected must be a power of `2`. - -When the default rcS file used when `CONFIG_NSH_ROMFSETC` is selected, it will -mount a FAT FS under `/tmp`. The following selections describe that FAT FS. - -- `CONFIG_NSH_FATDEVNO` – This is the minor number of the FAT FS block device. - The default is `1` corresponding to `/dev/ram1`. - -- `CONFIG_NSH_FATSECTSIZE` – This is the sector size use with the FAT FS. - Default is `512`. - -- `CONFIG_NSH_FATNSECTORS` – This is the number of sectors to use with the FAT - FS. Default is `1024`. The amount of memory used by the FAT FS will be - `CONFIG_NSH_FATSECTSIZE` * `CONFIG_NSH_FATNSECTORS` bytes. - -- `CONFIG_NSH_FATMOUNTPT` – This is the location where the FAT FS will be - mounted. Default is `/tmp`. - -## Common Problems - -Problem: - -``` -The function 'readline' is undefined. -``` - -Usual Cause: - -The following is missing from your `defconfig` file: - -```conf -CONFIG_SYSTEM_READLINE=y -```