当前位置:  技术问答>linux和unix

USB的自动挂载的实现

    来源: 互联网  发布时间:2016-05-09

    本文导语:  在基于ARM9的linux2.6.13内核上。 如何判断有usb已经插入。 我想通过程序实现USB的自动挂载。希望有合理可行的方法。 如何保护我写usb的程序在usb被拔走以后安全运行。 | 我在嵌入式程序里用...

在基于ARM9的linux2.6.13内核上。
如何判断有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插入

|
可以移植automonter.
如果不想使用别人的程序,那就间隔一定时间判断/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区

|
hal 或者ivman后台服务启动了没有?

    
 
 

您可能感兴趣的文章:

  • 挂载USB后,打开USB时找不到文件,都是文件夹,求解!
  • 利用 mount 函数 如何 挂载 USB 设备 ntfs 分区?
  • linux下usb挂载不了,请教???
  • Linux下挂载Usb
  • 请问专家!怎么在red hatlinux下挂载USB呢?
  • 关于usb挂载的问题!
  • @_@fstab挂载usb接口移动硬盘失败,以致inittab出错!如何解决?
  • linux挂载不了USB
  • red hat linux9下挂载USB硬盘的问题
  • 将Rethat内核从2.4升级到到2.6.12.3后,系统启动的时候无法挂载usb,启动后无法mount U盘。
  • linux 下USB设备挂载问题
  • USB光驱无法挂载??
  • USB挂载时提示“No Such Device”
  • 挂载USB盘用ls -l 查看大小发现和实际大小有很大区别.
  • 嵌入式下USB或移动硬盘的自动挂载???
  • 在ubuntu环境下实现自动检测usb设备插入,拔除?的程序呢?
  • USB设备,这样的想法能否实现
  • 计算机没有并口,如何用USB或以太网实现jtag调试
  • 我怎么才能实现用windows读取linux下的usb盘符中的资料?
  • 如何实现插上USB存储设备后,系统自动加载
  • 想重新编译usb-storage.o,如何实现
  • usb gadget 驱动实现上下位传输数据问题
  • 如何实现插上多个USB存储设备,程序区分他们的一一对应关系?
  • 求助:XP的虚拟机kbuntu 8.10怎样实现usb无线上网?
  • 用minicom下载内核时怎么实现DNW里“USB port->Transmit”选择镜像文件的功能?
  • android USB如何修改VID具体实现
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • usb接口与usb transceiver的问题
  • 提问:arm9上对usb设备usb四根线数据的截取
  • USB同一个端口,USB协议不同对应不同的总线
  • linux主机检测不到开发板(USB-USB连接)
  • usb键盘和usb鼠标对应的设备文件是哪两个?
  • [求助]关于usb-serial---------usb转串口没有设备
  • USB驱动程序开发中,如何读取USB设备数据??
  • usb.c:usb 2(vend...) is not claimed by any active driver???
  • 有谁能告诉我USB设备驱动和USB gadget驱动究竟有什么不同么?
  • 安装usb-modeswitch时提示 找不到usb.h
  • 请教usb host和usb slave的区别
  • linux usb驱动中的usb0端口接收数据问题
  • 有两个USB键盘怎么用自己写的USB键盘驱动程序只替换其中一个驱动?
  • 请问如何在USB上安装Linux,并通过USB引导
  • usb驱动与umount的问题!读懂USB驱动的大牛过来瞧瞧啊
  • (cdc-acm.c)usb转串口驱动中usb读数据问题:usb->status=-2
  • 对于linux下的usb蓝牙适配器驱动hci_usb.c中的一些宏(如HCI_RESET)是什么意思?
  • linux设备驱动程序 usb-skeleton这个程序,能不能用具体的usb设备测试它的读写功能啊??
  • 如何禁用USB鼠标和键盘,但是USB存储设备还可以使用??
  • 任桥伟《我是USB》usb_parse_confiuratiion中一小段代码的疑问


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3