简单的:嵌入式linux下u盘升级的设计

使用u盘,把相应的应用程序,比如:myapp文件拷到linux系统下。插入u盘,开机后,主动监测u盘中是否有相应的应用程序myapp,如果有,就拷贝到相应的路径下,代替掉原来的应用程序文件,重启后,就是启用新的应用程序文件。

代码如下所示 :

#include   
#include   
#include   
#include   
#include   
#include   
#include   

int u_disk_update()  
{  
	int fd=1;  
	unsigned char DEV[64];  //u盘等磁盘设备的设备文件路径  
	unsigned char PATH[64]; //Update文件的路径  
	unsigned char cmd[64];  //系统调用的命令  
	char chOrder[50];//="mount -t vfat /dev/uba1 /mnt/nfs";
	char chOrder1[50];//="cp -f /mnt/nfs/images/* /mnt/jffs2/";
	int i=0;  
	int j=0;      
	
	unsigned char ch[8]={'a','b','c','d','e','f','g','h'}; //sda,sdb,sdc  

    for(j=0;j<4;j++)//最多支持4个分区 
    {     
        for(i=0;i<8;i++)//最多8个硬盘  
        {    
			sprintf(PATH,"/dev/sd%c%d",ch[i],j); //"/dev/sda1/update","/dev/sda2/update"...  
			sprintf(DEV,"/dev/sd%c%d",ch[i],j);  //对应的设备文件路径"/dev/sda1","/dev/sda2"...  
			//fd=open(PATH,O_RDWR);    //打开文件全路径  
			fd=access(PATH,F_OK);
            if( fd== 0)//判断usb设备是否存在
            {
				printf("\n,cunzai %s,%s\n",PATH,DEV);
								
				system("mkdir /mnt/nfs");
				sprintf(chOrder,"mount -t vfat %s /mnt/nfs/",DEV);
				system(chOrder);
				printf("\n,cunzai %s\n",chOrder);
				sleep(3);
				sprintf(chOrder1,"cp -f /mnt/nfs/update/myapp /mnt/sd/");
				system(chOrder1);
				//system("chmod 777 /mnt/nfs/*");
				sleep(3);
				system("chmod 777 /mnt/sd/*");
				system("umount /mnt/nfs/");
				//printf("/dev/uba1 exist\n");
				//curst = 1;
				//printf("cur = %d,old = %d\n",curst,oldst);
				break;//文件存在则跳出子循环 

            }
            else
            {     
				continue;  //不存在继续扫描下一个分区	  
            }  
        }  
        if(fd== 0)    //判断文件是否存在  
            break;   //存在则跳出第二个for循环,不存在则继续下一个磁盘扫描  
    }
    
    if(fd== -1)//判断文件是否存在  
    { 
        printf("can not find any u pan!\n ");  //这表示所有磁盘所有分区都没有UpDate文件  
    }  
    else
    {     
		close(fd);  //关闭文件描述符       
        #if 0
        sprintf(cmd,"sh %s %s",PATH,DEV);  //设计执行脚本命令,例如"sh /media/sda1/UpDate /media/sda1"  
        system(cmd);   //执行该脚本  
        #endif
    }  
    return 0;  
}  

你可能感兴趣的:(c,linux)