diff --git a/components/dfs/filesystems/elmfat/option/ccfile.c b/components/dfs/filesystems/elmfat/option/ccfile.c index 34c97372c10d081a9fe50e0c1eb9119894c60fa8..e91db8c70226a8ced1d8f88af9f3b90da6601bc1 100644 --- a/components/dfs/filesystems/elmfat/option/ccfile.c +++ b/components/dfs/filesystems/elmfat/option/ccfile.c @@ -23,6 +23,7 @@ void ff_convert_init() if (uni2gbk_fd < 0) rt_kprintf("Unable to open Unicode to GBK look up table.\r\n"); } +INIT_APP_EXPORT(ff_convert_init); rt_uint16_t ff_convert(rt_uint16_t src, rt_uint32_t dir) { diff --git a/components/dfs/include/dfs_fs.h b/components/dfs/include/dfs_fs.h index e8f42f663117684eb401d5a8e44592dc95b1d099..3fa999c344a65c1246c574f23d99c706ee620a21 100644 --- a/components/dfs/include/dfs_fs.h +++ b/components/dfs/include/dfs_fs.h @@ -82,6 +82,16 @@ struct dfs_partition rt_sem_t lock; }; +/* mount table */ +struct dfs_mount_tbl +{ + const char *device_name; + const char *path; + const char *filesystemtype; + unsigned long rwflag; + const void *data; +}; + int dfs_register(const struct dfs_filesystem_operation *ops); struct dfs_filesystem *dfs_filesystem_lookup(const char *path); rt_err_t dfs_filesystem_get_partition(struct dfs_partition *part, @@ -98,6 +108,7 @@ int dfs_unmount(const char *specialfile); /* extern variable */ extern const struct dfs_filesystem_operation *filesystem_operation_table[]; extern struct dfs_filesystem filesystem_table[]; +extern const struct dfs_mount_tbl mount_table[]; extern char working_directory[]; diff --git a/components/dfs/src/dfs_fs.c b/components/dfs/src/dfs_fs.c index c7fb80eff3d99eda585e42dc8d3b70183d88f281..8b77aa978b17b3a6370331a06fb94eb1d2101271 100644 --- a/components/dfs/src/dfs_fs.c +++ b/components/dfs/src/dfs_fs.c @@ -497,6 +497,33 @@ int dfs_statfs(const char *path, struct statfs *buffer) return -1; } +#ifdef RT_USING_DFS_MNTTABLE +int dfs_mount_table(void) +{ + int index; + + while (1) + { + if (mount_table[index].path == RT_NULL) break; + + if (dfs_mount(mount_table[index].device_name, + mount_table[index].path, + mount_table[index].filesystemtype, + mount_table[index].rwflag, + mount_table[index].data) != 0) + { + rt_kprintf("mount fs[%s] on %s failed.\n", mount_table[index].filesystemtype, + mount_table[index].path); + return -RT_ERROR; + } + + index ++; + } + return 0; +} +INIT_ENV_EXPORT(dfs_mount_table); +#endif + #ifdef RT_USING_FINSH #include void mkfs(const char *fs_name, const char *device_name) diff --git a/include/rtdef.h b/include/rtdef.h index cb1fb7a9a911bea34e63aa856e1b7dd8daf3c402..1d64ae54f41c2c412f743a1e890e7491aef3e716 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -191,10 +191,16 @@ typedef int (*init_fn_t)(void); /* board init routines will be called in board_init() function */ #define INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, "1") /* device/component/fs/app init routines will be called in init_thread */ +/* device initialization */ #define INIT_DEVICE_EXPORT(fn) INIT_EXPORT(fn, "2") +/* components initialization (dfs, lwip, ...) */ #define INIT_COMPONENT_EXPORT(fn) INIT_EXPORT(fn, "3") +/* file system initialization (dfs-elm, dfs-rom, ...) */ #define INIT_FS_EXPORT(fn) INIT_EXPORT(fn, "4") -#define INIT_APP_EXPORT(fn) INIT_EXPORT(fn, "5") +/* environment initialization (mount disk, ...) */ +#define INIT_ENV_EXPORT(fn) INIT_EXPORT(fn, "5") +/* appliation initialization (rtgui application etc ...) */ +#define INIT_APP_EXPORT(fn) INIT_EXPORT(fn, "6") /* event length */ #define RT_EVENT_LENGTH 32 diff --git a/include/rtthread.h b/include/rtthread.h index 6c3b11134d7bdae1ae2168a65959d906c64bd72b..28c01922918b85efa74dd67636de3f9ea68acf34 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -452,7 +452,7 @@ rt_uint8_t rt_interrupt_get_nest(void); /** * application module */ -void rt_system_module_init(void); +int rt_system_module_init(void); /** * @addtogroup KernelService diff --git a/src/module.c b/src/module.c index 5469d46523d51559ecbb45941638bbe7c465dcf6..ac689dbade3f829b829a308883d36fa5f3bbaca8 100644 --- a/src/module.c +++ b/src/module.c @@ -80,7 +80,7 @@ static struct rt_module_symtab *_rt_module_symtab_end = RT_NULL; * * This function will initialize system module */ -void rt_system_module_init(void) +int rt_system_module_init(void) { #ifdef __GNUC__ extern int __rtmsymtab_start; @@ -100,6 +100,7 @@ void rt_system_module_init(void) /* initialize heap semaphore */ rt_sem_init(&mod_sem, "module", 1, RT_IPC_FLAG_FIFO); #endif + return 0; } INIT_COMPONENT_EXPORT(rt_system_module_init); @@ -805,9 +806,6 @@ rt_module_t rt_module_load(const char *name, void *module_ptr) if (elf_module->e_entry != 0) { - rt_uint32_t *stack_size; - rt_uint8_t *priority; - #ifdef RT_USING_SLAB /* init module memory allocator */ module->mem_list = RT_NULL; @@ -1180,8 +1178,6 @@ rt_err_t rt_module_destroy(rt_module_t module) */ rt_err_t rt_module_unload(rt_module_t module) { - int i; - rt_err_t result; struct rt_object *object; struct rt_list_node *list;