apps/examples/random: Add a test for /dev/random

This commit is contained in:
Gregory Nutt 2013-10-20 11:37:56 -06:00
parent bf17953959
commit a976360e0d
9 changed files with 314 additions and 9 deletions

View File

@ -684,6 +684,7 @@
* apps/Makefile: Need to include external/Make.defs if we want * apps/Makefile: Need to include external/Make.defs if we want
allow external applications to participate in the NuttX allow external applications to participate in the NuttX
configuration. Suggested by gdi@embedders.org (2013-10-14). configuration. Suggested by gdi@embedders.org (2013-10-14).
* apps/examplex/cc3300: Updates as part of larger re-organizaion * apps/examples/cc3300: Updates as part of larger re-organizaion
of CC3000 logic by David Sidrane (2013-10-16). of CC3000 logic by David Sidrane (2013-10-16).
* apps/examples/random: Add a simple test that dumps values from
/dev/random (2013-10-20).

View File

@ -42,6 +42,7 @@ source "$APPSDIR/examples/poll/Kconfig"
source "$APPSDIR/examples/pwm/Kconfig" source "$APPSDIR/examples/pwm/Kconfig"
source "$APPSDIR/examples/posix_spawn/Kconfig" source "$APPSDIR/examples/posix_spawn/Kconfig"
source "$APPSDIR/examples/qencoder/Kconfig" source "$APPSDIR/examples/qencoder/Kconfig"
source "$APPSDIR/examples/random/Kconfig"
source "$APPSDIR/examples/relays/Kconfig" source "$APPSDIR/examples/relays/Kconfig"
source "$APPSDIR/examples/rgmp/Kconfig" source "$APPSDIR/examples/rgmp/Kconfig"
source "$APPSDIR/examples/romfs/Kconfig" source "$APPSDIR/examples/romfs/Kconfig"

View File

@ -194,6 +194,10 @@ ifeq ($(CONFIG_EXAMPLES_QENCODER),y)
CONFIGURED_APPS += examples/qencoder CONFIGURED_APPS += examples/qencoder
endif endif
ifeq ($(CONFIG_EXAMPLES_RANDOM),y)
CONFIGURED_APPS += examples/random
endif
ifeq ($(CONFIG_EXAMPLES_RELAYS),y) ifeq ($(CONFIG_EXAMPLES_RELAYS),y)
CONFIGURED_APPS += examples/relays CONFIGURED_APPS += examples/relays
endif endif

View File

@ -41,10 +41,10 @@ SUBDIRS = adc buttons can cc3000 cxxtest dhcpd discover elf flash_test
SUBDIRS += ftpc ftpd hello helloxx hidkbd igmp json keypadtest lcdrw SUBDIRS += ftpc ftpd hello helloxx hidkbd igmp json keypadtest lcdrw
SUBDIRS += mm modbus mount mtdpart nettest nrf24l01_term nsh null nx SUBDIRS += mm modbus mount mtdpart nettest nrf24l01_term nsh null nx
SUBDIRS += nxconsole nxffs nxflat nxhello nximage nxlines nxtext ostest SUBDIRS += nxconsole nxffs nxflat nxhello nximage nxlines nxtext ostest
SUBDIRS += pashello pipe poll posix_spawn pwm qencoder relays rgmp romfs SUBDIRS += pashello pipe poll posix_spawn pwm qencoder random relays rgmp
SUBDIRS += sendmail serloop slcd smart smart_test tcpecho telnetd thttpd tiff SUBDIRS += romfs sendmail serloop slcd smart smart_test tcpecho telnetd
SUBDIRS += touchscreen udp uip usbserial usbterm watchdog wget wgetjson SUBDIRS += thttpd tiff touchscreen udp uip usbserial usbterm watchdog
SUBDIRS += xmlrpc SUBDIRS += wget wgetjson xmlrpc
# Sub-directories that might need context setup. Directories may need # Sub-directories that might need context setup. Directories may need
# context setup for a variety of reasons, but the most common is because # context setup for a variety of reasons, but the most common is because
@ -55,9 +55,9 @@ CNTXTDIRS = pwm
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y) ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
CNTXTDIRS += adc can cc3000 cxxtest dhcpd discover flash_test ftpd CNTXTDIRS += adc can cc3000 cxxtest dhcpd discover flash_test ftpd
CNTXTDIRS += hello helloxx json keypadtestmodbus lcdrw mtdpart nettest CNTXTDIRS += hello helloxx json keypadtestmodbus lcdrw mtdpart nettest
CNTXTDIRS += nx nxhello nximage nxlines nxtext nrf24l01_term ostest relays CNTXTDIRS += nx nxhello nximage nxlines nxtext nrf24l01_term ostest random
CNTXTDIRS += qencoder slcd smart_test tcpecho telnetd tiff touchscreen CNTXTDIRS += relays qencoder slcd smart_test tcpecho telnetd tiff
CNTXTDIRS += usbterm watchdog wgetjson CNTXTDIRS += touchscreen usbterm watchdog wgetjson
endif endif
all: nothing all: nothing

View File

@ -1307,6 +1307,28 @@ examples/qencoder
is defined, then this value is the default delay if no other delay is is defined, then this value is the default delay if no other delay is
provided on the command line. Default: 100 milliseconds provided on the command line. Default: 100 milliseconds
examples/random
^^^^^^^^^^^^^^^
This is a very simply test of /dev/random. It simple collects random
numbers and displays them on the console.
Prerequistes:
CONFIG_DEV_RANDOM - Support for /dev/random must be enabled in order
to select this example.
Configuration:
CONFIG_EXAMPLES_RANDOM - Enables the /dev/random test
CONFIG_EXAMPLES_MAXSAMPLES - This is the size of the /dev/random I/O
buffer in units of 32-bit samples. Careful! This buffer is allocated
on the stack as needed! Default 64.
CONFIG_EXAMPLES_NSAMPLES; - When you execute the rand command, a number
of samples ranging from 1 to EXAMPLES_MAXSAMPLES may be specified. If
no argument is specified, this is the default number of samples that\
will be collected and displayed. Default 8
examples/relays examples/relays
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^

11
examples/random/.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
/Make.dep
/.depend
/.built
/*.asm
/*.obj
/*.rel
/*.lst
/*.sym
/*.adb
/*.lib
/*.src

31
examples/random/Kconfig Normal file
View File

@ -0,0 +1,31 @@
#
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
config EXAMPLES_RANDOM
bool "/dev/random test"
default n
depends on DEV_RANDOM
---help---
Enable a simple test of /dev/random
if EXAMPLES_RANDOM
config EXAMPLES_MAXSAMPLES
int "I/O buffer size"
default 64
---help---
This is the size of the /dev/random I/O buffer in units of 32-bit
samples. Careful! This buffer is allocated on the stack as needed!
config EXAMPLES_NSAMPLES;
int "Default samples"
default 8
---help---
When you execute the rand command, a number of samples ranging from
1 to EXAMPLES_MAXSAMPLES may be specified. If no argument is
specified, this is the default number of samples that will be
collected and displayed.
endif

107
examples/random/Makefile Normal file
View File

@ -0,0 +1,107 @@
############################################################################
# apps/examples/random/Makefile
#
# Copyright (C) 2008, 2010-2013 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# 3. Neither the name NuttX nor the names of its contributors may be
# used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
-include $(TOPDIR)/.config
-include $(TOPDIR)/Make.defs
include $(APPDIR)/Make.defs
# /dev/random test
APPNAME = rand
PRIORITY = SCHED_PRIORITY_DEFAULT
STACKSIZE = 1024
ASRCS =
CSRCS = random_main.c
AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))
SRCS = $(ASRCS) $(CSRCS)
OBJS = $(AOBJS) $(COBJS)
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
BIN = ..\..\libapps$(LIBEXT)
else
ifeq ($(WINTOOL),y)
BIN = ..\\..\\libapps$(LIBEXT)
else
BIN = ../../libapps$(LIBEXT)
endif
endif
ROOTDEPPATH = --dep-path .
# Common build
VPATH =
all: .built
.PHONY: clean depend distclean
$(AOBJS): %$(OBJEXT): %.S
$(call ASSEMBLE, $<, $@)
$(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
.built: $(OBJS)
$(call ARCHIVE, $(BIN), $(OBJS))
@touch .built
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME)_main.bdat: $(DEPCONFIG) Makefile
$(call REGISTER,$(APPNAME),$(PRIORITY),$(STACKSIZE),$(APPNAME)_main)
context: $(BUILTIN_REGISTRY)$(DELIM)$(APPNAME)_main.bdat
else
context:
endif
.depend: Makefile $(SRCS)
@$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
@touch $@
depend: .depend
clean:
$(call DELFILE, .built)
$(call CLEAN)
distclean: clean
$(call DELFILE, Make.dep)
$(call DELFILE, .depend)
-include Make.dep

View File

@ -0,0 +1,128 @@
/****************************************************************************
* examples/random/random_main.c
*
* Copyright (C) 2013 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <debug.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
#ifndef CONFIG_EXAMPLES_MAXSAMPLES
# define CONFIG_EXAMPLES_MAXSAMPLES 64
#endif
#ifndef CONFIG_EXAMPLES_NSAMPLES
# define CONFIG_EXAMPLES_NSAMPLES 8
#endif
#if CONFIG_EXAMPLES_NSAMPLES > CONFIG_EXAMPLES_MAXSAMPLES
# warning CONFIG_EXAMPLES_NSAMPLES > CONFIG_EXAMPLES_MAXSAMPLES
# undef CONFIG_EXAMPLES_NSAMPLES
# define CONFIG_EXAMPLES_NSAMPLES CONFIG_EXAMPLES_MAXSAMPLES
#endif
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* rand_main
****************************************************************************/
int rand_main(int argc, char *argv[])
{
uint32_t buffer[CONFIG_EXAMPLES_MAXSAMPLES];
int nsamples = CONFIG_EXAMPLES_NSAMPLES;
ssize_t nread;
int fd;
/* One argument is possible... the number of samples to collect */
if (argc > 1)
{
nsamples = atoi(argv[1]);
}
/* Clip the numer of samples to the configured buffer size */
if (nsamples > CONFIG_EXAMPLES_MAXSAMPLES)
{
nsamples = CONFIG_EXAMPLES_MAXSAMPLES;
}
/* Open /dev/random */
fd = open("/dev/random", O_RDONLY);
if (fd < 0)
{
int errcode = errno;
fprintf(stderr, "ERROR: Failed to open /dev/random: %d\n", errcode);
exit(EXIT_FAILURE);
}
/* Read the requested number of samples */
printf("Reading %d random numbers\n", nsamples);
nread = read(fd, buffer, nsamples * sizeof(uint32_t));
if (nread < 0)
{
int errcode = errno;
fprintf(stderr, "ERROR: Read from /dev/randon failed: %d\n", errcode);
(void)close(fd);
exit(EXIT_FAILURE);
}
/* Dump the sample buffer */
lib_dumpbuffer("Random values", (FAR const uint8_t*)buffer, nread);
(void)close(fd);
return EXIT_SUCCESS;
}