转自:http://biancheng.dnbcw.info/linux/257411.html

【1】 如何编译X86下的 uBuntu APP---非常简单:
            gcc -o testusb testusb.c
         编译完成后即可生成 testusb  ,这就是可执行文件。
         
   【2】下面制作一个APP,目的是读取4740的内存。只要能实现这个目标,测试基本就算完成。
        #include <stdio.h>
        #include <string.h>
        #include <ftw.h>
        #include <stdlib.h>
        #include <pthread.h>
        #include <unistd.h>
        #include <errno.h>
        
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <fcntl.h>
        
        #include <sys/ioctl.h>
        #include <linux/usbdevice_fs.h>
        
        int usb_boot_fd;
        #define USBTEST_REQUEST _IOWR('U', 100, struct usbtest_param)
           
        int read_from_4740()
        {
                unsigned char Buffer0[256];
                unsigned char Buffer1[512];
                int res,i;
           
         if ((usb_boot_fd = open ("/dev/usb_boot",  O_RDWR)) < 0) {
          perror ("can't open dev file r/w");
          return -1;
         }
        
         Buffer0[0]=0x40;
         Buffer0[1]=0x01;  //Reqest    01===>SET DATA ADDRESS
        
         Buffer0[2]=0xC0; //Byte2
         Buffer0[3]=0xBF; //Byte3
        
         Buffer0[4]=0x00; //Byte0
         Buffer0[5]=0x00; //Byte1
        
         Buffer0[6]=0x00;
         Buffer0[7]=0x00;
         res=ioctl (usb_boot_fd, USBDEVFS_IOCTL, Buffer0);
        
         //========== 
         Buffer1[0]=0x40;
         Buffer1[1]=0x02;  //Reqest    02===>SET DATA LENGTH
        
         Buffer1[2]=0x00; //Byte2
         Buffer1[3]=0x00; //Byte3
        
         Buffer1[4]=0x00; //Byte0
         Buffer1[5]=0x02; //Byte1
        
         Buffer1[6]=0x00;
         Buffer1[7]=0x00;
        
         res=ioctl (usb_boot_fd, USBDEVFS_IOCTL, Buffer1);
        
         memset(Buffer1,0x00,0x200);
         res=read(usb_boot_fd,Buffer1,0x20);

      //注意这里的0x20,我当时测试时,是想少读些,就够了@谁知,害惨了我自己!应该写成 0x200 !
        
         printf("\nRead Buffer 0xBFC00000: res=%d\n",res);
         for(i=0;i<0x20;i++)
         {
          if (0==(i%16)) printf("\n");
          printf(" %2.2X",Buffer1[i]);
         }
         printf("\n===========\n");
         close (usb_boot_fd);
        }
        上述程序非常简单,本来一天就可以调试成功,谁知,测试失败!每次都是读取失败!
       
        我的USB MON 输出:
         f440df80 3225088196 S Co:019:00 s 40 01 80c0 0000 0000 0
         f440df80 3225374404 C Co:019:00 0 0
         f440df80 3225374785 S Co:019:00 s 40 02 0000 0200 0000 0
         f440df80 3225499216 C Co:019:00 0 0
         f440df80 3225499692 S Bi:019:01 -115 32 <
         f440df80 3225515295 C Bi:019:01 -75 32 = 00000000 ....00000000 00000000
             
        U盘,正确的输出:
         f446e580 2935176097 S Bo:018:01 -115 31 = 55534243 04000000 ....00000
         f446e580 2935188508 C Bo:018:01 0 31 >
         f446e580 2935188925 S Bi:018:01 -115 13 <
         f446e580 2935203774 C Bi:018:01 0 13 = 55534253 04000000 00000000 00
 
        错误码:kernel\include\asm-generic\errno.h    其中:
          #define EINPROGRESS 115 /* Operation now in progress */
          #define EOVERFLOW 75 /* Value too large for defined data type */
        总是出现错误码: -75,也就是说,EOVERFLOW,
我 google: URB EOVERFLOW 很久其中有一条搜索给了我提醒: 设备发送的数据过多!
终于让我悟到:我在协议配置时,要求读取 0x200字节,在APP中,却读取了0x20字节!当然是设备给的多,我要的少!
   其实这个问题以前在windows下调试也遇到过,只是当时印象不深啊,这次恐怕印象深刻了!付出了2天的代价啊!
   验证一下,读取0x200字节,一切OK!
 
500)this.width=500;">          
   实际驱动本身任何问题,是APP在调用时,协议没搞好而已!
       

LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】的更多相关文章

  1. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  2. 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试

    相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 用python + hadoop streami ...

  3. 编写和调试Android下JNI程序流程

    1,切换到Android目录下bin/classes,使用javah命令生成jni所需的头文件,命令类似于:javah com.xxx.ooo,其中,com.xxx为package名称,ooo为包含n ...

  4. Java初学者作业——编写Java程序,实现用户登录验证。

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...

  5. 转 : 用Delphi编写安装程序

    http://www.okbase.net/doc/details/931  还没有亲自验证过,仅收藏 当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步 ...

  6. 如何让VS2012编写的程序在XP下运行

    Win32主程序需要以下设置 第一步:在工程属性General设置 第二步:在C/C++ Code Generation 设置 第三步:SubSystem 和  Minimum Required Ve ...

  7. (七)JavaScript之[调试]与[前端表单验证]

    12].调试为什么要去调试?1.在编写JavaScript时,如果没有调试工具将是一件很痛苦的事情.2.没有调试工具是很难去编写JavaScript程序的.3.编写的代码可能包含语法错误.逻辑错误,如 ...

  8. 如何使用c#编写单片机程序

    ​ 因为个人喜爱想研究单片机,但是不太会c,然后再找资料研究有没有其他的方法发现国外的c# nanoframework 框架可以编写单片机程序,本文我将会用自己踩过的坑来总结一些c#编写单片机的一些经 ...

  9. 如何让VS2013编写的程序

    总体分c++程序和c#程序 1.c++程序 这个用C++编写的程序可以经过设置后在XP下运行,主要的“平台工具集”里修改就可以. 额外说明:(1)程序必须为Dotnet 4.0及以下版本.(XP只支持 ...

随机推荐

  1. 数据结构开发(14):KMP 子串查找算法

    0.目录 1.KMP 子串查找算法 2.KMP 算法的应用 3.小结 1.KMP 子串查找算法 问题: 如何在目标字符串S中,查找是否存在子串P? 朴素解法: 朴素解法的一个优化线索: 示例: 伟大的 ...

  2. django-rest-swagger对API接口注释

    Swagger是一个API开发者的工具框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文件系统服务器以同样的速度来更新,方法,参数和模型紧密集成到服务器端的代码中 ...

  3. [洛谷P4705]玩游戏

    题目大意:对于每个$k\in[1,t]$,求:$$\dfrac{\sum\limits_{i=1}^n\sum\limits_{j=1}^m(a_i+b_j)^k}{nm}$$$n,m,t\leqsl ...

  4. 洛谷 P1436 棋盘分割 解题报告

    P1436 棋盘分割 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共 ...

  5. 【bzoj2733】 HNOI2012—永无乡

    http://www.lydsy.com/JudgeOnline/problem.php?id=2733 (题目链接) 题意 给出图上$n$个点,每个点有一个点权,每次询问一个连通块中点权第$K$小的 ...

  6. Java EE之表达式语言EL(下)

    1.在EL表达式中使用作用域变量 表达式语言对作用域变量的支持,以及它解析变量的方式都使它变得非常有用. 1.1 EL表达式的隐式变量 EL表达式的作用域中定义了11个隐式变量. 当EL表达式引用了一 ...

  7. bzoj 1406

    %%% PoPoQQQ x^2=kn+1 x^2-1=kn (x+1)(x-1)=kn 令x+1=k1*n1,x-1=k2*n2,其中k1k2=k,n1n2=n 因此我们可以枚举n的约数中所有大于等于 ...

  8. hiho一下 第197周 逆序单词

    1.set #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath&g ...

  9. beego 定义一个存储变量的容器

    golang 这种语言相对于 php 有个好处是,不用每次请求都重复一些不必要的初始化操作,golang 进程开启之后,即使请求结束,相关的资源也会驻留在内存中. 所以我们可以把一些不需要重复初始化的 ...

  10. myapplication 单例写法

    MyApplication extends Application private static MyApplication myApplication = null; oncreate中: @Ove ...