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只支持 ...
随机推荐
- P4071 [SDOI2016]排列计数
题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 满足条 ...
- 【刷题】HDU 3435 A new Graph Game
Problem Description An undirected graph is a graph in which the nodes are connected by undirected ar ...
- Tomcat8.0配置JNDI多数据源
jndi配置 :此种配置需要在Tomcat的server.xml中和context.xml中配置数据源,在项目中引用. 需要在tomcat下加入数据库连接的jar包,相关包(ojdbc14;c3p0数 ...
- Linux及安全实践三——程序破解
Linux及安全实践三--程序破解 一.基本知识 常用指令机器码 指令 作用 机器码 nop 无作用(no operation) 90 call 调用子程序,子程序以ret结尾 e8 ret 返回程序 ...
- Java之高级IO,Properties
IO流(高级) 释放资源的标准代码 主要考虑的是在什么时候释放资源比较合适.而且在jdk1.7之前和之后是不同的. package com.wzlove.demo; import java.io.Fi ...
- 解题:CQOI 2013 和谐矩阵
题面 踩踩时间复杂度不正确的高斯消元 首先可以发现第一行确定后就可以确定整个矩阵,所以可以枚举第一行的所有状态然后$O(n)$递推检查是否合法 $O(n)$递推的方法是这样的:设$pre$为上一行,$ ...
- Maven settings.xml配置(指定本地仓库、阿里云镜像设置)
转: 详解Maven settings.xml配置(指定本地仓库.阿里云镜像设置) 更新时间:2018年12月18日 11:14:45 作者:AmaniZ 我要评论 一.settings. ...
- FastDFS部署
环境: CentOS 7 FastDFS 5.05 Nginx 1.10 fastdfs-nginx-module_v1.16 libfastcommon-1.0.7 libevent-2.0.21- ...
- GO_08:GO语言基础之interface
接口interface 1. 接口是一个或多个方法签名的集合 2. 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这称为 Structural typing 3. ...
- 题解 P1967 【货车运输】
树链剖分+线段树 思路 貌似题解里没有树链剖分和线段树的,贡献一发. 首先明确题目要求:一辆车走某条路从x城到y城的边权最小值 我们把要求分开来看: 从x城到y城:我们需要走的路径将两点联通 边权最小 ...