40#if defined(LOSCFG_STORAGE_SPINOR) || defined(LOSCFG_STORAGE_SPINAND) || defined(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7)
45#ifdef LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7
49#ifdef LOSCFG_STORAGE_EMMC
55#ifdef LOSCFG_STORAGE_EMMC
65 if (emmcDisk == NULL) {
66 PRINT_ERR(
"Get EMMC disk failed!\n");
70 void *block = ((
struct drv_data *)emmcDisk->
dev->
data)->priv;
73 PRINT_ERR(
"Failed to deinit emmc disk!\n");
78 ret =
add_mmc_partition(emmc, rootAddr / EMMC_SEC_SIZE, rootSize / EMMC_SEC_SIZE);
80 PRINT_ERR(
"Failed to add mmc root partition!\n");
84#ifdef LOSCFG_PLATFORM_PATCHFS
85 UINT64 patchStartCnt = userAddr / EMMC_SEC_SIZE;
86 UINT64 patchSizeCnt = PATCH_SIZE / EMMC_SEC_SIZE;
89 PRINT_ERR(
"Failed to add mmc patch partition!\n");
92 userAddr += PATCH_SIZE;
95 UINT64 storageStartCnt = userAddr / EMMC_SEC_SIZE;
96 UINT64 storageSizeCnt = userSize / EMMC_SEC_SIZE;
97 UINT64 userdataStartCnt = storageStartCnt + storageSizeCnt;
101 PRINT_ERR(
"Failed to add mmc storage partition!\n");
107 PRINT_ERR(
"Failed to add mmc userdata partition!\n");
115 PRINT_ERR(
"Failed to alloc disk %s!\n", node_name);
120 PRINT_ERR(
"Failed to init emmc disk!\n");
131#ifdef LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7
132 if ((strcmp(dev,
"cfi-flash") == 0) && (rootAddr != CFIFLASH_ROOT_ADDR)) {
133 PRINT_ERR(
"Error rootAddr, must be %#0x!\n", CFIFLASH_ROOT_ADDR);
138#if defined(LOSCFG_STORAGE_SPINOR) || defined(LOSCFG_STORAGE_SPINAND) || defined(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7)
142 if (strcmp(dev,
"flash") == 0 || strcmp(dev, FLASH_TYPE) == 0) {
145 PRINT_ERR(
"Failed to add mtd root partition!\n");
151 PRINT_ERR(
"Failed to add mtd storage partition!\n");
159#ifdef LOSCFG_STORAGE_EMMC
160 if (strcmp(dev,
"emmc") == 0) {
161 return AddEmmcParts(rootAddr, rootSize, userAddr, userSize);
165 PRINT_ERR(
"Unsupport dev type: %s\n", dev);
173 CHAR *rootAddrStr = NULL;
174 CHAR *rootSizeStr = NULL;
179 PRINT_ERR(
"Cannot find root!");
185 PRINT_ERR(
"Cannot find fstype!");
191 *rootAddr = ROOTFS_ADDR;
198 *rootSize = ROOTFS_SIZE;
205 *mountFlags = MS_RDONLY;
216 CHAR *userAddrStr = NULL;
217 CHAR *userSizeStr = NULL;
221 *userAddr = rootAddr + rootSize;
228 *userSize = USERFS_SIZE;
242 ret = mount(ROOT_DEV_NAME, ROOT_DIR_NAME, fsType, mountFlags, NULL);
245 PRINT_ERR(
"Failed to mount %s, rootDev %s, errno %d: %s\n", ROOT_DIR_NAME, ROOT_DEV_NAME, err, strerror(err));
249#ifdef LOSCFG_STORAGE_EMMC
250#ifdef LOSCFG_PLATFORM_PATCHFS
252 ret = mkdir(PATCH_DIR_NAME, DEFAULT_MOUNT_DIR_MODE);
253 if ((ret != LOS_OK) && ((err = get_errno()) != EEXIST)) {
254 PRINT_ERR(
"Failed to mkdir %s, errno %d: %s\n", PATCH_DIR_NAME, err, strerror(err));
258 ret = mount(PATCH_DEV_NAME, PATCH_DIR_NAME, fsType, 0, DEFAULT_MOUNT_DATA);
259 if ((ret != LOS_OK) && ((err = get_errno()) == ENOTSUP)) {
260 ret =
format(PATCH_DEV_NAME, 0, FM_FAT32);
262 PRINT_ERR(
"Failed to format %s\n", PATCH_DEV_NAME);
266 ret = mount(PATCH_DEV_NAME, PATCH_DIR_NAME, fsType, 0, DEFAULT_MOUNT_DATA);
272 PRINT_ERR(
"Failed to mount %s, errno %d: %s\n", PATCH_DIR_NAME, err, strerror(err));
279 ret = mkdir(STORAGE_DIR_NAME, DEFAULT_MOUNT_DIR_MODE);
280 if ((ret != LOS_OK) && ((err = get_errno()) != EEXIST)) {
281 PRINT_ERR(
"Failed to mkdir %s, errno %d: %s\n", STORAGE_DIR_NAME, err, strerror(err));
285 ret = mount(USER_DEV_NAME, STORAGE_DIR_NAME, fsType, 0, DEFAULT_MOUNT_DATA);
288 PRINT_ERR(
"Failed to mount %s, errno %d: %s\n", STORAGE_DIR_NAME, err, strerror(err));
292#ifdef LOSCFG_STORAGE_EMMC
294 ret = mkdir(USERDATA_DIR_NAME, DEFAULT_MOUNT_DIR_MODE);
295 if ((ret != LOS_OK) && ((err = get_errno()) != EEXIST)) {
296 PRINT_ERR(
"Failed to mkdir %s, errno %d: %s\n", USERDATA_DIR_NAME, err, strerror(err));
300 ret = mount(USERDATA_DEV_NAME, USERDATA_DIR_NAME, fsType, 0, DEFAULT_MOUNT_DATA);
301 if ((ret != LOS_OK) && ((err = get_errno()) == ENOTSUP)) {
302 ret =
format(USERDATA_DEV_NAME, 0, FM_FAT32);
304 PRINT_ERR(
"Failed to format %s\n", USERDATA_DEV_NAME);
308 ret = mount(USERDATA_DEV_NAME, USERDATA_DIR_NAME, fsType, 0, DEFAULT_MOUNT_DATA);
314 PRINT_ERR(
"Failed to mount %s, errno %d: %s\n", USERDATA_DIR_NAME, err, strerror(err));
325 if (alignSize == 0) {
329 if ((rootAddr & (alignSize - 1)) || (rootSize & (alignSize - 1)) ||
330 (userAddr & (alignSize - 1)) || (userSize & (alignSize - 1))) {
331 PRINT_ERR(
"The address or size value should be 0x%llx aligned!\n", alignSize);
349 ret =
ParseRootArgs(&dev, &fstype, &rootAddr, &rootSize, &mountFlags);
354 ret =
ParseUserArgs(rootAddr, rootSize, &userAddr, &userSize);
364 ret =
AddPartitions(dev, rootAddr, rootSize, userAddr, userSize);
los_disk * los_get_mmcdisk_bytype(UINT8 type)
INT32 add_mmc_partition(struct disk_divide_info *info, size_t sectorStart, size_t sectorCount)
Add a new mmc partition.
INT32 los_disk_init(const CHAR *diskName, const struct block_operations *bops, VOID *priv, INT32 diskID, VOID *info)
Disk driver initialization.
INT32 los_disk_deinit(INT32 diskID)
Destroy a disk driver.
INT32 los_alloc_diskid_byname(const CHAR *diskName)
alloc a new UNUSED disk id.
LITE_OS_SEC_TEXT_MINOR VOID LOS_Msleep(UINT32 msecs)
Sleep the current task.
INT32 add_mtd_partition(const CHAR *type, UINT32 startAddr, UINT32 length, UINT32 partitionNum)
Add a partition.
UINT64 LOS_GetAlignsize(VOID)
INT32 LOS_GetArgValue(CHAR *argName, CHAR **argValue)
UINT64 LOS_SizeStrToNum(CHAR *value)
STATIC INT32 AddEmmcParts(INT32 rootAddr, INT32 rootSize, INT32 userAddr, INT32 userSize)
STATIC INT32 ParseUserArgs(UINT64 rootAddr, UINT64 rootSize, UINT64 *userAddr, UINT64 *userSize)
STATIC INT32 CheckValidation(UINT64 rootAddr, UINT64 rootSize, UINT64 userAddr, UINT64 userSize)
STATIC INT32 AddPartitions(CHAR *dev, UINT64 rootAddr, UINT64 rootSize, UINT64 userAddr, UINT64 userSize)
STATIC INT32 MountPartitions(CHAR *fsType, UINT32 mountFlags)
挂载分区,即挂?"/","/storage"
char * StorageBlockGetEmmcNodeName(void *block)
struct block_operations * StorageBlockGetMmcOps(void)
struct disk_divide_info * StorageBlockGetEmmc(void)
STATIC INT32 ParseRootArgs(CHAR **dev, CHAR **fstype, UINT64 *rootAddr, UINT64 *rootSize, UINT32 *mountFlags)
INT32 OsMountRootfs()
挂载根文件系??SystemInit 调用