コード例 #1
0
static rtems_task Init(rtems_task_argument argument)
{
  rtems_status_code sc = RTEMS_SUCCESSFUL;
  rtems_bdbuf_buffer *bd = NULL;

  printk("\n\n*** TEST BLOCK 2 ***\n");

  sc = rtems_disk_io_initialize();
  ASSERT_SC(sc);

  sc = ramdisk_register(BLOCK_SIZE_A, BLOCK_COUNT_A, false, "/dev/rda", &dev_a);
  ASSERT_SC(sc);

  sc = ramdisk_register(BLOCK_SIZE_B, BLOCK_COUNT_B, false, "/dev/rdb", &dev_b);
  ASSERT_SC(sc);

  sc = rtems_task_create(
    rtems_build_name(' ', 'L', 'O', 'W'),
    PRIORITY_LOW,
    0,
    RTEMS_DEFAULT_MODES,
    RTEMS_DEFAULT_ATTRIBUTES,
    &task_id_low
  );
  ASSERT_SC(sc);

  sc = rtems_task_start(task_id_low, task_low, 0);
  ASSERT_SC(sc);

  sc = rtems_task_create(
    rtems_build_name('H', 'I', 'G', 'H'),
    PRIORITY_HIGH,
    0,
    RTEMS_DEFAULT_MODES,
    RTEMS_DEFAULT_ATTRIBUTES,
    &task_id_high
  );
  ASSERT_SC(sc);

  sc = rtems_task_start(task_id_high, task_high, 0);
  ASSERT_SC(sc);

  sc = rtems_bdbuf_get(dev_a, 0, &bd);
  ASSERT_SC(sc);

  sc = rtems_bdbuf_sync(bd);
  ASSERT_SC(sc);

  printk("I: sync done: A0\n");

  sync_done = true;

  sc = rtems_task_suspend(RTEMS_SELF);
  ASSERT_SC(sc);
}
コード例 #2
0
void
init_ramdisk (void)
{

  int rc = 0;
  rc = rtems_disk_io_initialize ();
  rtems_test_assert (rc == 0);
  rc = ramdisk_register (RAMDISK_BLOCK_SIZE, RAMDISK_BLOCK_COUNT,
                         false, RAMDISK_PATH, &dev);
  rtems_test_assert (rc == 0);
}
コード例 #3
0
ファイル: init.c プロジェクト: aniwang2013/leon-rtems
static rtems_task Init(rtems_task_argument argument)
{
  rtems_status_code sc = RTEMS_SUCCESSFUL;
  dev_t dev = 0;

  printk("\n\n*** TEST BLOCK 4 ***\n");

  sc = rtems_disk_io_initialize();
  ASSERT_SC(sc);

  sc = ramdisk_register(BLOCK_SIZE, BLOCK_COUNT, false, "/dev/rda", &dev);
  ASSERT_SC(sc);

  dd = rtems_disk_obtain(dev);
  rtems_test_assert(dd != NULL);

  sc = rtems_task_create(
    rtems_build_name(' ', 'L', 'O', 'W'),
    PRIORITY_LOW,
    0,
    RTEMS_DEFAULT_MODES,
    RTEMS_DEFAULT_ATTRIBUTES,
    &task_id_low
  );
  ASSERT_SC(sc);

  sc = rtems_task_start(task_id_low, task_low, 0);
  ASSERT_SC(sc);

  sc = rtems_task_create(
    rtems_build_name('H', 'I', 'G', 'H'),
    PRIORITY_HIGH,
    0,
    RTEMS_DEFAULT_MODES,
    RTEMS_DEFAULT_ATTRIBUTES,
    &task_id_high
  );
  ASSERT_SC(sc);

  sc = rtems_task_start(task_id_high, task_high, 0);
  ASSERT_SC(sc);

  sc = rtems_task_suspend(RTEMS_SELF);
  ASSERT_SC(sc);
}
コード例 #4
0
int usbmsc_archinitialize(void)
{
  uint8_t *pbuffer;
  int ret;

  pbuffer = (uint8_t *)kmm_malloc(BUFFER_SIZE);
  if (!pbuffer)
    {
      lowsyslog(LOG_ERR, "ERROR: Failed to allocate ramdisk of size %d\n",
                BUFFER_SIZE);
      return -ENOMEM;
    }

  /* Register a RAMDISK device to manage this RAM image */

  ret = ramdisk_register(CONFIG_SYSTEM_USBMSC_DEVMINOR1,
                         pbuffer,
                         USBMSC_NSECTORS,
                         USBMSC_SECTORSIZE,
                         RDFLAG_WRENABLED | RDFLAG_FUNLINK);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: create_ramdisk: Failed to register ramdisk at %s: %d\n",
             g_source, -ret);
      kmm_free(pbuffer);
      return ret;
    }

  /* Create a FAT filesystem on the ramdisk */

  ret = mkfatfs(g_source, &g_fmt);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: create_ramdisk: Failed to create FAT filesystem on ramdisk at %s\n",
             g_source);
      /* kmm_free(pbuffer); -- RAM disk is registered */
      return ret;
    }

  return 0;
}
コード例 #5
0
ファイル: up_usbmsc.c プロジェクト: airlink/nuttx
int usbmsc_archinitialize(void)
{
  uint8_t *pbuffer;
  int ret;

  pbuffer = (uint8_t *) malloc (BUFFER_SIZE);
  if (!pbuffer)
    {
      lib_lowprintf ("usbmsc_archinitialize: Failed to allocate ramdisk of size %d\n",
                     BUFFER_SIZE);
      return -ENOMEM;
    }

  /* Register a RAMDISK device to manage this RAM image */
  
  ret = ramdisk_register(CONFIG_EXAMPLES_USBMSC_DEVMINOR1,
                         pbuffer,
                         USBMSC_NSECTORS,
                         USBMSC_SECTORSIZE,
                         true);
  if (ret < 0)
    {
      printf("create_ramdisk: Failed to register ramdisk at %s: %d\n",
             g_source, -ret);
      free(pbuffer);
      return ret;
    }

  /* Create a FAT filesystem on the ramdisk */

  ret = mkfatfs(g_source, &g_fmt);
  if (ret < 0)
    {
      printf("create_ramdisk: Failed to create FAT filesystem on ramdisk at %s\n",
             g_source);
      /* free(pbuffer); -- RAM disk is registered */
      return ret;
    }

  return 0;
}
コード例 #6
0
ファイル: nsh_fscmds.c プロジェクト: aliniger/Firmware_orca
int cmd_mkrd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
{
  const char *fmt;
  uint8_t *buffer;
  uint32_t nsectors;
  bool badarg = false;
  int sectsize = 512;
  int minor = 0;
  int ret;

  /* Get the mount options */

  int option;
  while ((option = getopt(argc, argv, ":m:s:")) != ERROR)
    {
      switch (option)
        {
          case 'm':
            minor = atoi(optarg);
            if (minor < 0 || minor > 255)
              {
                nsh_output(vtbl, g_fmtargrange, argv[0]);
                badarg = true;
              }
            break;

          case 's':
            sectsize = atoi(optarg);
            if (minor < 0 || minor > 16384)
              {
                nsh_output(vtbl, g_fmtargrange, argv[0]);
                badarg = true;
              }
            break;

         case ':':
            nsh_output(vtbl, g_fmtargrequired, argv[0]);
            badarg = true;
            break;

          case '?':
          default:
            nsh_output(vtbl, g_fmtarginvalid, argv[0]);
            badarg = true;
            break;
        }
    }

  /* If a bad argument was encountered, then return without processing the command */

  if (badarg)
    {
      return ERROR;
    }

  /* There should be exactly on parameter left on the command-line */

  if (optind == argc-1)
    {
      nsectors = (uint32_t)atoi(argv[optind]);
    }
  else if (optind >= argc)
    {
      fmt = g_fmttoomanyargs;
      goto errout_with_fmt;
    }
  else
    {
      fmt = g_fmtargrequired;
      goto errout_with_fmt;
    }

  /* Allocate the memory backing up the ramdisk */

  buffer = (uint8_t*)malloc(sectsize * nsectors);
  if (!buffer)
    {
      fmt = g_fmtcmdoutofmemory;
      goto errout_with_fmt;
    }

#ifdef CONFIG_DEBUG_VERBOSE
  memset(buffer, 0, sectsize * nsectors);
#endif
  dbg("RAMDISK at %p\n", buffer);

  /* Then register the ramdisk */

  ret = ramdisk_register(minor, buffer, nsectors, sectsize, true);
  if (ret < 0)
    {
      nsh_output(vtbl, g_fmtcmdfailed, argv[0], "ramdisk_register", NSH_ERRNO_OF(-ret));
      free(buffer);
      return ERROR;
    }
  return ret;

errout_with_fmt:
  nsh_output(vtbl, fmt, argv[0]);
  return ERROR;
}
コード例 #7
0
ファイル: init.c プロジェクト: AlexShiLucky/rtems
static rtems_task Init(rtems_task_argument argument)
{
  rtems_status_code sc = RTEMS_SUCCESSFUL;
  rtems_task_priority cur_prio = 0;
  rtems_bdbuf_buffer *bd = NULL;
  dev_t dev = 0;

  rtems_test_begink();

  sc = rtems_disk_io_initialize();
  ASSERT_SC(sc);

  sc = ramdisk_register(BLOCK_SIZE_A, BLOCK_COUNT, false, "/dev/rda", &dev);
  ASSERT_SC(sc);

  dd = rtems_disk_obtain(dev);
  rtems_test_assert(dd != NULL);

  sc = rtems_task_create(
    rtems_build_name(' ', 'L', 'O', 'W'),
    PRIORITY_LOW,
    0,
    RTEMS_DEFAULT_MODES,
    RTEMS_DEFAULT_ATTRIBUTES,
    &task_id_low
  );
  ASSERT_SC(sc);

  sc = rtems_task_start(task_id_low, task_low, 0);
  ASSERT_SC(sc);

  sc = rtems_task_create(
    rtems_build_name(' ', 'M', 'I', 'D'),
    PRIORITY_MID,
    0,
    RTEMS_DEFAULT_MODES,
    RTEMS_DEFAULT_ATTRIBUTES,
    &task_id_mid
  );
  ASSERT_SC(sc);

  sc = rtems_task_start(task_id_mid, task_mid, 0);
  ASSERT_SC(sc);

  sc = rtems_task_create(
    rtems_build_name('H', 'I', 'G', 'H'),
    PRIORITY_HIGH,
    0,
    RTEMS_DEFAULT_MODES,
    RTEMS_DEFAULT_ATTRIBUTES,
    &task_id_high
  );
  ASSERT_SC(sc);

  sc = rtems_task_start(task_id_high, task_high, 0);
  ASSERT_SC(sc);

  sc = rtems_task_suspend(task_id_mid);
  ASSERT_SC(sc);

  sc = rtems_task_suspend(task_id_high);
  ASSERT_SC(sc);

  sc = rtems_bdbuf_get(dd, 1, &bd);
  ASSERT_SC(sc);

  sc = rtems_bdbuf_release(bd);
  ASSERT_SC(sc);

  printk("I: try access: 0\n");

  sc = rtems_bdbuf_get(dd, 0, &bd);
  ASSERT_SC(sc);

  printk("I: access: 0\n");

  sc = rtems_task_set_priority(RTEMS_SELF, PRIORITY_IDLE, &cur_prio);
  ASSERT_SC(sc);

  sc = rtems_task_resume(task_id_high);
  ASSERT_SC(sc);

  sc = rtems_task_resume(task_id_mid);
  ASSERT_SC(sc);

  sc = rtems_task_set_priority(RTEMS_SELF, PRIORITY_INIT, &cur_prio);
  ASSERT_SC(sc);

  printk("I: release: 0\n");

  sc = rtems_bdbuf_release(bd);
  ASSERT_SC(sc);

  printk("I: release done: 0\n");

  rtems_task_delete(RTEMS_SELF);
}
コード例 #8
0
void up_registerblockdevice(void)
{
  ramdisk_register(0, (FAR uint8_t *)up_deviceimage(), NSECTORS,
                   LOGICAL_SECTOR_SIZE, RDFLAG_WRENABLED | RDFLAG_FUNLINK);
}
コード例 #9
0
ファイル: fscmd.c プロジェクト: drashti304/TizenRT
/****************************************************************************
 * Name: tash_mkrd
 *
 * Description:
 *   Make RAM or ROM disk if m is not specified, default is '0' and if s is
 *   not specified, default is 512bytes
 *
 * Usage:
 *   mkrd [-m <minor>] [-s <sector-size>] <nsectors> or mkrd <nsectors>
 ****************************************************************************/
static int tash_mkrd(int argc, char **args)
{
	const char *fmt;
	uint8_t *buffer;
	uint32_t nsectors;
	bool badarg = false;
	int sectsize = 512;
	int minor = 0;
	int ret;

	/* Get the mkrd options */

	int option;
	optind = -1;
	while ((option = getopt(argc, args, ":m:s:")) != ERROR) {
		switch (option) {
		case 'm':
			minor = atoi(optarg);
			if (minor < 0 || minor > 255) {
				FSCMD_OUTPUT(OUT_OF_RANGE, args[0]);
				badarg = true;
			}
			break;

		case 's':
			sectsize = atoi(optarg);
			if (minor < 0 || minor > 16384) {
				FSCMD_OUTPUT(OUT_OF_RANGE, args[0]);
				badarg = true;
			}
			break;

		case ':':
			FSCMD_OUTPUT(MISSING_ARGS, args[0]);
			badarg = true;
			break;

		case '?':
		default:
			FSCMD_OUTPUT(INVALID_ARGS, args[0]);
			badarg = true;
			break;
		}
	}

	/*
	 * If a bad argument was encountered,
	 * then return without processing the command
	 */

	if (badarg) {
		return ERROR;
	}

	/* There should be exactly one parameter left on the command-line */

	if (optind == argc - 1) {
		nsectors = (uint32_t)atoi(args[optind]);
	} else if (optind >= argc) {
		fmt = TOO_MANY_ARGS;
		goto errout_with_fmt;
	} else {
		fmt = MISSING_ARGS;
		goto errout_with_fmt;
	}

	if (nsectors < 1) {
		FSCMD_OUTPUT(INVALID_ARGS, args[0]);
		return ERROR;
	}
	/* Allocate the memory backing up the ramdisk */
	buffer = (uint8_t *)malloc(sectsize * nsectors);
	if (!buffer) {
		fmt = OUT_OF_MEMORY;
		goto errout_with_fmt;
	}
#ifdef CONFIG_DEBUG_VERBOSE
	memset(buffer, 0, sectsize * nsectors);
#endif
	dbg("RAMDISK at %p\n", buffer);

	/* Then register the ramdisk */

	ret = ramdisk_register(minor, buffer, nsectors, sectsize, RDFLAG_WRENABLED | RDFLAG_FUNLINK);
	if (ret < 0) {
		FSCMD_OUTPUT(CMD_FAILED, args[0], "ramdisk_register");
		free(buffer);
		return ERROR;
	}

	return ret;

errout_with_fmt:
	FSCMD_OUTPUT(fmt, args[0]);

	return ERROR;
}