forked from Imagelibrary/rtems
Documentation. Changed integer types to match block device types.
Added const qualifier whenever possible. Added rtems_fsmount_create_mount_point() prototype.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file rtems/ramdisk.h
|
* @file
|
||||||
* RAM disk block device implementation
|
*
|
||||||
|
* RAM disk block device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -21,33 +22,70 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* RAM disk configuration table entry */
|
/**
|
||||||
|
* @defgroup rtems_ramdisk RAM Disk Device
|
||||||
|
*
|
||||||
|
* @ingroup rtems_blkdev
|
||||||
|
*
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RAM disk configuration table entry.
|
||||||
|
*/
|
||||||
typedef struct rtems_ramdisk_config {
|
typedef struct rtems_ramdisk_config {
|
||||||
int block_size; /* RAM disk block size */
|
/**
|
||||||
int block_num; /* Number of blocks on this RAM disk */
|
* RAM disk block size (must be a power of two).
|
||||||
void *location; /* RAM disk permanent location (out of RTEMS controlled
|
*/
|
||||||
memory), or NULL if RAM disk memory should be
|
uint32_t block_size;
|
||||||
allocated dynamically */
|
|
||||||
|
/**
|
||||||
|
* Number of blocks on this RAM disk.
|
||||||
|
*/
|
||||||
|
rtems_blkdev_bnum block_num;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RAM disk location or @c NULL if RAM disk memory should be allocated
|
||||||
|
* dynamically.
|
||||||
|
*/
|
||||||
|
void *location;
|
||||||
} rtems_ramdisk_config;
|
} rtems_ramdisk_config;
|
||||||
|
|
||||||
/* If application want to use RAM disk, it should specify configuration of
|
/**
|
||||||
* available RAM disks.
|
* External reference to the RAM disk configuration table describing each RAM
|
||||||
* The following is definitions for RAM disk configuration table
|
* disk in the system.
|
||||||
|
*
|
||||||
|
* The configuration table is provided by the application.
|
||||||
*/
|
*/
|
||||||
extern rtems_ramdisk_config rtems_ramdisk_configuration [];
|
extern rtems_ramdisk_config rtems_ramdisk_configuration [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* External reference the size of the RAM disk configuration table
|
||||||
|
* @ref rtems_ramdisk_configuration.
|
||||||
|
*
|
||||||
|
* The configuration table size is provided by the application.
|
||||||
|
*/
|
||||||
extern size_t rtems_ramdisk_configuration_size;
|
extern size_t rtems_ramdisk_configuration_size;
|
||||||
|
|
||||||
/* ramdisk_initialize --
|
/**
|
||||||
* RAM disk driver initialization entry point.
|
* RAM disk driver initialization entry point.
|
||||||
*/
|
*/
|
||||||
rtems_device_driver
|
rtems_device_driver ramdisk_initialize(
|
||||||
ramdisk_initialize(
|
|
||||||
rtems_device_major_number major,
|
rtems_device_major_number major,
|
||||||
rtems_device_minor_number minor,
|
rtems_device_minor_number minor,
|
||||||
void *arg);
|
void *arg
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RAM disk driver table entry.
|
||||||
|
*/
|
||||||
#define RAMDISK_DRIVER_TABLE_ENTRY \
|
#define RAMDISK_DRIVER_TABLE_ENTRY \
|
||||||
{ ramdisk_initialize, RTEMS_GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES }
|
{ \
|
||||||
|
.initialization_entry = ramdisk_initialize, \
|
||||||
|
RTEMS_GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
/* ramdisk.c -- RAM disk block device implementation
|
/**
|
||||||
|
* @file
|
||||||
*
|
*
|
||||||
|
* RAM disk block device.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
* Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
|
* Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
|
||||||
* Author: Victor V. Vengerov <vvv@oktet.ru>
|
* Author: Victor V. Vengerov <vvv@oktet.ru>
|
||||||
*
|
*
|
||||||
@@ -18,9 +23,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "rtems/blkdev.h"
|
#include <rtems/blkdev.h>
|
||||||
#include "rtems/diskdevs.h"
|
#include <rtems/diskdevs.h>
|
||||||
#include "rtems/ramdisk.h"
|
#include <rtems/ramdisk.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Control tracing. It can be compiled out of the code for small
|
* Control tracing. It can be compiled out of the code for small
|
||||||
@@ -30,16 +35,15 @@
|
|||||||
#define RTEMS_RAMDISK_TRACE 0
|
#define RTEMS_RAMDISK_TRACE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RAMDISK_DEVICE_BASE_NAME "/dev/ramdisk"
|
#define RAMDISK_DEVICE_BASE_NAME "/dev/rd"
|
||||||
|
|
||||||
/* Internal RAM disk descriptor */
|
/* Internal RAM disk descriptor */
|
||||||
struct ramdisk {
|
struct ramdisk {
|
||||||
int block_size; /* RAM disk block size */
|
uint32_t block_size; /* RAM disk block size */
|
||||||
int block_num; /* Number of blocks on this RAM disk */
|
rtems_blkdev_bnum block_num; /* Number of blocks on this RAM disk */
|
||||||
void *area; /* RAM disk memory area */
|
void *area; /* RAM disk memory area */
|
||||||
bool initialized; /* RAM disk is initialized */
|
bool initialized; /* RAM disk is initialized */
|
||||||
bool malloced; /* != 0, if memory allocated by malloc for this
|
bool malloced; /* != 0, if memory allocated by malloc for this RAM disk */
|
||||||
RAM disk */
|
|
||||||
#if RTEMS_RAMDISK_TRACE
|
#if RTEMS_RAMDISK_TRACE
|
||||||
int info_level; /* Trace level */
|
int info_level; /* Trace level */
|
||||||
#endif
|
#endif
|
||||||
@@ -242,8 +246,8 @@ ramdisk_initialize(
|
|||||||
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
|
for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++)
|
||||||
{
|
{
|
||||||
dev_t dev = rtems_filesystem_make_dev_t(major, i);
|
dev_t dev = rtems_filesystem_make_dev_t(major, i);
|
||||||
char name[sizeof(RAMDISK_DEVICE_BASE_NAME "0123456789")];
|
char name [] = RAMDISK_DEVICE_BASE_NAME "a";
|
||||||
snprintf(name, sizeof(name), RAMDISK_DEVICE_BASE_NAME "%" PRIu32, i);
|
name [sizeof(RAMDISK_DEVICE_BASE_NAME)] += i;
|
||||||
r->block_size = c->block_size;
|
r->block_size = c->block_size;
|
||||||
r->block_num = c->block_num;
|
r->block_num = c->block_num;
|
||||||
if (c->location == NULL)
|
if (c->location == NULL)
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* File system mount functions.
|
||||||
|
*/
|
||||||
|
|
||||||
/*===============================================================*\
|
/*===============================================================*\
|
||||||
| Project: RTEMS fsmount |
|
| Project: RTEMS fsmount |
|
||||||
+-----------------------------------------------------------------+
|
+-----------------------------------------------------------------+
|
||||||
@@ -38,7 +44,7 @@
|
|||||||
/*=========================================================================*\
|
/*=========================================================================*\
|
||||||
| Function: |
|
| Function: |
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
int rtems_fsmount_create_mountpoint
|
int rtems_fsmount_create_mount_point
|
||||||
(
|
(
|
||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
| Purpose: |
|
| Purpose: |
|
||||||
@@ -113,9 +119,9 @@ int rtems_fsmount
|
|||||||
+---------------------------------------------------------------------------+
|
+---------------------------------------------------------------------------+
|
||||||
| Input Parameters: |
|
| Input Parameters: |
|
||||||
\*-------------------------------------------------------------------------*/
|
\*-------------------------------------------------------------------------*/
|
||||||
const fstab_t *fstab_ptr,
|
const rtems_fstab_entry *fstab_ptr,
|
||||||
int fstab_count,
|
size_t fstab_count,
|
||||||
int *fail_idx
|
size_t *fail_idx
|
||||||
)
|
)
|
||||||
/*-------------------------------------------------------------------------*\
|
/*-------------------------------------------------------------------------*\
|
||||||
| Return Value: |
|
| Return Value: |
|
||||||
@@ -124,7 +130,7 @@ int rtems_fsmount
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
int tmp_rc;
|
int tmp_rc;
|
||||||
int fstab_idx = 0;
|
size_t fstab_idx = 0;
|
||||||
rtems_filesystem_mount_table_entry_t *tmp_mt_entry;
|
rtems_filesystem_mount_table_entry_t *tmp_mt_entry;
|
||||||
bool terminate = false;
|
bool terminate = false;
|
||||||
|
|
||||||
@@ -138,7 +144,7 @@ int rtems_fsmount
|
|||||||
* create mount point
|
* create mount point
|
||||||
*/
|
*/
|
||||||
if (tmp_rc == 0) {
|
if (tmp_rc == 0) {
|
||||||
tmp_rc = rtems_fsmount_create_mountpoint(fstab_ptr->mount_point);
|
tmp_rc = rtems_fsmount_create_mount_point(fstab_ptr->mount_point);
|
||||||
if (tmp_rc != 0) {
|
if (tmp_rc != 0) {
|
||||||
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNTPNT_CRTERR)) {
|
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNTPNT_CRTERR)) {
|
||||||
fprintf(stdout,"fsmount: creation of mount point \"%s\" failed: %s\n",
|
fprintf(stdout,"fsmount: creation of mount point \"%s\" failed: %s\n",
|
||||||
@@ -154,13 +160,13 @@ int rtems_fsmount
|
|||||||
/*
|
/*
|
||||||
* mount device to given mount point
|
* mount device to given mount point
|
||||||
*/
|
*/
|
||||||
if (tmp_rc == RTEMS_SUCCESSFUL) {
|
if (tmp_rc == 0) {
|
||||||
tmp_rc = mount(&tmp_mt_entry,
|
tmp_rc = mount(&tmp_mt_entry,
|
||||||
fstab_ptr->fs_ops,
|
fstab_ptr->fs_ops,
|
||||||
fstab_ptr->mount_options,
|
fstab_ptr->mount_options,
|
||||||
fstab_ptr->dev,
|
fstab_ptr->dev,
|
||||||
fstab_ptr->mount_point);
|
fstab_ptr->mount_point);
|
||||||
if (tmp_rc != RTEMS_SUCCESSFUL) {
|
if (tmp_rc != 0) {
|
||||||
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNT_FAILED)) {
|
if (0 != (fstab_ptr->report_reasons & FSMOUNT_MNT_FAILED)) {
|
||||||
fprintf(stdout,"fsmount: mounting of \"%s\" to"
|
fprintf(stdout,"fsmount: mounting of \"%s\" to"
|
||||||
" \"%s\" failed: %s\n",
|
" \"%s\" failed: %s\n",
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* File system mount functions.
|
||||||
|
*/
|
||||||
|
|
||||||
/*===============================================================*\
|
/*===============================================================*\
|
||||||
| Project: RTEMS fsmount |
|
| Project: RTEMS fsmount |
|
||||||
+-----------------------------------------------------------------+
|
+-----------------------------------------------------------------+
|
||||||
@@ -33,46 +39,179 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* bits to define, what errors will cause reporting (via printf) and
|
* @defgroup rtems_fstab File System Mount Support
|
||||||
* abort of mount processing
|
*
|
||||||
* Use a combination of these bits
|
* @{
|
||||||
* for the fields "report_reasons" and "abort_reasons"
|
|
||||||
*/
|
*/
|
||||||
#define FSMOUNT_MNT_OK 0x0001 /* mounted ok */
|
|
||||||
#define FSMOUNT_MNTPNT_CRTERR 0x0002 /* cannot create mount point */
|
|
||||||
#define FSMOUNT_MNT_FAILED 0x0004 /* mounting failed */
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File system mount report and abort condition flags.
|
||||||
|
*
|
||||||
|
* The flags define, which conditions will cause a report during the mount
|
||||||
|
* process (via printf()) or abort the mount process.
|
||||||
|
*
|
||||||
|
* @see rtems_fstab_entry and rtems_fsmount().
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
/**
|
||||||
|
* No conditions.
|
||||||
|
*/
|
||||||
|
RTEMS_FSTAB_NONE = 0U,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Complete mount process was successful.
|
||||||
|
*/
|
||||||
|
RTEMS_FSTAB_OK = 0x1U,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount point creation failed.
|
||||||
|
*/
|
||||||
|
RTEMS_FSTAB_ERROR_MOUNT_POINT = 0x2U,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File system mount failed.
|
||||||
|
*/
|
||||||
|
RTEMS_FSTAB_ERROR_MOUNT = 0x4U,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Something failed.
|
||||||
|
*/
|
||||||
|
RTEMS_FSTAB_ERROR = RTEMS_FSTAB_ERROR_MOUNT_POINT | RTEMS_FSTAB_ERROR_MOUNT,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Any condition.
|
||||||
|
*/
|
||||||
|
RTEMS_FSTAB_ANY = RTEMS_FSTAB_OK | RTEMS_FSTAB_ERROR
|
||||||
|
} rtems_fstab_conditions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File system table entry.
|
||||||
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *dev;
|
/**
|
||||||
char *mount_point;
|
* Device file path.
|
||||||
rtems_filesystem_operations_table *fs_ops;
|
*/
|
||||||
|
const char *dev;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount point path.
|
||||||
|
*/
|
||||||
|
const char *mount_point;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File system operations.
|
||||||
|
*/
|
||||||
|
const rtems_filesystem_operations_table *fs_ops;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File system mount options.
|
||||||
|
*/
|
||||||
rtems_filesystem_options_t mount_options;
|
rtems_filesystem_options_t mount_options;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Report @ref rtems_fstab_conditions "condition flags".
|
||||||
|
*/
|
||||||
uint16_t report_reasons;
|
uint16_t report_reasons;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abort @ref rtems_fstab_conditions "condition flags".
|
||||||
|
*/
|
||||||
uint16_t abort_reasons;
|
uint16_t abort_reasons;
|
||||||
} fstab_t;
|
} rtems_fstab_entry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the mount point with path @a mount_point.
|
||||||
|
*
|
||||||
|
* On success, zero is returned. On error, -1 is returned, and @c errno is set
|
||||||
|
* appropriately.
|
||||||
|
*
|
||||||
|
* @see rtems_fsmount().
|
||||||
|
*/
|
||||||
|
int rtems_fsmount_create_mount_point( const char *mount_point);
|
||||||
|
|
||||||
/*=========================================================================*\
|
/**
|
||||||
| Function: |
|
* Mounts the file systems listed in the file system mount table @a fstab of
|
||||||
\*-------------------------------------------------------------------------*/
|
* size @a size.
|
||||||
int rtems_fsmount
|
*
|
||||||
(
|
* Each file system will be mounted according to its table entry parameters.
|
||||||
/*-------------------------------------------------------------------------*\
|
* In case of an abort condition the corresponding table index will be reported
|
||||||
| Purpose: |
|
* in @a abort_index. The pointer @a abort_index may be @c NULL. The mount
|
||||||
| This function will create the mount points listed and mount the file |
|
* point paths will be created with rtems_fsmount_create_mount_point() and need
|
||||||
| systems listed in the calling parameters |
|
* not exist beforehand.
|
||||||
+---------------------------------------------------------------------------+
|
*
|
||||||
| Input Parameters: |
|
* On success, zero is returned. On error, -1 is returned, and @c errno is set
|
||||||
\*-------------------------------------------------------------------------*/
|
* appropriately.
|
||||||
const fstab_t *fstab_ptr, /* Ptr to filesystem mount table */
|
*
|
||||||
int fstab_count, /* number of entries in mount table*/
|
* @see rtems_bdpart_register_from_disk().
|
||||||
int *fail_idx /* return: index of failed entry */
|
*
|
||||||
);
|
* The following example code tries to mount a FAT file system within a SD
|
||||||
/*-------------------------------------------------------------------------*\
|
* Card. Some cards do not have a partition table so at first it tries to find
|
||||||
| Return Value: |
|
* a file system inside the hole disk. If this is successful the mount process
|
||||||
| 0, if success, -1 and errno if failed |
|
* will be aborted because the @ref RTEMS_FSTAB_OK condition is true. If this
|
||||||
\*=========================================================================*/
|
* did not work it tries to mount the file system inside the first partition.
|
||||||
|
* If this fails the mount process will not be aborted (this is already the
|
||||||
|
* last entry), but the last error status will be returned.
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* #include <stdio.h>
|
||||||
|
* #include <string.h>
|
||||||
|
* #include <errno.h>
|
||||||
|
*
|
||||||
|
* #include <rtems.h>
|
||||||
|
* #include <rtems/bdpart.h>
|
||||||
|
* #include <rtems/dosfs.h>
|
||||||
|
* #include <rtems/error.h>
|
||||||
|
* #include <rtems/fsmount.h>
|
||||||
|
*
|
||||||
|
* static const rtems_fstab_entry fstab [] = {
|
||||||
|
* {
|
||||||
|
* .dev = "/dev/sd-card-a",
|
||||||
|
* .mount_point = "/mnt",
|
||||||
|
* .fs_ops = &msdos_ops,
|
||||||
|
* .mount_options = RTEMS_FILESYSTEM_READ_WRITE,
|
||||||
|
* .report_reasons = RTEMS_FSTAB_ANY,
|
||||||
|
* .abort_reasons = RTEMS_FSTAB_OK
|
||||||
|
* }, {
|
||||||
|
* .dev = "/dev/sd-card-a1",
|
||||||
|
* .mount_point = "/mnt",
|
||||||
|
* .fs_ops = &msdos_ops,
|
||||||
|
* .mount_options = RTEMS_FILESYSTEM_READ_WRITE,
|
||||||
|
* .report_reasons = RTEMS_FSTAB_ANY,
|
||||||
|
* .abort_reasons = RTEMS_FSTAB_NONE
|
||||||
|
* }
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* static void my_mount(void)
|
||||||
|
* {
|
||||||
|
* rtems_status_code sc = RTEMS_SUCCESSFUL;
|
||||||
|
* int rv = 0;
|
||||||
|
* size_t abort_index = 0;
|
||||||
|
*
|
||||||
|
* sc = rtems_bdpart_register_from_disk("/dev/sd-card-a");
|
||||||
|
* if (sc != RTEMS_SUCCESSFUL) {
|
||||||
|
* printf("read partition table failed: %s\n", rtems_status_text(sc));
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* rv = rtems_fsmount(fstab, sizeof(fstab) / sizeof(fstab [0]), &abort_index);
|
||||||
|
* if (rv != 0) {
|
||||||
|
* printf("mount failed: %s\n", strerror(errno));
|
||||||
|
* }
|
||||||
|
* printf("mount aborted at %zu\n", abort_index);
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
int rtems_fsmount( const rtems_fstab_entry *fstab, size_t size, size_t *abort_index);
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
typedef rtems_fstab_entry fstab_t;
|
||||||
|
|
||||||
|
#define FSMOUNT_MNT_OK RTEMS_FSTAB_OK
|
||||||
|
|
||||||
|
#define FSMOUNT_MNTPNT_CRTERR RTEMS_FSTAB_ERROR_MOUNT_POINT
|
||||||
|
|
||||||
|
#define FSMOUNT_MNT_FAILED RTEMS_FSTAB_ERROR_MOUNT
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user