32#if defined(LOSCFG_STORAGE_SPINOR)
41 if (strncmp(p, partInfoName, strlen(partInfoName)) == 0) {
42 value = p + strlen(partInfoName);
43 offset = strspn(value, DEC_NUMBER_STRING);
44 if (strcmp(p + strlen(p) - 1,
"M") == 0) {
45 if ((offset < strlen(value) - 1) || (sscanf_s(value,
"%d", partInfo) <= 0)) {
48 *partInfo = *partInfo * BYTES_PER_MBYTE;
49 }
else if (strcmp(p + strlen(p) - 1,
"K") == 0) {
50 if ((offset < (strlen(value) - 1)) || (sscanf_s(value,
"%d", partInfo) <= 0)) {
53 *partInfo = *partInfo * BYTES_PER_KBYTE;
54 }
else if (sscanf_s(value,
"0x%x", partInfo) > 0) {
55 value += strlen(
"0x");
56 if (strspn(value, HEX_NUMBER_STRING) < strlen(value)) {
67 PRINT_ERR(
"Invalid format: %s\n", p + strlen(partInfoName));
78 if ((partInfo->
storageType == NULL) && (strncmp(p, storageTypeArgName, strlen(storageTypeArgName)) == 0)) {
79 partInfo->
storageType = strdup(p + strlen(storageTypeArgName));
86 if ((partInfo->
fsType == NULL) && (strncmp(p, fsTypeArgName, strlen(fsTypeArgName)) == 0)) {
87 partInfo->
fsType = strdup(p + strlen(fsTypeArgName));
88 if (partInfo->
fsType == NULL) {
115 CHAR *cmdLine = NULL;
120 if (cmdLine == NULL) {
121 PRINT_ERR(
"Malloc cmdLine space failed!\n");
125#if defined(LOSCFG_STORAGE_SPINOR)
128 PRINT_ERR(
"Get spinor mtd failed!\n");
131 cmdLineLen = mtd->
read(mtd, COMMAND_LINE_ADDR, COMMAND_LINE_SIZE, cmdLine);
132 if ((cmdLineLen != COMMAND_LINE_SIZE)) {
133 PRINT_ERR(
"Read spinor command line failed!\n");
140 for (i = 0; i < cmdLineLen; i += len + 1) {
141 len = strlen(cmdLine + i);
142 tmp = strstr(cmdLine + i, argName);
144 *args = strdup(tmp + strlen(argName));
153 PRINTK(
"no patch partition bootargs\n");
163 CHAR *argsBak = NULL;
171 p = strsep(&args,
" ");
176 p = strsep(&args,
" ");
182 PRINT_ERR(
"Cannot find %s type\n", partInfo->
partName);
185 PRINT_ERR(
"Invalid %s information!\n", partInfo->
partName);
190 if (partInfo->
fsType != NULL) {
201 const CHAR *devName = NULL;
203 if (strcmp(partInfo->
storageType, STORAGE_TYPE) == 0) {
204#if defined(LOSCFG_STORAGE_SPINOR)
207 PRINT_ERR(
"Failed to add %s partition! error = %d\n", partInfo->
partName, ret);
209 if (partInfo->
devName != NULL) {
224#if defined(LOSCFG_STORAGE_SPINOR)
227 int err = get_errno();
228 PRINT_ERR(
"Failed to delete %s, errno %d: %s\n", partInfo->
devName, err, strerror(err));
INT32 add_mtd_partition(const CHAR *type, UINT32 startAddr, UINT32 length, UINT32 partitionNum)
Add a partition.
INT32 delete_mtd_partition(UINT32 partitionNum, const CHAR *type)
Delete a partition.
INT32 GetPartitionInfo(struct PartitionInfo *partInfo)
const CHAR * GetDevNameOfPartition(const struct PartitionInfo *partInfo)
STATIC INT32 MatchPartInfo(CHAR *p, struct PartitionInfo *partInfo)
STATIC INT32 GetPartitionBootArgs(const CHAR *argName, CHAR **args)
INT32 ResetDevNameofPartition(const struct PartitionInfo *partInfo)
STATIC INT32 MatchPartPos(CHAR *p, const CHAR *partInfoName, INT32 *partInfo)
void * malloc(size_t size)
动态分配内存块大小
void free(void *ptr)
释放ptr所指向的内存空间
void * GetMtd(const char *type)
int(* read)(struct MtdDev *mtd, UINT64 start, UINT64 len, const char *buf)
读操作
const CHAR * storageTypeArgName
const CHAR * fsTypeArgName
const CHAR * cmdlineArgName
命令行参数名称
const CHAR * partName
分区名称
const CHAR * partSizeArgName