summaryrefslogtreecommitdiff
path: root/bsp/k230/applications/mnt.c
blob: 3e86c2db035683dfc80e13f625bf8f6bbcb8f3e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <rtthread.h>

#ifdef RT_USING_DFS
#include <dfs_fs.h>

#ifdef BSP_ROOTFS_TYPE_CROMFS
rt_weak uint8_t *cromfs_get_partition_data(uint32_t *len)
{
    return RT_NULL;
}

static int mnt_cromfs(void)
{
    uint32_t length = 0;
    uint8_t *data = cromfs_get_partition_data(&length);
    int ret = -1;

    if (data && length)
    {
        ret = dfs_mount(NULL, "/", "crom", 0, data);
    }

    return ret;
}
#endif

int mnt_init(void)
{
#if defined(BSP_USING_SDIO) && defined(BSP_ROOTFS_TYPE_ELMFAT)
    int timeout = 50; // Timeout after 50 iterations (5 seconds if each iteration waits 100ms)
    while (mmcsd_wait_cd_changed(100) != MMCSD_HOST_PLUGED)
    {
        if (--timeout <= 0)
        {
            rt_kprintf("Timeout waiting for MMCSD host to be plugged!\n");
            return -1; // Return an error code to indicate failure
        }
        rt_thread_mdelay(100); // Yield to the scheduler
    }

    if (dfs_mount(BSP_SD_MNT_DEVNAME, "/", "elm", 0, 0) != 0)
    {
        rt_kprintf("%s mounted on / failed!\n", BSP_SD_MNT_DEVNAME);
    }
    else {
        rt_kprintf("%s mounted on / success!\n", BSP_SD_MNT_DEVNAME);
    }
#endif

#ifdef BSP_ROOTFS_TYPE_CROMFS
    rt_err_t ret;

    ret = mnt_cromfs();
    if (ret != RT_EOK)
    {
        rt_kprintf("CromFS mount failed!\n");
        return ret;
    }
    else
    {
        rt_kprintf("CromFS mount success!\n");
    }
#endif

    mkdir("/dev/shm", 0x777);

    if (dfs_mount(RT_NULL, "/dev/shm", "tmp", 0, 0) != 0)
    {
        rt_kprintf("tmpfs mounted on /dev/shm failed!\n");
    }
    else {
        rt_kprintf("tmpfs mounted on /dev/shm success!\n");
    }

    rt_kprintf("file system initialization done!\n");

    return 0;
}
INIT_ENV_EXPORT(mnt_init);

#endif /* RT_USING_DFS */