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