mnt.c 1.7 KB

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