简单的:嵌入式linux下u盘升级的设计
使用u盘,把相应的应用程序,比如:myapp文件拷到linux系统下。插入u盘,开机后,主动监测u盘中是否有相应的应用程序myapp,如果有,就拷贝到相应的路径下,代替掉原来的应用程序文件,重启后,就是启用新的应用程序文件。代码如下所示 :#include <stdio.h>#include <stdlib.h>#include &l
·
使用u盘,把相应的应用程序,比如:myapp文件拷到linux系统下。插入u盘,开机后,主动监测u盘中是否有相应的应用程序myapp,如果有,就拷贝到相应的路径下,代替掉原来的应用程序文件,重启后,就是启用新的应用程序文件。
代码如下所示 :
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
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;
}
更多推荐
已为社区贡献2条内容
所有评论(0)