Exemple #1
0
static int _MsApi_BrickTerminator_Recover_NonReserve ()
{
    char cmd[CMD_BUF] = {};
    const char* BOOT_RECOVER_BRICK_BACKUP_VOLUME = "brickbackup";
    const char* BOOT_RECOVER_BRICK_BACKUP_FILE = "/MstarUpgrade_backup.bin";

    vfs_umount();
    if(0 == vfs_mount((char*)BOOT_RECOVER_BRICK_BACKUP_VOLUME))
    {
        sprintf(cmd, "bstar %s", BOOT_RECOVER_BRICK_BACKUP_FILE);
        UBOOT_ERROR("%s: ERROR: VFS failed, at %d\n", __func__, __LINE__);
        UBOOT_DEBUG("%s: DO BRICK RESERVE RECOVER, at %d\n", __func__, __LINE__);
        //NOTE: do partition recover
        run_command(cmd, 0);
        vfs_umount();
    }
    return 0;
}
Exemple #2
0
static int _MsApi_BrickTerminator_Recover_Reserve ()
{
    MS_BOOL bNeedReburn = TRUE;
    U32 u32PathSize = 0;
    const char* BOOT_RECOVER_BRICK_RESERVE_VOLUME = "brickreserve";
    const char* BOOT_RECOVER_BRICK_BACKUP_VOLUME = "brickbackup";
    const char* BOOT_RECOVER_BRICK_RESERVE_FILE = "/.ready";
    const char* BOOT_RECOVER_BRICK_BACKUP_FILE = "/MstarUpgrade_reserve.bin";
    if(0 == vfs_mount((char*)BOOT_RECOVER_BRICK_RESERVE_VOLUME))
    {
        u32PathSize = vfs_getsize((char*)BOOT_RECOVER_BRICK_RESERVE_FILE);
        if(0 < u32PathSize)
        {
            bNeedReburn = FALSE;
            UBOOT_DEBUG("%s: u32PathSize: %u, at %d\n", __func__, u32PathSize, __LINE__); // DBG
        }
        else // TODO: remove after debug
        {
            UBOOT_ERROR("%s: ERROR: vfs_getsize failed, at %d\n", __func__, __LINE__);
        }
    }
    if(TRUE == bNeedReburn)
    {
        char cmd[CMD_BUF] = {};
        vfs_umount();
        if(0 == vfs_mount((char*)BOOT_RECOVER_BRICK_BACKUP_VOLUME))
        {
            sprintf(cmd, "bstar %s", BOOT_RECOVER_BRICK_BACKUP_FILE);
            UBOOT_ERROR("%s: ERROR: VFS failed, at %d\n", __func__, __LINE__);
            UBOOT_DEBUG("%s: DO BRICK RESERVE RECOVER, at %d\n", __func__, __LINE__);
            //NOTE: do partition recover
            run_command(cmd, 0);
            vfs_umount();
        }
    }
    else
    {
        UBOOT_DEBUG("%s: '%s' is ok, no need to re-burn, at %d\n", __func__, BOOT_RECOVER_BRICK_RESERVE_VOLUME, __LINE__);
        vfs_umount();
    }
    return 0;
}
Exemple #3
0
int sys_umount(const char* dev) {
	if((current_task->uid != TASK_ROOT_UID) && (current_task->gid != TASK_ROOT_GID)) {
		errno = EPERM;
		return -1;
	}

	inode_t* dev_ino = NULL;

	int devfd = sys_open(dev, O_RDONLY, 0);
	if(devfd >= 0) {
		dev_ino = current_task->fd[devfd].inode;
		sys_close(devfd);
	}

	return vfs_umount(dev_ino);
});
Exemple #4
0
/*Unmount a device*/
void umount(int i) { 
  char *args = (char *)i;
  char output[MAX_PATH+1];
  if(! args) { 
    goto out_usage;
  }
  while(*args && isspace(*args) ) ++args;
  if(! *args) {
  out_usage:
    printf("usage: umount mountpoint\n");
    goto out;
  }
  trim_file_separator(args,output,sizeof(output)-1);
  vfs_umount(output);
 out:;
}
Exemple #5
0
int LoadMMAP(void)
{

    UBOOT_TRACE("IN\n");
  

    if(vfs_mount(CONFIG)!=0)
    {
        UBOOT_ERROR("mount %s fail\n",CONFIG);
        return -1;    
    }
    
    mmap_buffer_size=vfs_getsize(MMAP_FILE_NAME);
    if(mmap_buffer_size==0)
    {       
        UBOOT_ERROR("get the file size of %s fail\n",MMAP_FILE_NAME);
        return -1;
    }

    mmap_buffer=malloc(mmap_buffer_size);
    UBOOT_DEBUG("mmmap_buffer at 0x%x\n",(unsigned int)mmap_buffer);
    if(mmap_buffer==NULL)
    {
        UBOOT_ERROR("malloc for mmap_buffer fail\n");
        return NULL;
    }

    if(vfs_read((char *)mmap_buffer,MMAP_FILE_NAME,0,mmap_buffer_size)!=0)
    {
        free(mmap_buffer);
        mmap_buffer=NULL;
        UBOOT_ERROR("read %s fail\n",MMAP_FILE_NAME);
        return -1;
    }

    vfs_umount();
    

    UBOOT_TRACE("OK\n");    
    return 0;
}
Exemple #6
0
int vfs_mount(char *volume)
{
    char *buffer=NULL;
    char *pEnv=NULL;
    char *pStr=NULL;
    char *pStart=NULL;
    char *pEnd=NULL;    
    int ret=-1;
    UBOOT_TRACE("IN\n");

    if(volume==NULL)
    {
        bVfsReady=FALSE;
        UBOOT_ERROR("Input parameter 'volume' is a null pointer\n");
        return -1;
    }

    buffer=malloc(CMD_BUF);
    if(buffer==NULL)
    {
        bVfsReady=FALSE;        
        UBOOT_ERROR("malloc buffer fail\n");        
        return -1;
    }
     
    ret=vfs_umount();
    if(ret==-1)
    {
        free(buffer);
        bVfsReady=FALSE;   
        UBOOT_ERROR("umount previous filesystem fail\n");
        return -1;
    }
    
    
    //Assume this volume is in UBI partition
    memset(buffer,0,CMD_BUF);    
    snprintf(buffer,CMD_BUF,"ubi part %s",UBIPART);
    ret=run_command(buffer,0);

    if(ret!=-1)
    {
        memset(buffer,0,CMD_BUF);
        snprintf(buffer,CMD_BUF,"ubifsmount %s",volume);
        UBOOT_DEBUG("cmd=%s\n",buffer);
        ret=run_command(buffer,0);
        if(ret==-1)
        {
            UBOOT_ERROR("ubifsmount fail (Assume this volume is in UBI(or ubi) partition)\n");
        }
        else
        {
            free(buffer);
            bVfsReady=TRUE;              
            UBOOT_TRACE("OK\n");
            return ret;
        }
    }

    
    
    //Check ever partition 
    pEnv=getenv("mtdparts");
    if(pEnv==NULL)
    {
        free(buffer);
        bVfsReady=FALSE;          
        UBOOT_ERROR("No MTD partition\n");
        return ret;
    }
    else
    {
        pStr=malloc(strlen(pEnv)+1);
        if(pStr==NULL)
        {
            free(buffer);
            bVfsReady=FALSE;              
            UBOOT_ERROR("malloc fail\n");
            return ret;
        }
        memset(pStr,0,strlen(pEnv)+1);
        memcpy(pStr,pEnv,strlen(pEnv));
        pStart=pStr;
        while(1)
        {
            pStart=strchr(pStart,'(');
            
            if(pStart==NULL)
            {
                free(buffer);    
                bVfsReady=FALSE;                  
                UBOOT_ERROR("error partition symbol\n");
                return -1;
            }
            else
            {
                UBOOT_DEBUG("pStart=%s\n",pStart);
                pEnd=strchr(pStart,')');
                                
                if(pEnd==NULL)
                {
                    free(buffer);
                    bVfsReady=FALSE;                      
                    UBOOT_ERROR("error partition symbol\n");
                    return -1;
                }
                else
                {
                    UBOOT_DEBUG("pEnd=%s\n",pEnd);
                    *pEnd='\0';
                    memset(buffer,0,CMD_BUF);
                    snprintf(buffer,CMD_BUF,"ubi part %s",pStart+1);
                    UBOOT_DEBUG("cmd=%s\n",buffer);
                    ret=run_command(buffer,0);
                    if(ret!=-1)
                    {
                        memset(buffer,0,CMD_BUF);
                        snprintf(buffer,CMD_BUF,"ubifsmount %s",volume);
                        UBOOT_DEBUG("cmd=%s\n",buffer);
                        ret=run_command(buffer,0);
                        if(ret!=-1)
                        {
                            break;
                        }
                    }
                    pStart=pEnd+1;
                }
            }
        }
    }
    free(buffer); 
    bVfsReady=TRUE;    
    UBOOT_TRACE("OK\n");    
    return 0;
}