当前位置: 技术问答>linux和unix
USB的自动挂载的实现
来源: 互联网 发布时间:2016-05-09
本文导语: 在基于ARM9的linux2.6.13内核上。 如何判断有usb已经插入。 我想通过程序实现USB的自动挂载。希望有合理可行的方法。 如何保护我写usb的程序在usb被拔走以后安全运行。 | 我在嵌入式程序里用...
在基于ARM9的linux2.6.13内核上。
如何判断有usb已经插入。
我想通过程序实现USB的自动挂载。希望有合理可行的方法。
如何保护我写usb的程序在usb被拔走以后安全运行。
如何判断有usb已经插入。
我想通过程序实现USB的自动挂载。希望有合理可行的方法。
如何保护我写usb的程序在usb被拔走以后安全运行。
|
我在嵌入式程序里用的代码, 应该和你需求是差不多道理的。 你看一下。
char ret[1024];
char *DoSysCmd(char * cmdline)
{
FILE *fp;
char line[32];
char cmdtmp[256];
memset(cmdtmp,0x00,256);
sprintf(cmdtmp,"%s 2>&1",cmdline);
memset(ret,0x00,sizeof(ret));
fp = popen(cmdtmp, "r");
while ( fgets( line, sizeof(line), fp))
{
sprintf(ret ,"%s%s",ret,line);
}
pclose(fp);
return &ret;
}
//把U盘上的数据导出到U盘
void DataExporter(void)
{
char *result;
char *result_usb0;
char *result_umount;
char *result_mount;
char *result_check1;
char *result_check2;
char *result_check3;
show_Info("检查是否存在可移动存储设备......");
result=DoSysCmd("cat /proc/scsi/scsi");
if (0==strcmp(result,"Attached devices: nonen"))
{
show_Info("对不起,没有发现任何设备!");
return;
}
result_usb0=DoSysCmd("cat /proc/scsi/usb-storage-0/0");
if (NULL==strstr(result_usb0 ,"Attached: Yes"))
{
show_Info(result_usb0);
//show_Info("对不起,设备已拔出.");
return;
}
show_Info("存在可移动存储设备,正在尝试挂载...... ");
result_umount= DoSysCmd("umount "FILENAME_USBDIR );
result_mount=DoSysCmd("mount -t vfat /dev/scsi/host0/bus0/target0/lun0/part1 "FILENAME_USBDIR);
if ( NULL!=strstr(result_mount ,"failed:"))
{
result_check1=DoSysCmd("mount");
if (NULL!=strstr(result_check1,"/dev/scsi/host0/bus0/target0/lun0/part1 on "FILENAME_USBDIR))
{
show_Info("对不起,未能挂载可移动存储设备!");
return;
}
}
show_Info("成功挂载可移动存储设备,正在准备复制文件..... ");
result_check2=DoSysCmd("ls "FILENAME_USBDIR""FILENAME_ARCATUSB);
if ( NULL!=strstr(result_check2,"No such file or directory"))
{
if ( NULL!=strstr(DoSysCmd("mkdir "FILENAME_USBDIR""FILENAME_ARCATUSB),"mkdir:"))
{
show_Info("对不起,创建目录时遇到问题!");
return;
}
}
result_check3=DoSysCmd("ls "FILENAME_USBDIR""FILENAME_ARCATUSB);
if (strlen(result_check3)>1 )
{
echo("%s",result_check3);
if ( NULL!=strstr(result_check3,"No such file or directory"))
{
show_Info("对不起,目录创建失败!");
return;
}
else
{
show_Info("对不起,您可移动设备的目录【"FILENAME_ARCATUSB"】非空!");
return;
}
/*
else if ( NULL!=strstr(DoSysCmd(" rm "FILENAME_USBDIR""FILENAME_ARCATUSB"*"),"cannot remove"))
{
show_Info("对不起,清空目录时遇到问题!");
return;
}
*/
}
show_Info("正在复制文件..... ");
if ( NULL!=strstr(DoSysCmd("cp "FILENAME_SEND_MSG_BACKUP_FILE_Archive"* "FILENAME_USBDIR""FILENAME_ARCATUSB ),"cp:"))
{
show_Info("对不起,复制文件时遇到问题!");
return;
}
show_Info("正在清理文件..... ");
if ( NULL!=strstr(DoSysCmd("rm "FILENAME_SEND_MSG_BACKUP_FILE_Archive"* "),"rm:"))
{
show_Info("对不起,移除文件时遇到问题!");
return;
}
show_Info("文件复制完成!请拔出您的可移动存储设备!按【下班】键退出!");
}
|
通过调用fdisk -l
如果有新的硬盘设置就认为是有usb插入
如果有新的硬盘设置就认为是有usb插入
|
可以移植automonter.
如果不想使用别人的程序,那就间隔一定时间判断/dev/scsi下边是否有相应设备文件出现,出现就自己调用函数挂载就可以了。这样做有一样好处,就是和自己的程序做到了一起。代码也用不了几行。
如果不想使用别人的程序,那就间隔一定时间判断/dev/scsi下边是否有相应设备文件出现,出现就自己调用函数挂载就可以了。这样做有一样好处,就是和自己的程序做到了一起。代码也用不了几行。
|
Usbmount 工具
如果有驱动源码的话就自己写个更简单的挂载
如果有驱动源码的话就自己写个更简单的挂载
|
1.编译内核,选择usb驱动支持,
2.编译内核,选择fat/ntfs文件格式支持,修改fat的codepage=936,iocharset=utf8,(iocharset需要选择你的locale设置,建议使用utf8。)
2.安装hal自动挂载
3.安装ntfs-3g,使支持ntfs分区格式。
使用 fdisk -l, 可以查看你系统已经认识到的 disk区
2.编译内核,选择fat/ntfs文件格式支持,修改fat的codepage=936,iocharset=utf8,(iocharset需要选择你的locale设置,建议使用utf8。)
2.安装hal自动挂载
3.安装ntfs-3g,使支持ntfs分区格式。
使用 fdisk -l, 可以查看你系统已经认识到的 disk区
|
hal 或者ivman后台服务启动了没有?