feat: add liteos patch ability
Signed-off-by: jason_gitee <yangjie140@huawei.com>
This commit is contained in:
parent
aa5b2c7641
commit
98ca8441fe
|
@ -110,7 +110,10 @@ kernel_module(module_name) {
|
|||
"$LITEOSTOPDIR/fs/vfs/vnode_hash.c",
|
||||
]
|
||||
|
||||
include_dirs = [ "$LITEOSTOPDIR/syscall" ]
|
||||
include_dirs = [
|
||||
"$LITEOSTOPDIR/syscall",
|
||||
"$LITEOSTOPDIR/fs/zpfs/include",
|
||||
]
|
||||
public_configs = [ ":public" ]
|
||||
}
|
||||
|
||||
|
|
|
@ -101,6 +101,7 @@ LOCAL_INCLUDE := \
|
|||
-I $(LITEOSTOPDIR)/drivers/mtd/multi_partition/include\
|
||||
-I $(LITEOSTOPDIR)/fs/vfs/include/operation\
|
||||
-I $(LITEOSTOPDIR)/syscall\
|
||||
-I $(LITEOSTOPDIR)/fs/zpfs/include
|
||||
|
||||
ifeq ($(LOSCFG_FS_FAT), y)
|
||||
LOCAL_INCLUDE += -I $(LITEOSTHIRDPARTY)/FatFs/source
|
||||
|
|
|
@ -159,6 +159,7 @@ int VnodeDevInit(void);
|
|||
int VnodeAlloc(struct VnodeOps *vop, struct Vnode **vnode);
|
||||
int VnodeFree(struct Vnode *vnode);
|
||||
int VnodeLookup(const char *path, struct Vnode **vnode, uint32_t flags);
|
||||
int VnodeLookupAt(const char *path, struct Vnode **vnode, uint32_t flags, struct Vnode *orgVnode);
|
||||
int VnodeHold(void);
|
||||
int VnodeDrop(void);
|
||||
void VnodeRefDec(struct Vnode *vnode);
|
||||
|
|
|
@ -360,14 +360,21 @@ STEP_FINISH:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int VnodeLookup(const char *path, struct Vnode **result, uint32_t flags)
|
||||
int VnodeLookupAt(const char *path, struct Vnode **result, uint32_t flags, struct Vnode *orgVnode)
|
||||
{
|
||||
int ret;
|
||||
struct Vnode *startVnode = NULL;
|
||||
char *normalizedPath = NULL;
|
||||
|
||||
int ret = PreProcess(path, &startVnode, &normalizedPath);
|
||||
if (ret != LOS_OK) {
|
||||
goto OUT_FREE_PATH;
|
||||
if (orgVnode != NULL) {
|
||||
startVnode = orgVnode;
|
||||
normalizedPath = strdup(path);
|
||||
} else {
|
||||
ret = PreProcess(path, &startVnode, &normalizedPath);
|
||||
if (ret != LOS_OK) {
|
||||
PRINT_ERR("[VFS]lookup failed, invalid path err = %d\n", ret);
|
||||
goto OUT_FREE_PATH;
|
||||
}
|
||||
}
|
||||
|
||||
if (normalizedPath[0] == '/' && normalizedPath[1] == '\0') {
|
||||
|
@ -404,6 +411,11 @@ OUT_FREE_PATH:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int VnodeLookup(const char *path, struct Vnode **vnode, uint32_t flags)
|
||||
{
|
||||
return VnodeLookupAt(path, vnode, flags, NULL);
|
||||
}
|
||||
|
||||
static void ChangeRootInternal(struct Vnode *rootOld, char *dirname)
|
||||
{
|
||||
int ret;
|
||||
|
|
|
@ -33,7 +33,9 @@ module_switch = defined(LOSCFG_FS_ZPFS)
|
|||
module_name = get_path_info(rebase_path("."), "name")
|
||||
kernel_module(module_name) {
|
||||
sources = [
|
||||
"vfs_zpfs.c",
|
||||
"zpfs.c",
|
||||
"src/vfs_zpfs.c",
|
||||
"src/zpfs.c",
|
||||
]
|
||||
|
||||
include_dirs = [ "include" ]
|
||||
}
|
||||
|
|
|
@ -31,14 +31,10 @@ include $(LITEOSTOPDIR)/config.mk
|
|||
|
||||
MODULE_NAME := $(notdir $(shell pwd))
|
||||
|
||||
LOCAL_SRCS := $(wildcard *.c)
|
||||
LOCAL_INCLUDE = \
|
||||
-I $(LITEOSTOPDIR)/fs/include \
|
||||
-I $(LITEOSTOPDIR)/fs/zpfs \
|
||||
-I $(LITEOSTOPDIR)/../../third_party/NuttX/liteos/fs/include\
|
||||
-I $(LITEOSTOPDIR)/../../third_party/NuttX/liteos/fs/include/inode
|
||||
LOCAL_SRCS := $(wildcard src/*.c)
|
||||
LOCAL_INCLUDE := \
|
||||
-I $(LITEOSTOPDIR)/fs/zpfs/include
|
||||
|
||||
LOCAL_FLAGS := $(LITEOS_GCOV_OPTS)
|
||||
LOCAL_FLAGS := $(LOCAL_INCLUDE) $(LITEOS_GCOV_OPTS)
|
||||
|
||||
include $(MODULE)
|
||||
|
||||
|
|
|
@ -81,6 +81,17 @@ STATIC INT32 AddEmmcParts(INT32 rootAddr, INT32 rootSize, INT32 userAddr, INT32
|
|||
return LOS_NOK;
|
||||
}
|
||||
|
||||
#ifdef LOSCFG_PLATFORM_PATCHFS
|
||||
UINT64 patchStartCnt = userAddr / EMMC_SEC_SIZE;
|
||||
UINT64 patchSizeCnt = PATCH_SIZE / EMMC_SEC_SIZE;
|
||||
ret = add_mmc_partition(emmc, patchStartCnt, patchSizeCnt);
|
||||
if (ret != LOS_OK) {
|
||||
PRINT_ERR("Failed to add mmc patch partition!\n");
|
||||
return LOS_NOK;
|
||||
}
|
||||
userAddr += PATCH_SIZE;
|
||||
#endif
|
||||
|
||||
UINT64 storageStartCnt = userAddr / EMMC_SEC_SIZE;
|
||||
UINT64 storageSizeCnt = userSize / EMMC_SEC_SIZE;
|
||||
UINT64 userdataStartCnt = storageStartCnt + storageSizeCnt;
|
||||
|
@ -235,6 +246,35 @@ STATIC INT32 MountPartitions(CHAR *fsType, UINT32 mountFlags)
|
|||
return ret;
|
||||
}
|
||||
|
||||
#ifdef LOSCFG_STORAGE_EMMC
|
||||
#ifdef LOSCFG_PLATFORM_PATCHFS
|
||||
/* Mount patch */
|
||||
ret = mkdir(PATCH_DIR_NAME, DEFAULT_MOUNT_DIR_MODE);
|
||||
if ((ret != LOS_OK) && ((err = get_errno()) != EEXIST)) {
|
||||
PRINT_ERR("Failed to mkdir %s, errno %d: %s\n", PATCH_DIR_NAME, err, strerror(err));
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = mount(PATCH_DEV_NAME, PATCH_DIR_NAME, fsType, 0, DEFAULT_MOUNT_DATA);
|
||||
if ((ret != LOS_OK) && ((err = get_errno()) == ENOTSUP)) {
|
||||
ret = format(PATCH_DEV_NAME, 0, FM_FAT32);
|
||||
if (ret != LOS_OK) {
|
||||
PRINT_ERR("Failed to format %s\n", PATCH_DEV_NAME);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = mount(PATCH_DEV_NAME, PATCH_DIR_NAME, fsType, 0, DEFAULT_MOUNT_DATA);
|
||||
if (ret != LOS_OK) {
|
||||
err = get_errno();
|
||||
}
|
||||
}
|
||||
if (ret != LOS_OK) {
|
||||
PRINT_ERR("Failed to mount %s, errno %d: %s\n", PATCH_DIR_NAME, err, strerror(err));
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Mount userfs */
|
||||
ret = mkdir(STORAGE_DIR_NAME, DEFAULT_MOUNT_DIR_MODE);
|
||||
if ((ret != LOS_OK) && ((err = get_errno()) != EEXIST)) {
|
||||
|
|
|
@ -38,6 +38,9 @@
|
|||
#define STORAGE_DIR_NAME "/storage"
|
||||
#ifdef LOSCFG_STORAGE_EMMC
|
||||
#define USERDATA_DIR_NAME "/userdata"
|
||||
#ifdef LOSCFG_PLATFORM_PATCHFS
|
||||
#define PATCH_DIR_NAME "/patch"
|
||||
#endif
|
||||
#endif
|
||||
#define DEFAULT_MOUNT_DIR_MODE 0755
|
||||
#define DEFAULT_MOUNT_DATA NULL
|
||||
|
@ -64,11 +67,20 @@
|
|||
#define USERFS_SIZE (CFIFLASH_CAPACITY - ROOTFS_ADDR - ROOTFS_SIZE)
|
||||
#elif defined (LOSCFG_STORAGE_EMMC)
|
||||
#define ROOT_DEV_NAME "/dev/mmcblk0p0"
|
||||
#ifdef LOSCFG_PLATFORM_PATCHFS
|
||||
#define PATCH_DEV_NAME "/dev/mmcblk0p1"
|
||||
#define USER_DEV_NAME "/dev/mmcblk0p2"
|
||||
#define USERDATA_DEV_NAME "/dev/mmcblk0p3"
|
||||
#else
|
||||
#define USER_DEV_NAME "/dev/mmcblk0p1"
|
||||
#define USERDATA_DEV_NAME "/dev/mmcblk0p2"
|
||||
#endif
|
||||
#define ROOTFS_ADDR 0xA00000
|
||||
#define ROOTFS_SIZE 0x1400000
|
||||
#define USERFS_SIZE 0x3200000
|
||||
#ifdef LOSCFG_PLATFORM_PATCHFS
|
||||
#define PATCH_SIZE 0x200000
|
||||
#endif
|
||||
#ifdef DEFAULT_MOUNT_DIR_MODE
|
||||
#undef DEFAULT_MOUNT_DIR_MODE
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue