summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2010-02-19 03:23:11 +0000
committerChris Johns <chrisj@rtems.org>2010-02-19 03:23:11 +0000
commitcca94a248bd6ce791b34e9bf3a704b535df3e5ef (patch)
tree395109d3c6dffa253542ecb82be29e6e96cff2f6
parent2010-02-19 Chris Johns <chrisj@rtems.org> (diff)
downloadrtems-cca94a248bd6ce791b34e9bf3a704b535df3e5ef.tar.bz2
2010-02-19 Chris Johns <chrisj@rtems.org>
* libblock/src/diskdevs.c: Create the devices as block devices. * libmisc/shell/main_debugrfs.c, libmisc/shell/main_mkrfs.c, libmisc/shell/main_mount_rfs.c: New. * libmisc/shell/main_msdosfmt.c: Change the command to mkdos and alias the old name. * libmisc/shell/shellconfig.h, libmisc/Makefile.am: Add RFS support. * libfs/src/rfs/rtems-rfs-shell.c, libfs/src/rfs/rtems-rfs-shell.h: Move the format command code into the shell file.
-rw-r--r--cpukit/ChangeLog17
-rw-r--r--cpukit/libblock/src/diskdevs.c9
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-shell.c93
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-shell.h11
-rw-r--r--cpukit/libmisc/Makefile.am5
-rw-r--r--cpukit/libmisc/shell/main_debugrfs.c35
-rw-r--r--cpukit/libmisc/shell/main_mkrfs.c35
-rw-r--r--cpukit/libmisc/shell/main_mount_rfs.c36
-rw-r--r--cpukit/libmisc/shell/main_msdosfmt.c6
-rw-r--r--cpukit/libmisc/shell/shellconfig.h17
10 files changed, 248 insertions, 16 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog
index db91adf397..af9454f41a 100644
--- a/cpukit/ChangeLog
+++ b/cpukit/ChangeLog
@@ -1,3 +1,20 @@
+2010-02-19 Chris Johns <chrisj@rtems.org>
+
+ * libblock/src/diskdevs.c: Create the devices as block devices.
+
+ * libmisc/shell/main_debugrfs.c, libmisc/shell/main_mkrfs.c,
+ libmisc/shell/main_mount_rfs.c: New.
+
+ * libmisc/shell/main_msdosfmt.c: Change the command to mkdos and
+ alias the old name.
+
+ * libmisc/shell/shellconfig.h, libmisc/Makefile.am: Add RFS
+ support.
+
+ * libfs/src/rfs/rtems-rfs-shell.c,
+ libfs/src/rfs/rtems-rfs-shell.h: Move the format command code into
+ the shell file.
+
2010-02-18 Chris Johns <chrisj@rtems.org>
* libfs/src/rfs/rtems-rfs-bitmaps.c,
diff --git a/cpukit/libblock/src/diskdevs.c b/cpukit/libblock/src/diskdevs.c
index d75f2cbca5..1873b35549 100644
--- a/cpukit/libblock/src/diskdevs.c
+++ b/cpukit/libblock/src/diskdevs.c
@@ -199,16 +199,9 @@ create_disk(dev_t dev, const char *name, rtems_disk_device **dd_ptr)
}
if (name != NULL) {
- rtems_device_major_number major = 0;
- rtems_device_minor_number minor = 0;
-
- rtems_filesystem_split_dev_t(dev, major, minor);
-
- sc = rtems_io_register_name(name, major, minor);
- if (sc != RTEMS_SUCCESSFUL) {
+ if (mknod(alloc_name, 0777 | S_IFBLK, dev) < 0) {
free(alloc_name);
free(dd);
-
return RTEMS_UNSATISFIED;
}
}
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-shell.c b/cpukit/libfs/src/rfs/rtems-rfs-shell.c
index b1d25c2c67..1bc979a1ea 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-shell.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-shell.c
@@ -22,6 +22,7 @@
#include <rtems/rfs/rtems-rfs-group.h>
#include <rtems/rfs/rtems-rfs-inode.h>
#include <rtems/rfs/rtems-rfs-dir.h>
+#include <rtems/rtems-rfs-format.h>
#include <sys/statvfs.h>
@@ -608,7 +609,7 @@ rtems_rfs_shell_usage (const char* arg)
}
int
-rtems_rfs_shell_debugrfs (int argc, char *argv[])
+rtems_shell_debugrfs (int argc, char *argv[])
{
const rtems_rfs_shell_cmd table[] =
{
@@ -664,3 +665,93 @@ rtems_rfs_shell_debugrfs (int argc, char *argv[])
return 1;
}
+
+int
+rtems_shell_rfs_format (int argc, char* argv[])
+{
+ rtems_rfs_format_config config;
+ const char* driver = NULL;
+ int arg;
+
+ memset (&config, 0, sizeof (rtems_rfs_format_config));
+
+ for (arg = 1; arg < argc; arg++)
+ {
+ if (argv[arg][0] == '-')
+ {
+ switch (argv[arg][1])
+ {
+ case 'v':
+ config.verbose = true;
+ break;
+
+ case 's':
+ arg++;
+ if (arg >= argc)
+ {
+ printf ("error: block size needs an argument\n");
+ return 1;
+ }
+ config.block_size = strtoul (argv[arg], 0, 0);
+ break;
+
+ case 'b':
+ arg++;
+ if (arg >= argc)
+ {
+ printf ("error: group block count needs an argument\n");
+ return 1;
+ }
+ config.group_blocks = strtoul (argv[arg], 0, 0);
+ break;
+
+ case 'i':
+ arg++;
+ if (arg >= argc)
+ {
+ printf ("error: group inode count needs an argument\n");
+ return 1;
+ }
+ config.group_inodes = strtoul (argv[arg], 0, 0);
+ break;
+
+ case 'I':
+ config.initialise_inodes = true;
+ break;
+
+ case 'o':
+ arg++;
+ if (arg >= argc)
+ {
+ printf ("error: inode percentage overhead needs an argument\n");
+ return 1;
+ }
+ config.inode_overhead = strtoul (argv[arg], 0, 0);
+ break;
+
+ default:
+ printf ("error: invalid option: %s\n", argv[arg]);
+ return 1;
+ }
+ }
+ else
+ {
+ if (!driver)
+ driver = argv[arg];
+ else
+ {
+ printf ("error: only one driver name allowed: %s\n", argv[arg]);
+ return 1;
+ }
+ }
+ }
+
+ if (rtems_rfs_format (driver, &config) < 0)
+ {
+ printf ("error: format of %s failed: %s\n",
+ driver, strerror (errno));
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-shell.h b/cpukit/libfs/src/rfs/rtems-rfs-shell.h
index 31a3dc8266..c07b7c3167 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-shell.h
+++ b/cpukit/libfs/src/rfs/rtems-rfs-shell.h
@@ -30,6 +30,15 @@
* @param argv The argument variables.
* @return int The exit code for the command. A 0 is no error.
*/
-int rtems_rfs_shell_debugrfs (int argc, char *argv[]);
+int rtems_shell_debugrfs (int argc, char *argv[]);
+
+/**
+ * The shell command for formatting an RFS file system.
+ *
+ * @param argc The argument count.
+ * @param argv The argument variables.
+ * @return int The exit code for the command. A 0 is no error.
+ */
+int rtems_shell_rfs_format (int argc, char* argv[]);
#endif
diff --git a/cpukit/libmisc/Makefile.am b/cpukit/libmisc/Makefile.am
index 8955978608..ec0a9d29c5 100644
--- a/cpukit/libmisc/Makefile.am
+++ b/cpukit/libmisc/Makefile.am
@@ -95,8 +95,9 @@ libshell_a_SOURCES = shell/cat_file.c shell/cmds.c shell/internal.h \
shell/dd-misc.c shell/dd-position.c \
shell/main_hexdump.c shell/hexdump-conv.c shell/hexdump-display.c \
shell/hexdump-odsyntax.c shell/hexdump-parse.c shell/hexsyntax.c \
- shell/main_time.c shell/main_mknod.c \
- shell/main_setenv.c shell/main_getenv.c shell/main_unsetenv.c
+ shell/main_time.c shell/main_mknod.c shell/main_mount_rfs.c \
+ shell/main_setenv.c shell/main_getenv.c shell/main_unsetenv.c \
+ shell/main_mkrfs.c shell/main_debugrfs.c
if LIBNETWORKING
libshell_a_SOURCES += shell/main_mount_ftp.c shell/main_mount_tftp.c \
diff --git a/cpukit/libmisc/shell/main_debugrfs.c b/cpukit/libmisc/shell/main_debugrfs.c
new file mode 100644
index 0000000000..5d4052d43a
--- /dev/null
+++ b/cpukit/libmisc/shell/main_debugrfs.c
@@ -0,0 +1,35 @@
+/*
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <rtems.h>
+#include <rtems/shell.h>
+#include <rtems/stringto.h>
+#include <rtems/shellconfig.h>
+#include <rtems/rtems-rfs-shell.h>
+#include <rtems/fsmount.h>
+#include "internal.h"
+
+#define OPTIONS "[-h]"
+
+rtems_shell_cmd_t rtems_shell_DEBUGRFS_Command = {
+ "debugrfs", /* name */
+ "debugrfs " OPTIONS, /* usage */
+ "files", /* topic */
+ rtems_shell_debugrfs, /* command */
+ NULL, /* alias */
+ NULL /* next */
+};
diff --git a/cpukit/libmisc/shell/main_mkrfs.c b/cpukit/libmisc/shell/main_mkrfs.c
new file mode 100644
index 0000000000..726b575b03
--- /dev/null
+++ b/cpukit/libmisc/shell/main_mkrfs.c
@@ -0,0 +1,35 @@
+/*
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <rtems.h>
+#include <rtems/shell.h>
+#include <rtems/stringto.h>
+#include <rtems/shellconfig.h>
+#include <rtems/rtems-rfs-shell.h>
+#include <rtems/fsmount.h>
+#include "internal.h"
+
+#define OPTIONS "[-v] [-s blksz] [-b grpblk] [-i grpinode] [-I] [-o %inode]"
+
+rtems_shell_cmd_t rtems_shell_MKRFS_Command = {
+ "mkrfs", /* name */
+ "mkrfs " OPTIONS " dev", /* usage */
+ "files", /* topic */
+ rtems_shell_rfs_format, /* command */
+ NULL, /* alias */
+ NULL /* next */
+};
diff --git a/cpukit/libmisc/shell/main_mount_rfs.c b/cpukit/libmisc/shell/main_mount_rfs.c
new file mode 100644
index 0000000000..674556afce
--- /dev/null
+++ b/cpukit/libmisc/shell/main_mount_rfs.c
@@ -0,0 +1,36 @@
+/*
+ * Shell Command Implmentation
+ *
+ * Author: Fernando RUIZ CASAS
+ * Work: fernando.ruiz@ctv.es
+ * Home: correo@fernando-ruiz.com
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <rtems.h>
+#include <rtems/shell.h>
+#include <rtems/rtems-rfs.h>
+#include <rtems/fsmount.h>
+#include "internal.h"
+
+rtems_shell_filesystems_t rtems_shell_Mount_RFS = {
+ name: "rfs",
+ driver_needed: 1,
+ fs_ops: &rtems_rfs_ops,
+ mounter: rtems_shell_libc_mounter
+};
+
diff --git a/cpukit/libmisc/shell/main_msdosfmt.c b/cpukit/libmisc/shell/main_msdosfmt.c
index 2f0e7f2c63..fc54966da7 100644
--- a/cpukit/libmisc/shell/main_msdosfmt.c
+++ b/cpukit/libmisc/shell/main_msdosfmt.c
@@ -166,10 +166,10 @@ int rtems_shell_main_msdos_format(
#define OPTIONS "[-v label] [-r size] [-t any/12/16/32]"
rtems_shell_cmd_t rtems_shell_MSDOSFMT_Command = {
- "msdosfmt", /* name */
- "msdosfmt " OPTIONS " path # format disk", /* usage */
+ "mkdos", /* name */
+ "mkdos " OPTIONS " path # format disk", /* usage */
"files", /* topic */
rtems_shell_main_msdos_format, /* command */
- NULL, /* alias */
+ "msdosfmt", /* alias */
NULL /* next */
};
diff --git a/cpukit/libmisc/shell/shellconfig.h b/cpukit/libmisc/shell/shellconfig.h
index 3d731aa0ef..35b08f934a 100644
--- a/cpukit/libmisc/shell/shellconfig.h
+++ b/cpukit/libmisc/shell/shellconfig.h
@@ -50,6 +50,7 @@ extern rtems_shell_cmd_t rtems_shell_RMDIR_Command;
extern rtems_shell_cmd_t rtems_shell_CHROOT_Command;
extern rtems_shell_cmd_t rtems_shell_CHMOD_Command;
extern rtems_shell_cmd_t rtems_shell_CAT_Command;
+extern rtems_shell_cmd_t rtems_shell_MKRFS_Command;
extern rtems_shell_cmd_t rtems_shell_MSDOSFMT_Command;
extern rtems_shell_cmd_t rtems_shell_MV_Command;
extern rtems_shell_cmd_t rtems_shell_RM_Command;
@@ -62,6 +63,7 @@ extern rtems_shell_cmd_t rtems_shell_BLKSYNC_Command;
extern rtems_shell_cmd_t rtems_shell_FDISK_Command;
extern rtems_shell_cmd_t rtems_shell_DD_Command;
extern rtems_shell_cmd_t rtems_shell_HEXDUMP_Command;
+extern rtems_shell_cmd_t rtems_shell_DEBUGRFS_Command;
extern rtems_shell_cmd_t rtems_shell_RTC_Command;
@@ -91,6 +93,7 @@ extern rtems_shell_alias_t *rtems_shell_Initial_aliases[];
/*
* Externs for mount command helpers
*/
+extern rtems_shell_filesystems_t rtems_shell_Mount_RFS;
extern rtems_shell_filesystems_t rtems_shell_Mount_MSDOS;
extern rtems_shell_filesystems_t rtems_shell_Mount_TFTP;
extern rtems_shell_filesystems_t rtems_shell_Mount_FTP;
@@ -292,6 +295,11 @@ extern rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[];
&rtems_shell_CAT_Command,
#endif
#if (defined(CONFIGURE_SHELL_COMMANDS_ALL) && \
+ !defined(CONFIGURE_SHELL_NO_COMMAND_MKRFS)) || \
+ defined(CONFIGURE_SHELL_COMMAND_MKRFS)
+ &rtems_shell_MKRFS_Command,
+ #endif
+ #if (defined(CONFIGURE_SHELL_COMMANDS_ALL) && \
!defined(CONFIGURE_SHELL_NO_COMMAND_MSDOSFMT)) || \
defined(CONFIGURE_SHELL_COMMAND_MSDOSFMT)
&rtems_shell_MSDOSFMT_Command,
@@ -351,6 +359,11 @@ extern rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[];
defined(CONFIGURE_SHELL_COMMAND_HEXDUMP)
&rtems_shell_HEXDUMP_Command,
#endif
+ #if (defined(CONFIGURE_SHELL_COMMANDS_ALL) && \
+ !defined(CONFIGURE_SHELL_NO_COMMAND_DEBUGRFS)) || \
+ defined(CONFIGURE_SHELL_COMMAND_DEBUGRFS)
+ &rtems_shell_DEBUGRFS_Command,
+ #endif
/*
* RTEMS Related commands
@@ -381,7 +394,6 @@ extern rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[];
&rtems_shell_WKSPACE_INFO_Command,
#endif
-
/*
* Malloc family commands
*/
@@ -437,6 +449,9 @@ extern rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[];
!defined(CONFIGURE_SHELL_COMMAND_NO_MOUNT)) || \
defined(CONFIGURE_SHELL_COMMAND_MOUNT)
rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[] = {
+ #if defined(CONFIGURE_SHELL_MOUNT_RFS)
+ &rtems_shell_Mount_RFS,
+ #endif
#if defined(CONFIGURE_SHELL_MOUNT_MSDOS)
&rtems_shell_Mount_MSDOS,
#endif