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

2019-07-12 16:05发布

使用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(" ,cunzai %s,%s ",PATH,DEV); system("mkdir /mnt/nfs"); sprintf(chOrder,"mount -t vfat %s /mnt/nfs/",DEV); system(chOrder); printf(" ,cunzai %s ",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 "); //curst = 1; //printf("cur = %d,old = %d ",curst,oldst); break;//文件存在则跳出子循环 } else { continue; //不存在继续扫描下一个分区 } } if(fd== 0) //判断文件是否存在 break; //存在则跳出第二个for循环,不存在则继续下一个磁盘扫描 } if(fd== -1)//判断文件是否存在 { printf("can not find any u pan! "); //这表示所有磁盘所有分区都没有UpDate文件 } else { close(fd); //关闭文件描述符 #if 0 sprintf(cmd,"sh %s %s",PATH,DEV); //设计执行脚本命令,例如"sh /media/sda1/UpDate /media/sda1" system(cmd); //执行该脚本 #endif } return 0; }