You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/09/18 04:16:07 UTC

(nuttx-apps) branch master updated: module/sotest: Try devminor of romdisk

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 dae4d7572 module/sotest: Try devminor of romdisk
dae4d7572 is described below

commit dae4d7572fdbd869b4790268845f2be7b363342c
Author: wangjianyu3 <wa...@xiaomi.com>
AuthorDate: Fri Jun 21 20:12:27 2024 +0800

    module/sotest: Try devminor of romdisk
    
    For case that /dev/ram${EXAMPLES_SOTEST_DEVMINOR}(e.g. /dev/ram0) already exists, and users may not care which device to use.
    
    Signed-off-by: wangjianyu3 <wa...@xiaomi.com>
---
 examples/sotest/Kconfig       | 11 ++++++-----
 examples/sotest/sotest_main.c | 33 ++++++++++++++++++++-------------
 2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/examples/sotest/Kconfig b/examples/sotest/Kconfig
index eae61b5a6..03ca9b962 100644
--- a/examples/sotest/Kconfig
+++ b/examples/sotest/Kconfig
@@ -35,13 +35,14 @@ config EXAMPLES_SOTEST_BUILTINFS
 
 if EXAMPLES_SOTEST_BUILTINFS
 
-config EXAMPLES_SOTEST_DEVMINOR
-	int "ROMFS Minor Device Number"
-	default 0
+config EXAMPLES_SOTEST_DEVMINOR_MAX
+	int "ROMFS Max Minor Device Number"
+	default 5
 	---help---
-		The minor device number of the ROMFS block. For example, the N in /dev/ramN.
+		The max minor device number of the ROMFS block will be tried.
+		For example, from /dev/ram0 to /dev/ramN.
 		Used for registering the RAM block driver that will hold the ROMFS file system
-		containing the SOTEST executables to be tested.  Default: 0
+		containing the SOTEST executables to be tested.  Default: 5
 
 endif # EXAMPLES_SOTEST_BUILTINFS
 
diff --git a/examples/sotest/sotest_main.c b/examples/sotest/sotest_main.c
index 2f63ef60b..de2f5d74e 100644
--- a/examples/sotest/sotest_main.c
+++ b/examples/sotest/sotest_main.c
@@ -71,8 +71,8 @@
 #  define NSECTORS(b)  (((b)+SECTORSIZE-1)/SECTORSIZE)
 #  define BINDIR       "/mnt/romfs"
 
-#  ifndef CONFIG_EXAMPLES_SOTEST_DEVMINOR
-#    define CONFIG_EXAMPLES_SOTEST_DEVMINOR 0
+#  ifndef CONFIG_EXAMPLES_SOTEST_DEVMINOR_MAX
+#    define CONFIG_EXAMPLES_SOTEST_DEVMINOR_MAX 5
 #  endif
 #else
 #  define BINDIR       CONFIG_EXAMPLES_SOTEST_BINDIR
@@ -127,26 +127,33 @@ int main(int argc, FAR char *argv[])
 #ifdef CONFIG_EXAMPLES_SOTEST_BUILTINFS
   /* Create a ROM disk for the ROMFS filesystem */
 
-  desc.minor    = CONFIG_EXAMPLES_SOTEST_DEVMINOR;     /* Minor device number of the ROM disk. */
+  desc.minor    = 0;                                   /* Minor device number of the ROM disk. */
   desc.nsectors = NSECTORS(romfs_img_len);             /* The number of sectors in the ROM disk */
   desc.sectsize = SECTORSIZE;                          /* The size of one sector in bytes */
   desc.image    = (FAR uint8_t *)romfs_img;            /* File system image */
 
-  printf("main: Registering romdisk at /dev/ram%d\n",
-         CONFIG_EXAMPLES_SOTEST_DEVMINOR);
-
-  ret = boardctl(BOARDIOC_ROMDISK, (uintptr_t)&desc);
-
-  if (ret < 0)
+  for (; desc.minor <= CONFIG_EXAMPLES_SOTEST_DEVMINOR_MAX; desc.minor++)
     {
-      fprintf(stderr, "ERROR: romdisk_register failed: %s\n",
-              strerror(errno));
-      exit(EXIT_FAILURE);
+      printf("main: Registering romdisk at /dev/ram%d\n", desc.minor);
+
+      ret = boardctl(BOARDIOC_ROMDISK, (uintptr_t)&desc);
+      if (ret >= 0)
+        {
+          break;
+        }
+
+      if (errno != EEXIST ||
+          desc.minor == CONFIG_EXAMPLES_SOTEST_DEVMINOR_MAX)
+        {
+          fprintf(stderr, "ERROR: romdisk_register failed: %s\n",
+                  strerror(errno));
+          exit(EXIT_FAILURE);
+        }
     }
 
   /* Mount the file system */
 
-  sprintf(devname, SOTEST_DEVPATH_FMT, CONFIG_EXAMPLES_SOTEST_DEVMINOR);
+  sprintf(devname, SOTEST_DEVPATH_FMT, desc.minor);
   printf("main: Mounting ROMFS filesystem at target=%s with source=%s\n",
          BINDIR, devname);