您尚未登录。

楼主 #1 2019-07-08 16:52:53

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

g_file_storage的同步问题

在n32926上面用g_file_storage.ko可以实现虚拟U盘功能。

基本操作没有问题,但是存在一个同步问题,比如,在pc端对某文件进行了删除操作,此时如果不重新插拔,在arm端仍然会认为该文件存在。

是不是g_file_storage设计上就是这样的?还是有什么办法设置下,让文件删除、修改等操作能立即同步到arm端?

离线

楼主 #3 2019-07-08 16:58:14

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

Re: g_file_storage的同步问题

我看nuvoton sdk里面的方法首先是unmount掉SD卡,然后再执行insmod /usr/g_file_storage.ko file=/dev/mmcblk0p1 removable=1,相当于是直接禁止arm端访问了。     

如果要同时访问,该怎么操作?

离线

楼主 #5 2019-07-08 17:04:49

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

Re: g_file_storage的同步问题

这篇文章也这是提到了这个问题,并没有很好解决。arm端并不知道pc端什么时候会修改卡里面的内容

离线

楼主 #7 2019-07-08 17:07:31

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

Re: g_file_storage的同步问题

早期的Android确实是这么干,pc连上手机后,直接就禁止访问外置卡了

离线

楼主 #9 2019-07-09 11:51:53

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

Re: g_file_storage的同步问题

看来这个方式只能尽量避免了。
昨天查了下hotplug相关资料,发现基本上针对usb host挂载wifi、u盘之类的应用。不知道针对usb slave是怎么实现hotplug的?

我尝试使用网上提到的NETlink方式截获内核消息,在虚拟机上试验,能截获到U盘插拔动作。在arm linux端试验,无法截获usb slave的插拔。不知道是不是内核配置问题?

int main(void)
{
    struct sockaddr_nl clt;
    struct timeval t1;
    fd_set fd;
    int buf_size = 2048, len, ret, usb_test;
    //创建套接字
    usb_test = socket(AF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);
    memset(&clt, 0, sizeof(clt));
    clt.nl_pid = getpid();
    clt.nl_family = AF_NETLINK;
    clt.nl_groups = 1;
    setsockopt(usb_test, SOL_SOCKET, SO_RCVBUF, &buf_size, sizeof(buf_size));
    //绑定套接字
    bind(usb_test, (struct sockaddr*)&clt, sizeof(clt));
    while (1)
    {
        char buf[2048];
        memset(&buf,0,sizeof(buf));
        FD_ZERO(&fd);
        FD_SET(usb_test, &fd);
        //监测频率周期
        t1.tv_sec = 0;
        t1.tv_usec = 50 * 1000;
        //监测
        ret = select(usb_test + 1, &fd, NULL, NULL, &t1);
        if(ret < 0)
            continue;
        if(!(ret > 0 && FD_ISSET(usb_test, &fd)))
            continue;
        
        len = recv(usb_test, &buf, sizeof(buf), 0);
        if (len > 0)
        {
            printf("%s\n", buf);//打印收到的数据
        }
    }
    close(usb_test);
    return 0;
}

离线

楼主 #11 2019-07-09 21:28:59

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

Re: g_file_storage的同步问题

这个应该也是arm usb做主机吧?  我那个是做从机

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn