static void test(const char *rda, const char *mnt, const char *file) { static const msdos_format_request_param_t rqdata = { .quick_format = true, .sync_device = true }; rtems_status_code sc; int disk_fd; int rv; sc = rtems_disk_io_initialize(); rtems_test_assert(sc == RTEMS_SUCCESSFUL); disk_fd = open(rda, O_RDWR); rtems_test_assert(disk_fd >= 0); rv = msdos_format(rda, &rqdata); rtems_test_assert(rv == 0); rv = mount_and_make_target_path( rda, mnt, RTEMS_FILESYSTEM_TYPE_DOSFS, RTEMS_FILESYSTEM_READ_WRITE, NULL ); rtems_test_assert(rv == 0); create_file(file); rv = rtems_disk_fd_purge(disk_fd); rtems_test_assert(rv == 0); write_to_file(file, false); rv = rtems_disk_fd_purge(disk_fd); rtems_test_assert(rv == 0); check_file_size(file, 0); write_to_file(file, true); rv = rtems_disk_fd_purge(disk_fd); rtems_test_assert(rv == 0); check_file_size(file, 1); rv = unmount(mnt); rtems_test_assert(rv == 0); rv = close(disk_fd); rtems_test_assert(rv == 0); } static void Init(rtems_task_argument arg) { puts("\n\n*** TEST FSDOSFSSYNC 1 ***"); test("/dev/rda", "/mnt", "/mnt/file"); puts("*** END OF TEST FSDOSFSSYNC 1 ***"); rtems_test_exit(0); }
static void mount_device_with_defaults( const char *start_dir ) { int rc; rc = msdos_format( RAMDISK_PATH, &rqdata ); rtems_test_assert( rc == 0 ); rtems_resource_snapshot_take( &before_mount ); mount_device( start_dir, NULL ); }
static void mount_device_with_iconv( const char *start_dir, rtems_dosfs_mount_options *mount_opts ) { int rc; rc = msdos_format( RAMDISK_PATH, &rqdata ); rtems_test_assert( rc == 0 ); rtems_resource_snapshot_take( &before_mount ); mount_opts->converter = rtems_dosfs_create_utf8_converter( "CP850" ); rtems_test_assert( mount_opts->converter != NULL ); mount_device( start_dir, mount_opts ); }
void test_initialize_filesystem(void) { int rc=0; rc = mkdir (BASE_FOR_TEST,S_IRWXU|S_IRWXG|S_IRWXO); rtems_test_assert(rc==0); init_ramdisk(); rc=msdos_format(RAMDISK_PATH,&rqdata); rtems_test_assert(rc==0); rtems_resource_snapshot_take(&before_mount); rc=mount(RAMDISK_PATH, BASE_FOR_TEST, "dosfs", RTEMS_FILESYSTEM_READ_WRITE, NULL); rtems_test_assert(rc==0); }
static void format_and_mount( const char *dev_name, const char *mount_dir ) { static const msdos_format_request_param_t rqdata = { .sectors_per_cluster = SECTORS_PER_CLUSTER, .quick_format = true }; int rv; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); rv = mount( dev_name, mount_dir, RTEMS_FILESYSTEM_TYPE_DOSFS, RTEMS_FILESYSTEM_READ_WRITE, NULL ); rtems_test_assert( rv == 0 ); } static void do_fsync( const char *file ) { int rv; int fd; fd = open( file, O_RDONLY ); rtems_test_assert( fd >= 0 ); rv = fsync( fd ); rtems_test_assert( rv == 0 ); rv = close( fd ); rtems_test_assert( rv == 0 ); }
static void test( void ) { rtems_status_code sc; int rv; const char dev_name[] = "/dev/rda"; const char mount_dir[] = "/mnt"; msdos_format_request_param_t rqdata; rtems_blkdev_bnum media_block_count; memset( &rqdata, 0, sizeof( rqdata ) ); sc = rtems_disk_io_initialize(); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rv = mkdir( mount_dir, S_IRWXU | S_IRWXG | S_IRWXO ); rtems_test_assert( 0 == rv ); /* FAT12 */ /* For 1.44 MB disks */ sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 64, 2880, 0 ); rtems_test_assert( RTEMS_SUCCESSFUL == sc ); /* Optimized for disk space */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 1; rqdata.fat_num = 1; rqdata.files_per_root_dir = 32; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = true; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE, 1 ); test_file_creation( dev_name, mount_dir, rqdata.files_per_root_dir ); /* Try formatting with invalid values */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 1; rqdata.fat_num = 7; /* Invalid number of fats */ rqdata.files_per_root_dir = 32; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = true; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv != 0 ); rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 1; rqdata.fat_num = 1; rqdata.files_per_root_dir = 32; rqdata.media = 0x11; /* Invalid media code */ rqdata.quick_format = true; rqdata.skip_alignment = true; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv != 0 ); /* Optimized for read/write speed */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 8; rqdata.fat_num = 0; rqdata.files_per_root_dir = 0; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = false; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * rqdata.sectors_per_cluster, rqdata.sectors_per_cluster ); /* The same disk formatted with FAT16 because sectors per cluster is too high * for FAT12 */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 16; rqdata.fat_num = 1; rqdata.files_per_root_dir = 32; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = false; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * rqdata.sectors_per_cluster, rqdata.sectors_per_cluster ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); /* Largest FAT12 disk */ sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 64, ( FAT12_MAX_CLN * FAT12_DEFAULT_SECTORS_PER_CLUSTER ) - 1L, 0 ); rtems_test_assert( RTEMS_SUCCESSFUL == sc ); /* Default parameters (corresponds to optimization for read/write speed) */ rv = msdos_format( dev_name, NULL ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * FAT12_DEFAULT_SECTORS_PER_CLUSTER, FAT12_DEFAULT_SECTORS_PER_CLUSTER ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); /* FAT16 */ sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 1024, ( FAT12_MAX_CLN * FAT12_DEFAULT_SECTORS_PER_CLUSTER ) + 1L, 0 ); rtems_test_assert( RTEMS_SUCCESSFUL == sc ); /* Optimized for disk space */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 1; rqdata.fat_num = 1; rqdata.files_per_root_dir = 32; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = true; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, rqdata.sectors_per_cluster * SECTOR_SIZE, rqdata.sectors_per_cluster ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 1024, ( FAT16_MAX_CLN * FAT16_DEFAULT_SECTORS_PER_CLUSTER ) - 1L, 0 ); rtems_test_assert( RTEMS_SUCCESSFUL == sc ); /* Optimized for read/write speed */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 64; rqdata.fat_num = 0; rqdata.files_per_root_dir = 0; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = false; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * rqdata.sectors_per_cluster, rqdata.sectors_per_cluster ); /* Default parameters (corresponds to optimization for read/write speed) */ rv = msdos_format( dev_name, NULL ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * FAT16_DEFAULT_SECTORS_PER_CLUSTER, FAT16_DEFAULT_SECTORS_PER_CLUSTER ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 1024, ( FAT16_MAX_CLN + 10 ) * 64, 0 ); rtems_test_assert( RTEMS_SUCCESSFUL == sc ); rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 64; rqdata.fat_num = 0; rqdata.files_per_root_dir = 0; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = false; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * rqdata.sectors_per_cluster, rqdata.sectors_per_cluster ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); /* Format some disks from 1MB up to 128GB */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 64; rqdata.fat_num = 0; rqdata.files_per_root_dir = 0; rqdata.media = 0; rqdata.quick_format = true; rqdata.skip_alignment = false; for ( media_block_count = 1 * 1024 * ( 1024 / SECTOR_SIZE ); media_block_count <= 128 * 1024 * 1024 * ( 1024 / SECTOR_SIZE ); media_block_count *= 2 ) { sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 64, media_block_count, 0 ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * rqdata.sectors_per_cluster, rqdata.sectors_per_cluster ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); } /* FAT32 */ sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 1024, ( FAT16_MAX_CLN * FAT16_DEFAULT_SECTORS_PER_CLUSTER ) + 41L, 0 ); rtems_test_assert( RTEMS_SUCCESSFUL == sc ); /* Default parameters */ rv = msdos_format( dev_name, NULL ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE, 1 ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); sc = rtems_sparse_disk_create_and_register( dev_name, SECTOR_SIZE, 1024, ( FAT16_MAX_CLN + 20 ) * 64L, 0 ); rtems_test_assert( RTEMS_SUCCESSFUL == sc ); /* Optimized for read/write speed */ rqdata.OEMName = NULL; rqdata.VolLabel = NULL; rqdata.sectors_per_cluster = 64; rqdata.fat_num = 0; rqdata.files_per_root_dir = 0; rqdata.media = 0; /* Media code. 0 == Default */ rqdata.quick_format = true; rqdata.skip_alignment = false; rv = msdos_format( dev_name, &rqdata ); rtems_test_assert( rv == 0 ); test_disk_params( dev_name, mount_dir, SECTOR_SIZE, SECTOR_SIZE * rqdata.sectors_per_cluster, rqdata.sectors_per_cluster ); rv = unlink( dev_name ); rtems_test_assert( rv == 0 ); }
static int init_ide() { int rc = 0; char buf[512]; #ifndef COMBO_RTEMS rtems_status_code sc = RTEMS_SUCCESSFUL; size_t abort_index = 0; #ifndef FAT_BENCH rtems_rfs_format_config rfs_config = { .block_size = 0, /* The size of a block. */ .group_blocks = 0, /* The number of blocks in a group. */ .group_inodes = 0, /* The number of inodes in a group. */ .inode_overhead = 0, /* The percentage overhead allocated to inodes. */ .max_name_length = 0, /* The maximum length of a name. */ .initialise_inodes = 0, /* Initialise the inode tables to all ones. */ .verbose = 1 /* Is the format verbose. */ }; #endif #endif #ifdef COMBO_RTEMS printk(".. COMBO RTEMS ..\n"); #else printk(".. VANILLA RTEMS ..\n"); #endif #ifdef FAT_BENCH printk(".. FAT benchmarking. Preparing/formatting partition\n"); #ifdef FORMAT_ENABLE rc = msdos_format("/dev/hda", NULL); if (rc != 0) printk(".. msdos_format(/dev/hda) failed: %s\n", strerror(errno)); else printk(".. msdos_format is OK\n"); #endif #else printk(".. RFS benchmarking. Preparing/formatting disk\n"); #if 0 { int i; #define PARTITION_COUNT 1 rtems_bdpart_partition created_partitions[PARTITION_COUNT]; static const rtems_bdpart_format format = { .mbr = { .type = RTEMS_BDPART_FORMAT_MBR, .disk_id = 0xdeadbeef, .dos_compatibility = false } }; static const unsigned distribution[PARTITION_COUNT] = { 1 }; memset(&created_partitions[0], 0, sizeof(created_partitions)); for (i = 0; i < PARTITION_COUNT; ++i) { rtems_bdpart_to_partition_type(RTEMS_BDPART_MBR_EMPTY, created_partitions[i].type); } sc = rtems_bdpart_create("/dev/hda", &format, &created_partitions[0], &distribution[0], PARTITION_COUNT); if (sc != 0) printk(".. rtems_bdpart_create(/dev/hda) failed: %s\n", strerror(errno)); else printk(".. rtems_bdpart_create() is OK\n"); sc = rtems_bdpart_write("/dev/hda", &format, &created_partitions[0], PARTITION_COUNT); if (sc != 0) printk(".. rtems_bdpart_write(/dev/hda) failed: %s\n", strerror(errno)); else printk(".. rtems_bdpart_write() is OK\n"); } #endif #ifdef FORMAT_ENABLE rc = rtems_rfs_format("/dev/hda", &rfs_config); if (rc != 0) printk(".. rfs_format(/dev/hda) failed: %s\n", strerror(errno)); else printk(".. rfs_format is OK\n"); #endif #endif /* FAT_BENCH */ /* Create a mount point folder */ rc = mkdir("/mnt", 0777); if(rc == -1) { printk("mkdir failed: %s\n", strerror(errno)); exit(3); } #ifdef COMBO_RTEMS /* Some checking needed for combo version only */ rc = open(DEVNAME, O_RDWR); if(rc == -1) { printk("dev open failed: %s\n", strerror(errno)); exit(1); } if(read(rc, buf, 512) != 512) { printk("dev read failed: %s\n", strerror(errno)); exit(2); } close(rc); /* end of checking */ #if 0 rc = rtems_ide_part_table_initialize(DEVNAME); if(rc != RTEMS_SUCCESSFUL) { printk("ide_part_table failed: %i\n", rc); exit(4); } #endif rc = rtems_fsmount(&fs_table, 1, NULL); if(rc != 1) { printk("rtems_fsmount failed: %i\n", rc); exit(5); } #else #if 0 sc = rtems_bdpart_register_from_disk("/dev/hda"); if (sc != RTEMS_SUCCESSFUL) { printk("read partition table failed: %s\n", rtems_status_text(sc)); exit(4); } else { printk(".. partition table of \"/dev/hda\" is OK\n"); } #endif rc = rtems_fsmount(fstab, sizeof(fstab) / sizeof(fstab [0]), &abort_index); if (rc != 0) { printk("mount failed: %s\n", strerror(errno)); exit(5); } else { printk(".. %s() returns OK\n", __FUNCTION__); } if (abort_index) printf("mount aborted at %zu\n", abort_index); #endif printf(".. CompactFlash logical disk has been mounted\n"); return 0; } static int iozone_func(int argc, char** argv) { return main_iozone(argc, argv); } static rtems_shell_cmd_t iozone_cmd = { "iozone", /* name */ "execute iozone", /* help text */ "misc", /* topic */ iozone_func, /* function */ NULL, /* alias */ NULL /* next */ }; /* initialize shell, network and telnet */ static void init_telnetd() { rtems_status_code rc; rtems_termios_initialize(); rtems_initialize_network(); rtems_telnetd_initialize(); #ifdef COMBO_RTEMS rc = rtems_shell_init("SHll", 32000, 100, "/dev/tty1", 1, 0); #else rc = rtems_shell_init("SHll", 32000, 100, "/dev/tty1", 1, 0, NULL); #endif if(rc != RTEMS_SUCCESSFUL) printk("init shell on console failed\n"); }