RTEMS 6.1-rc4
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Functions | Variables
Journalling Flash File System Version 2 (JFFS2) Support

Mount options for the Journalling Flash File System, Version 2 (JFFS2). More...

Data Structures

struct  rtems_jffs2_flash_control
 JFFS2 flash device control. More...
 
struct  rtems_jffs2_compressor_control
 JFFS2 compressor control. More...
 
struct  rtems_jffs2_compressor_zlib_control
 ZLIB compressor control structure. More...
 
struct  rtems_jffs2_mount_data
 JFFS2 mount options. More...
 
struct  rtems_jffs2_info
 JFFS2 filesystem instance information. More...
 
struct  rtems_jffs2_config
 

Macros

#define RTEMS_JFFS2_GET_INFO   _IOR('F', 1, rtems_jffs2_info)
 IO control to get the JFFS2 filesystem instance information.
 
#define RTEMS_JFFS2_ON_DEMAND_GARBAGE_COLLECTION   _IO('F', 2)
 IO control to perform an on demand garbage collection in a JFFS2 filesystem instance.
 
#define RTEMS_JFFS2_FORCE_GARBAGE_COLLECTION   _IO('F', 3)
 IO control to force a garbage collection in a JFFS2 filesystem instance.
 
#define RTEMS_JFFS2_DELAYED_WRITE_TASK_PRIORITY_DEFAULT   15
 

Typedefs

typedef int(* rtems_jffs2_flash_read) (rtems_jffs2_flash_control *self, uint32_t offset, unsigned char *buffer, size_t size_of_buffer)
 Read from flash operation.
 
typedef int(* rtems_jffs2_flash_write) (rtems_jffs2_flash_control *self, uint32_t offset, const unsigned char *buffer, size_t size_of_buffer)
 Write to flash operation.
 
typedef int(* rtems_jffs2_flash_erase) (rtems_jffs2_flash_control *self, uint32_t offset)
 Flash erase operation.
 
typedef int(* rtems_jffs2_flash_block_is_bad) (rtems_jffs2_flash_control *self, uint32_t offset, bool *bad)
 Flash bad block check operation.
 
typedef int(* rtems_jffs2_flash_block_mark_bad) (rtems_jffs2_flash_control *self, uint32_t offset)
 Flash bad block mark operation.
 
typedef int(* rtems_jffs2_flash_oob_write) (rtems_jffs2_flash_control *self, uint32_t offset, uint8_t *oobbuf, uint32_t obblen)
 Flash oob write.
 
typedef int(* rtems_jffs2_flash_oob_read) (rtems_jffs2_flash_control *self, uint32_t offset, uint8_t *oobbuf, uint32_t obblen)
 Flash oob read.
 
typedef uint32_t(* rtems_jffs2_flash_get_oob_size) (rtems_jffs2_flash_control *self)
 Flash get oob size.
 
typedef void(* rtems_jffs2_flash_destroy) (rtems_jffs2_flash_control *self)
 Flash destroy operation.
 
typedef void(* rtems_jffs2_trigger_garbage_collection) (rtems_jffs2_flash_control *self)
 Trigger garbage collection operation.
 
typedef struct rtems_jffs2_compressor_control rtems_jffs2_compressor_control
 
typedef uint16_t(* rtems_jffs2_compressor_compress) (rtems_jffs2_compressor_control *self, unsigned char *data_in, unsigned char *cdata_out, uint32_t *datalen, uint32_t *cdatalen)
 Compress operation.
 
typedef int(* rtems_jffs2_compressor_decompress) (rtems_jffs2_compressor_control *self, uint16_t comprtype, unsigned char *cdata_in, unsigned char *data_out, uint32_t cdatalen, uint32_t datalen)
 Decompress operation.
 
typedef void(* rtems_jffs2_compressor_destroy) (rtems_jffs2_compressor_control *self)
 Compressor destroy operation.
 
typedef struct rtems_jffs2_config rtems_jffs2_config
 

Functions

uint16_t rtems_jffs2_compressor_rtime_compress (rtems_jffs2_compressor_control *self, unsigned char *data_in, unsigned char *cdata_out, uint32_t *datalen, uint32_t *cdatalen)
 RTIME compressor compress operation.
 
int rtems_jffs2_compressor_rtime_decompress (rtems_jffs2_compressor_control *self, uint16_t comprtype, unsigned char *cdata_in, unsigned char *data_out, uint32_t cdatalen, uint32_t datalen)
 RTIME compressor decompress operation.
 
uint16_t rtems_jffs2_compressor_zlib_compress (rtems_jffs2_compressor_control *self, unsigned char *data_in, unsigned char *cdata_out, uint32_t *datalen, uint32_t *cdatalen)
 ZLIB compressor compress operation.
 
int rtems_jffs2_compressor_zlib_decompress (rtems_jffs2_compressor_control *self, uint16_t comprtype, unsigned char *cdata_in, unsigned char *data_out, uint32_t cdatalen, uint32_t datalen)
 ZLIB compressor decompress operation.
 
int rtems_jffs2_initialize (rtems_filesystem_mount_table_entry_t *mt_entry, const void *data)
 Initialization handler of the JFFS2 file system.
 

Variables

const rtems_jffs2_config jffs2_config
 

Detailed Description

Mount options for the Journalling Flash File System, Version 2 (JFFS2).

The application must provide flash device geometry information and flash device operations in the flash control structure rtems_jffs2_flash_control.

The application can optionally provide a compressor control structure to enable data compression using the selected compression algorithm.

The application must enable JFFS2 support with rtems_filesystem_register() or CONFIGURE_FILESYSTEM_JFFS2 via <rtems/confdefs.h>.

An example mount with a simple memory based flash device simulation follows. The zlib is used for as the compressor.

#include <string.h>
#include <rtems/jffs2.h>
#include <rtems/libio.h>
#define BLOCK_SIZE (32UL * 1024UL)
#define FLASH_SIZE (32UL * BLOCK_SIZE)
typedef struct {
unsigned char area[FLASH_SIZE];
static flash_control *get_flash_control(rtems_jffs2_flash_control *super)
{
return (flash_control *) super;
}
static int flash_read(
uint32_t offset,
unsigned char *buffer,
size_t size_of_buffer
)
{
flash_control *self = get_flash_control(super);
unsigned char *chunk = &self->area[offset];
memcpy(buffer, chunk, size_of_buffer);
return 0;
}
static int flash_write(
uint32_t offset,
const unsigned char *buffer,
size_t size_of_buffer
)
{
flash_control *self = get_flash_control(super);
unsigned char *chunk = &self->area[offset];
size_t i;
for (i = 0; i < size_of_buffer; ++i) {
chunk[i] &= buffer[i];
}
return 0;
}
static int flash_erase(
uint32_t offset
)
{
flash_control *self = get_flash_control(super);
unsigned char *chunk = &self->area[offset];
memset(chunk, 0xff, BLOCK_SIZE);
return 0;
}
static flash_control flash_instance = {
.super = {
.block_size = BLOCK_SIZE,
.flash_size = FLASH_SIZE,
.read = flash_read,
.write = flash_write,
.erase = flash_erase,
.device_identifier = 0xc01dc0fe
}
};
static rtems_jffs2_compressor_zlib_control compressor_instance = {
.super = {
}
};
static const rtems_jffs2_mount_data mount_data = {
.flash_control = &flash_instance.super,
.compressor_control = &compressor_instance.super
};
static void erase_all(void)
{
memset(&flash_instance.area[0], 0xff, FLASH_SIZE);
}
void example_jffs2_mount(const char *mount_dir)
{
int rv;
erase_all();
NULL,
mount_dir,
RTEMS_FILESYSTEM_TYPE_JFFS2,
RTEMS_FILESYSTEM_READ_WRITE,
&mount_data
);
assert(rv == 0);
}
int mount_and_make_target_path(const char *source, const char *target, const char *filesystemtype, rtems_filesystem_options_t options, const void *data)
Mounts a file system and makes the target path.
Definition: mount-mktgt.c:44
uint16_t rtems_jffs2_compressor_zlib_compress(rtems_jffs2_compressor_control *self, unsigned char *data_in, unsigned char *cdata_out, uint32_t *datalen, uint32_t *cdatalen)
ZLIB compressor compress operation.
Definition: compr_zlib.c:46
int rtems_jffs2_compressor_zlib_decompress(rtems_jffs2_compressor_control *self, uint16_t comprtype, unsigned char *cdata_in, unsigned char *data_out, uint32_t cdatalen, uint32_t datalen)
ZLIB compressor decompress operation.
Definition: compr_zlib.c:121
Basic IO API.
Definition: jffs2_xnandpsu.c:52
rtems_jffs2_compressor_compress compress
Compress operation.
Definition: jffs2.h:510
ZLIB compressor control structure.
Definition: jffs2.h:556
JFFS2 flash device control.
Definition: jffs2.h:355
uint32_t block_size
The size in bytes of the erasable unit of the flash device.
Definition: jffs2.h:359
JFFS2 mount options.
Definition: jffs2.h:589
rtems_jffs2_flash_control * flash_control
Flash control.
Definition: jffs2.h:593

Macro Definition Documentation

◆ RTEMS_JFFS2_DELAYED_WRITE_TASK_PRIORITY_DEFAULT

#define RTEMS_JFFS2_DELAYED_WRITE_TASK_PRIORITY_DEFAULT   15

Default delayed-write servicing task priority.

◆ RTEMS_JFFS2_FORCE_GARBAGE_COLLECTION

#define RTEMS_JFFS2_FORCE_GARBAGE_COLLECTION   _IO('F', 3)

IO control to force a garbage collection in a JFFS2 filesystem instance.

Use this operation with care since it may wear out your flash.

◆ RTEMS_JFFS2_GET_INFO

#define RTEMS_JFFS2_GET_INFO   _IOR('F', 1, rtems_jffs2_info)

IO control to get the JFFS2 filesystem instance information.

See also
rtems_jffs2_info.

◆ RTEMS_JFFS2_ON_DEMAND_GARBAGE_COLLECTION

#define RTEMS_JFFS2_ON_DEMAND_GARBAGE_COLLECTION   _IO('F', 2)

IO control to perform an on demand garbage collection in a JFFS2 filesystem instance.

This operation is intended to be used by an optional garbage collection thread. See rtems_jffs2_flash_control::trigger_garbage_collection.

Typedef Documentation

◆ rtems_jffs2_compressor_compress

typedef uint16_t(* rtems_jffs2_compressor_compress) (rtems_jffs2_compressor_control *self, unsigned char *data_in, unsigned char *cdata_out, uint32_t *datalen, uint32_t *cdatalen)

Compress operation.

Parameters
[in,out]selfThe compressor control.
[in]data_inThe uncompressed data.
[out]cdata_outPointer to buffer with the compressed data.
[in,out]datalenOn entry, the size in bytes of the uncompressed data. On exit, the size in bytes of uncompressed data which was actually compressed.
[in,out]cdatalenOn entry, the size in bytes available for compressed data. On exit, the size in bytes of the actually compressed data.
Returns
The compressor type.

◆ rtems_jffs2_compressor_decompress

typedef int(* rtems_jffs2_compressor_decompress) (rtems_jffs2_compressor_control *self, uint16_t comprtype, unsigned char *cdata_in, unsigned char *data_out, uint32_t cdatalen, uint32_t datalen)

Decompress operation.

Parameters
[in,out]selfThe compressor control.
[in]comprtypeThe compressor type.
[in]cdata_inThe compressed data.
[out]data_outThe uncompressed data.
[in]cdatalenThe size in bytes of the compressed data.
[in]datalenThe size in bytes of the uncompressed data.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_compressor_destroy

typedef void(* rtems_jffs2_compressor_destroy) (rtems_jffs2_compressor_control *self)

Compressor destroy operation.

The compressor destroy operation is called during unmount of the file system instance. It can be used to free the resources associated with the now unused compressor operations.

Parameters
[in,out]selfThe compressor control.

◆ rtems_jffs2_config

JFFS2 configuration definition. See confdefs.h for support on using this structure.

◆ rtems_jffs2_flash_block_is_bad

typedef int(* rtems_jffs2_flash_block_is_bad) (rtems_jffs2_flash_control *self, uint32_t offset, bool *bad)

Flash bad block check operation.

This operation checks whether a block is bad.

Parameters
[in,out]selfThe flash control.
[in]offsetThe offset in bytes of the block to check.
[out]Theresult of the bad block check.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_flash_block_mark_bad

typedef int(* rtems_jffs2_flash_block_mark_bad) (rtems_jffs2_flash_control *self, uint32_t offset)

Flash bad block mark operation.

This operation marks a block bad.

Parameters
[in,out]selfThe flash control.
[in]offsetThe offset in bytes of the block to mark bad.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_flash_destroy

typedef void(* rtems_jffs2_flash_destroy) (rtems_jffs2_flash_control *self)

Flash destroy operation.

The flash destroy operation is called during unmount of the file system instance. It can be used to free the resources associated with the now unused flash control

Parameters
[in,out]selfThe flash control.

◆ rtems_jffs2_flash_erase

typedef int(* rtems_jffs2_flash_erase) (rtems_jffs2_flash_control *self, uint32_t offset)

Flash erase operation.

This operation must erase one block specified by the offset.

Parameters
[in,out]selfThe flash control.
[in]offsetThe offset to erase from the flash begin in bytes.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_flash_get_oob_size

typedef uint32_t(* rtems_jffs2_flash_get_oob_size) (rtems_jffs2_flash_control *self)

Flash get oob size.

This operation gets the size of the out-of-band/spare bytes for each page.

Parameters
[in,out]selfThe flash control.
Return values
Thesize of the OOB/spare area available to each page

◆ rtems_jffs2_flash_oob_read

typedef int(* rtems_jffs2_flash_oob_read) (rtems_jffs2_flash_control *self, uint32_t offset, uint8_t *oobbuf, uint32_t obblen)

Flash oob read.

This operation reads the out-of-band/spare bytes for the block matching the given offset in bytes.

Parameters
[in,out]selfThe flash control.
[in]offsetThe offset to erase from the flash begin in bytes.
[out]pointerto the buffer which will have the oob/spare bytes data written to it.
[in]lengthof the buffer which will hold the oob/spare bytes.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_flash_oob_write

typedef int(* rtems_jffs2_flash_oob_write) (rtems_jffs2_flash_control *self, uint32_t offset, uint8_t *oobbuf, uint32_t obblen)

Flash oob write.

This operation writes the out-of-band/spare bytes for the block matching the given offset in bytes.

Parameters
[in,out]selfThe flash control.
[in]offsetThe offset to erase from the flash begin in bytes.
[in]pointerto the buffer which will be written to the oob/spare bytes.
[in]lengthof the buffer which will be written to the oob/spare bytes.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_flash_read

typedef int(* rtems_jffs2_flash_read) (rtems_jffs2_flash_control *self, uint32_t offset, unsigned char *buffer, size_t size_of_buffer)

Read from flash operation.

Parameters
[in,out]selfThe flash control.
[in]offsetThe offset to read from the flash begin in bytes.
[out]bufferThe buffer receiving the data.
[in]size_of_bufferThe size of the buffer in bytes.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_flash_write

typedef int(* rtems_jffs2_flash_write) (rtems_jffs2_flash_control *self, uint32_t offset, const unsigned char *buffer, size_t size_of_buffer)

Write to flash operation.

Parameters
[in,out]selfThe flash control.
[in]offsetThe offset to write from the flash begin in bytes.
[in]bufferThe buffer containing the data to write.
[in]size_of_bufferThe size of the buffer in bytes.
Return values
0Successful operation.
-EIOAn error occurred. Please note that the value is negative.
otherAll other values are reserved and must not be used.

◆ rtems_jffs2_trigger_garbage_collection

typedef void(* rtems_jffs2_trigger_garbage_collection) (rtems_jffs2_flash_control *self)

Trigger garbage collection operation.

An optional garbage collection thread may perform now a garbage collection using the RTEMS_JFFS2_ON_DEMAND_GARBAGE_COLLECTION IO control.

The garbage collection must not run in the executing context.

Parameters
[in]selfThe flash control.

Function Documentation

◆ rtems_jffs2_initialize()

int rtems_jffs2_initialize ( rtems_filesystem_mount_table_entry_t mt_entry,
const void *  data 
)

Initialization handler of the JFFS2 file system.

Parameters
[in,out]mt_entryThe mount table entry.
[in]dataThe mount options are mandatory for JFFS2 and data must point to a valid rtems_jffs2_mount_data structure used for this file system instance.
Return values
0Successful operation.
-1An error occurred. The errno indicates the error.
See also
mount().

Variable Documentation

◆ jffs2_config

const rtems_jffs2_config jffs2_config
extern

External reference to the configuration.

The configuration is provided by the application.