1 #include <rtthread.h>
2
3 #ifdef RT_USING_DFS
4 #include <dfs_fs.h>
5
6 #ifdef BSP_ROOTFS_TYPE_CROMFS
cromfs_get_partition_data(uint32_t * len)7 rt_weak uint8_t *cromfs_get_partition_data(uint32_t *len)
8 {
9 return RT_NULL;
10 }
11
mnt_cromfs(void)12 static int mnt_cromfs(void)
13 {
14 uint32_t length = 0;
15 uint8_t *data = cromfs_get_partition_data(&length);
16 int ret = -1;
17
18 if (data && length)
19 {
20 ret = dfs_mount(NULL, "/", "crom", 0, data);
21 }
22
23 return ret;
24 }
25 #endif
26
mnt_init(void)27 int mnt_init(void)
28 {
29 #if defined(BSP_USING_SDIO) && defined(BSP_ROOTFS_TYPE_ELMFAT)
30 int timeout = 50; // Timeout after 50 iterations (5 seconds if each iteration waits 100ms)
31 while (mmcsd_wait_cd_changed(100) != MMCSD_HOST_PLUGED)
32 {
33 if (--timeout <= 0)
34 {
35 rt_kprintf("Timeout waiting for MMCSD host to be plugged!\n");
36 return -1; // Return an error code to indicate failure
37 }
38 rt_thread_mdelay(100); // Yield to the scheduler
39 }
40
41 if (dfs_mount(BSP_SD_MNT_DEVNAME, "/", "elm", 0, 0) != 0)
42 {
43 rt_kprintf("%s mounted on / failed!\n", BSP_SD_MNT_DEVNAME);
44 }
45 else {
46 rt_kprintf("%s mounted on / success!\n", BSP_SD_MNT_DEVNAME);
47 }
48 #endif
49
50 #ifdef BSP_ROOTFS_TYPE_CROMFS
51 rt_err_t ret;
52
53 ret = mnt_cromfs();
54 if (ret != RT_EOK)
55 {
56 rt_kprintf("CromFS mount failed!\n");
57 return ret;
58 }
59 else
60 {
61 rt_kprintf("CromFS mount success!\n");
62 }
63 #endif
64
65 mkdir("/dev/shm", 0x777);
66
67 if (dfs_mount(RT_NULL, "/dev/shm", "tmp", 0, 0) != 0)
68 {
69 rt_kprintf("tmpfs mounted on /dev/shm failed!\n");
70 }
71 else {
72 rt_kprintf("tmpfs mounted on /dev/shm success!\n");
73 }
74
75 rt_kprintf("file system initialization done!\n");
76
77 return 0;
78 }
79 INIT_ENV_EXPORT(mnt_init);
80
81 #endif /* RT_USING_DFS */
82