LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
转自: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);
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);
}
上述程序非常简单,本来一天就可以调试成功,谁知,测试失败!每次都是读取失败!
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,
验证一下,读取0x200字节,一切OK!

500)this.width=500;">
LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】的更多相关文章
- 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 ...
- 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试
相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 用python + hadoop streami ...
- 编写和调试Android下JNI程序流程
1,切换到Android目录下bin/classes,使用javah命令生成jni所需的头文件,命令类似于:javah com.xxx.ooo,其中,com.xxx为package名称,ooo为包含n ...
- Java初学者作业——编写Java程序,实现用户登录验证。
返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...
- 转 : 用Delphi编写安装程序
http://www.okbase.net/doc/details/931 还没有亲自验证过,仅收藏 当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步 ...
- 如何让VS2012编写的程序在XP下运行
Win32主程序需要以下设置 第一步:在工程属性General设置 第二步:在C/C++ Code Generation 设置 第三步:SubSystem 和 Minimum Required Ve ...
- (七)JavaScript之[调试]与[前端表单验证]
12].调试为什么要去调试?1.在编写JavaScript时,如果没有调试工具将是一件很痛苦的事情.2.没有调试工具是很难去编写JavaScript程序的.3.编写的代码可能包含语法错误.逻辑错误,如 ...
- 如何使用c#编写单片机程序
因为个人喜爱想研究单片机,但是不太会c,然后再找资料研究有没有其他的方法发现国外的c# nanoframework 框架可以编写单片机程序,本文我将会用自己踩过的坑来总结一些c#编写单片机的一些经 ...
- 如何让VS2013编写的程序
总体分c++程序和c#程序 1.c++程序 这个用C++编写的程序可以经过设置后在XP下运行,主要的“平台工具集”里修改就可以. 额外说明:(1)程序必须为Dotnet 4.0及以下版本.(XP只支持 ...
随机推荐
- P2231 [HNOI2002]跳蚤
题目描述 Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最 ...
- P4433 [COCI2009-2010#1] ALADIN
题目描述 给你 n 个盒子,有 q 个操作,操作有两种: 第一种操作输入格式为"1 L R A B",表示将编号为L到R的盒子里的石头数量变为(X−L+1)×A mod B,其中 ...
- [NOI2016]旷野大计算
Subtask0 造计算机神题.给一个忠告:珍爱生命,远离旷野大计算...... 代码在这里:戳我 Subtask1 给定\(a,b\):求\(-2a-2b\). 熟悉操作环境:\([-(a+b)]& ...
- VUE开发一个图片轮播的组件
完成效果图如下: vue开发的思路主要是数据绑定,代码如下: <template> <div ref="root" style="user-select ...
- 如何合理的规划jvm性能调优
JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响.但也有一些基础的理论和原则,理解这些理论并遵循这些原则会让你的性能调优任务将会更加轻松.为了更好的理解本篇所介绍的内 ...
- 【CF938G】Shortest Path Queries(线段树分治,并查集,线性基)
[CF938G]Shortest Path Queries(线段树分治,并查集,线性基) 题面 CF 洛谷 题解 吼题啊. 对于每个边,我们用一个\(map\)维护它出现的时间, 发现询问单点,边的出 ...
- 【bzoj1078】 SCOI2008—斜堆
http://www.lydsy.com/JudgeOnline/problem.php?id=1078 (题目链接) 题意 给出一个斜堆,并给出其插入的操作,求一个字典序最小的插入顺序. Solut ...
- 单点登录(十六)-----遇到问题-----cas4.2.x登录成功后报错No principal was found---cas中文乱码问题完美解决
情况 我们之前已经完成了cas4.2.x登录使用mongodb验证方式并且自定义了加密. 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密 但是悲剧的是 ...
- 单点登录(七)-----实战-----cas server去掉https验证
我们在搭建cas中已经说过如果不搭建https证书体系的需要去掉https的验证: 单点登录(二)----实战------简单搭建CAS---测试认证方式搭建CAS 因为cas4.2以上的代码做了一些 ...
- struts2 的自定义 拦截器
Struts2的 拦截器: 对于拦截器,Struts2官方给出的 定义是: 拦截器是动态拦截Action调用的对象.它提供了一种机制,使开发者可以定义一段代码,在Action执行之前或者之后被调用执行 ...