自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 通知:转移至个人博客站 http://wowothink.com/

hi,各位朋友。本博客已不再更新,后续的文章将发表至个人的博客站点:http://wowothink.com/ 秉持分享学习的态度,我将会继续分享出更多有意义的文章,欢迎朋友们相互交流指正。...

2018-06-10 11:35:49 524

原创 libusb_bulk_transfer() 阻塞长达60s的原因

以下内容,纯属记录。最近调查在通过libusb与Android手机进行AOA通信,当手机拔掉,在write线程中会去调用libusb_bulk_transfer()进行相关的动作。但是会出现调用这个函数block长达60s时间才退出返回,即使设置参数timeout也没用。截取到的log如下: write线程第 00:00:49.532 开始写,但是直到 00:01:49.728 才返回。但是rea

2017-12-09 17:07:30 6477 1

翻译 Multi-threaded applications and asynchronous I/O(翻译)

此文章使用Goolge进行翻译学习使用。原文网址为:http://libusb.sourceforge.net/api-1.0/mtasync.htmllibusb是一个线程安全的库,但是应用于与多线程中的libusb交互的应用程序必须要注意。必须解决的根本问题是,所有的libusb I/O 都围绕着通过poll()/select()系统调用来监视文件描述符。这是直接暴露在异步接口,但需要着重注意的

2017-12-09 16:58:00 482

原创 poll() 的用法

需求在某个xxxservice 里要持续读 /dev/sample_dev 节点。也就是在while循环里面,先poll是否可读,如果可读的话就去调用read,如果不可读的话就继续调用poll,如此循环。但是,如果与 /dev/sample_dev 节点相关的设备已不再提供数据了(比如说设备拔掉)。那么每次调用poll会timeout,如此循环,空耗CPU资源。此时底层驱动可以给应用层返回特定的值告

2017-11-25 21:46:32 2757

原创 创建设备节点问题

在原先的文章中将了怎样创建一个设备节点供读写使用,Linux用户空间与内核空间交互方法,现在回过头去看,发现当时很多代码写法都有问题,在此作为一个反面教材来讲一讲。原先代码static int sample_init(void) { /* 初始化 sample_dev 结构体 */ sample_dev = kzalloc(sizeof(struct sample), GFP_

2017-11-25 21:29:39 999

原创 车载娱乐系统开发常用术语

B+B+是常电,要求一直要接在电源(电瓶)的正极,用来保存数据的;ACC车载系统供电;ILLilluminate,照明,即开车灯;IGignite,点火,启动发动机;PKBParking Break,停车闸;REVRear View System,倒车影像;DCUDoor Control Unit,车门控制单元。https://en.wikipedia.org/wiki/Door_control_u

2017-11-05 21:33:00 1598

原创 通过 /proc/[pid]/ 查看进程状态

参考资料[/proc官方手册] http://man7.org/linux/man-pages/man5/proc.5.html [解读/proc/$PID/status中各种参数] https://my.oschina.net/aiguozhe/blog/125477 [查看Linux & Android中内存占用方法] http://blog.csdn.net/myarrow/article

2017-11-05 21:23:40 9576

原创 Android 开放配件 (AOA)调试

车载导航的开发中,有可能需要开发支持Android CarLife或者Android Weblink等功能,而这些功能需要使用AOA协议的支持。因此,下面的文章将简单介绍AOA的相关知识。简介Google 官方AOA 的定义: https://source.android.com/accessories/protocol.htmlGoogle 官方提供了 adk2012 开发套件(包含 Andro

2017-11-05 18:33:50 6989

原创 USB设备无响应

Device No Response 测试介绍在USB认证中,otgeh_compliance_plan_1_2.pdf 测试文档有一项关于连接超时显示Device No Response的测试。 描述如下: 测试步骤如下: 说白了,就是说连接一个无法识别的USB设备到Embedded Host上,判断其能否在30s内给出“Device No Response”的提示,如果有

2017-11-05 17:41:38 3924

原创 Data Center Software 协议分析工具的使用

有一个 Beagle™ USB 480 Protocol Analyzer 协议分析工具(https://www.totalphase.com/media/datasheet/TP_Beagle_USB_480_Protocol_Analyzer-Datasheet.pdf),可以抓取USB总线上的数据。配合Data Center Software可以抓取分析USB总线上的数据。软件下载地址http

2017-10-07 16:26:50 2796 1

原创 最全USB 接口类型

本文全部转载自以下网站: https://www.cablestogo.com/learning/connector-guides/usb总览USB A-TypeUSB B-TypeUSB C-TypeMicro-USB AMicro-USB BMicro-USB AB:前两个公头的母头USB Mini-b(5-pin)USB Mini-b(4-pin)USB 3.0 A-TypeUSB 3.0

2017-10-07 16:09:09 38974

原创 i.MX6 pinctrl解析

Pin Controller主要工作pin multiplexing:基于ARM core的嵌入式处理器一般会提供丰富的功能,例如camera interface、LCD interface、USB、I2C、SPI等等。虽然处理器有几百个pin,但是这些pin还是不够分配,因此有些pin需要复用。pin configuration:这些配置参数包括:pull-up/down电阻的设定, tri-

2017-08-13 15:58:57 1826

原创 i.MX6 GPIO配置

原理图假设有如下原理图,比如说我们要控制 USB_H1_EN 管脚,该管脚与 GPIO_0 的pad连接,因此后面所有的关于该引脚的配置都要围绕pad GPIO_0 展开。在这里,我们将GPIO_0做为一个普通的GPIO口使用。 i.MX6 的pad在i.MX6上,pad是唯一存在的,一个pad可以通过复用为多个功能。如下是i.MX6芯片上的管脚图,蓝色框框里面的就是pad的名称。查看pad的复用

2017-08-13 15:29:54 2823 2

原创 怎么查看调用栈关系

前言最近在学习Linux USB Composite Framework的内容,经常看到函数指针跳转来跳转去。比如说会看到很多结构体中的.bind函数指针,但又不知道他们之间的调用关系。此时,就可以用dump_stack()这个函数来追踪函数调用关系。当然,还是要自己尝试学习理解这个框架结构,不然纯粹的知道函数调用关系意义不大。另外,dump_stack()可用来定位Kernel Panic和Oop

2017-08-06 17:59:01 1564 1

原创 Linux kernel U盘识别流程

一、正常USB枚举及断开的log正常U盘插入和拔掉Kernel log的打印消息如下:[ 220.836836] usb 2-1: new high-speed USB device number 4 using xxx-ehci[ 220.984187] usb-storage 2-1:1.0: USB Mass Storage device detected[ 220.990977]

2017-08-06 15:11:11 6563

原创 USB设备插入和拔出的波形

下面测试了iPhone和U盘插入/拔出时D+和D-上的波形。黄色为D+,绿色为D-。iPhone插入的波形整体波形1 处的波形只有iPhone插入连接CarPlay或者是Android手机插入连接Carlife才会有,还不知道这里的波形是怎么产生的。2 处的波形是枚举阶段速度的判定,即握手检测阶段。3 处的波形与2 处的类似,像是Host再做一次reset。4 处的波形是连接CarPlay做

2017-07-30 13:44:08 2361

原创 Androidadb驱动实现原理

Androidadb的驱动由androidadb.c和f_adb.c实现,androidadb.c的开头会#include “f_adb.c”,最终编译出来的是g_androidadb.ko文件。这里涉及到Linux USB Composite Framework的知识,下次再整理一下这方面的知识。创建struct usb_composite_driverAndroidadb属于USB复合设备,注册

2017-07-23 18:36:23 1586

原创 Androidadb的编译配置及常见问题

Androidadb驱动的代码在以下两个文件中实现,这部分的内容属于Linux USB Gadget的范畴了。<Kernel_Dir>/drivers/usb/gadget/androidadb.c<Kernel_Dir>/drivers/usb/gadget/f_adb.c关于Androidadb驱动的实现原理可以参照我的另外一篇文章:应用层的实现代码在以下目录: <Project_Dir>/

2017-07-22 23:13:32 3380

原创 USB设备状态设置-- usb_gadget_set_state()

一、USB设备状态在USB 2.0协议中第 9.1 USB Device States 章节规定了USB设备的6种状态,包括: Attached/Powered/Default/Address/Configured/Suspended其状态迁移图如下: 在 Linux Kernel ch9.h 文件中用 enum usb_device_state 来标记这几种状态。// <kernel_dir>

2017-07-22 13:08:06 2574

原创 Linux Kernel gpio export功能

一、前言在正常情况下,假设我们在控制usb使能相关gpio脚的时候,代码中通常我们会做如下调用:#define USB_EN_GPIO 11gpio_request(USB_EN_GPIO, "usb_en");gpio_direction_output(USB_EN_GPIO, 1);gpio_export(USB_EN_GPIO, false);上述执行完毕之后就可以给 GPI

2017-06-28 23:33:18 6810

原创 USB 2.0 协议中文注解

最近在做USB相关的开发,特别是USB设备的断开以及识别的过程,因此经常要查看USB 2.0的官方文档。在此将其中某些相关的章节根据自己的理解做翻译,因此加深对其的理解。翻译得不是很好,请谅解。一、 upstream&downstreamHost or Hub:我们这里可以简单的理解为USB Host;Function:一个USB设备有多个Function,这里可以简单的理解为一个USB设备;

2017-06-15 00:46:25 5054

原创 USB 全速/高速设备识别信号分析

以下的内容转载自USB chirp信号测试,在这篇文章中详细的解释了USB高速设备的握手过程,以及通过分析D+和D-上面的波形来进行说明。很赞的一篇文章。Chirp K J信号说明USBchirp信号分为K信号和J信号。根据USB速率将Chirp信号做如下区别: USB全速高速识别过程分析根据规范,全速(Full Speed)和低速(Low Speed)很好区分。因为在设备端有一个1.5k的上拉电

2017-06-15 00:05:26 8355 1

原创 USB 2.0 协议中J、K、SE0状态的定义

在USB 2.0协议中经常会看到以下术语:Chirp K、KJ序列、SE0。这里的状态是根据低速、全速/高速下设备D+和D-上不同的电平信号来决定的。通俗解释J态、K态、SE0低速设备: J态: D+ =“0”,D- =“1” K态: D+ =“1”,D- =“0” SE0态:D+ =“0”,D- =“0” 从J到K或者从K到J,信号翻转,说明发送的是信号0; 从J到J或者从

2017-06-14 23:33:14 11080 1

原创 PM&PL&SE&PG

在一个完整的开发体系中,各个职位的人合力将一款产品开发出来。这里列举了其中某些职位的工作内容。 システム開発やSIerの中でよく言われるPM PL SE PGのそれぞれの役割、どんな仕事なのか、一般的に見ていきましょう。 ■PM(プロジェクトマネージャー) その組織(部や課)の管理職であることが多い。部長であることはほとんど無いが課長や係長クラスで位置づけられるはずだ。 もちろん企業

2017-06-14 22:19:56 740

原创 ^M导致的编译出错

有时候我们会在Windows下编写代码,然后再放到Linux下进行编译。此时就会涉及到两个系统对换行符的解释了。不同的解释,就会造成一些奇怪的错误。1、问题描述在SourceInsight上查看main()函数,这么一看,没啥毛病。 但是当我将该文件放到Linux上使用gcc进行编译,编译出错,提示如下: 提示第322行出错,但是322行是return 0;没啥毛病啊。我把321行和322行屏蔽

2017-05-23 22:38:36 1548

原创 工厂生产各阶段名词

http://www.percept.com/designverification_DVT-EVT

2017-05-23 22:30:18 2034

原创 USB充电协议CDP/SDP/DCP

参照文档USB_Battery_Charging_1.2.pdf http://blog.csdn.net/wlwl0071986/article/details/43307967 https://www.maximintegrated.com/cn/app-notes/index.mvp/id/4803类型BC1.1的内容超出了USB 2.0规定的电源分配,它定义了更多用于充电的电源。主要有三

2017-05-23 22:10:02 37153

原创 Yocto 环境搭建

Yocto Project简介Yocto Project™ 是一个开源的协作软件,提供模板、工具和方法帮你创建定制的 Linux 系统和嵌入+式产品,而无需关心硬件体系。适合嵌入式Linux开发人员使用。查看Yocto Project Quick Start 相关术语PokyPoky是Yocto Project的参考发布版本。它包括OpenEmbedded构建系统(BitBake and Open

2017-05-17 23:36:28 8587

原创 Linux Kernl添加spidev的设备节点

一、spidev介绍如果在内核中配置spidev,会在/dev目录下产生设备节点,通过此节点可以操作挂载在该SPI总线上的设备。用户空间通过该节点可以访问内核空间。二、配置spidev设备步骤在i.MX6,Kernel 4.1.15上配置spidev的支持。1、配置dts支持spi根据spi的连接原理图配置对应的imx6qp-xxx.dts,如:&ecspi1 { compatible =

2017-04-26 22:46:43 18548 1

原创 vi常用命令

1、在vi编辑器中使用sudo命令:w !sudo tee %命令:w !{cmd},让 vim 执行一个外部命令{cmd},然后把当前缓冲区的内容从 stdin 传入。 tee 是一个把 stdin 保存到文件的小工具。 而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。 所以执行这个命令,就相当于从vim外部修改了当前编辑的文件。2、返回上次的位置ctrl + o :

2017-04-10 21:54:55 894

原创 git常用命令

1、clone某个ip地址的git仓库#git clone git@192.168.1.3:knl/kernel-imx6.git2、git删除未跟踪的文件删除 untracked files#git clean -f连 untracked 的目录也一起删掉#git clean -fd连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件

2017-04-10 21:49:10 1613

原创 Linux常用命令

替换当前目录下所有字符串在Android的开发过程中,要将Android移植到自己的平台并将所有关于Android.mk字符串重命名为Mydroid.mk。#sed -i s/"Android.mk"/"Mydroid.mk"/g `grep -rl "Android.mk" ./`首先grep当前目录下包含”Android.mk”字符串的文件,然后输入给sed进行替换。注意包住grep命令的是`(

2017-04-10 21:25:02 953

原创 Linux用户空间与内核空间交互方法

用户空间通常是打开某一特定的设备节点,然后通过write()/read()/ioctl()方法向内核空间进行数据的交换。这里主要使用两种方法实现。 1、sysfs文件系统; 2、在 /dev 目录下创建设备节点;一、sysfs介绍在 documentation/filesystems/sysfs.txt 对sysfs的介绍中,一上来就说: sysfs is a ram-base

2017-03-31 23:00:05 5855

原创 ioremap_nocache() 函数的使用

本篇文章主要是在ioremap_nocache函数说明的基础上进行整理,加入该函数的用法简介。函数原型void __iomem * ioremap_nocache (unsigned long offset, unsigned long size);/* * ioremap - map bus memory into CPU space * @offset: bus addr

2017-01-31 11:03:35 11160

原创 Linux GPIO驱动结构

GPIO驱动结构 根据上图,在Linux中,会在gpiolib.c中定义一个 ARCH_NR_GPIOS 大小的数组static struct gpio_desc gpio_desc[ARCH_NR_GPIOS];。每个元素对应于当前CPU上各个GPIO接口的信息,记录各个GPIO的描述符,即对应struct gpio_desc结构体。struct gpio_desc内的成员gpio_chip又指

2016-12-31 15:30:39 9059 2

原创 Linux 驱动常见错误返回值

在Linux驱动开发中,经常要根据返回值来判断何种错误。现将常见的错误编号列举如下。errno-base.h// include/uapi/asm-generic/errno-base.h#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory

2016-12-15 23:58:10 3866

原创 Linux 查看usb设备信息

下面的信息都是在VMware中运行Ubuntu12-04系统上执行的。同样该命令也支持在嵌入式系统中进行调试USB。一、cat设备节点获取信息在一些嵌入式开发中需要调试USB功能,经常会cat /sys 下的相关设备节点来查看某些信息,比如说我们可以进入 /sys/bus/usb/devices 目录下可以看到以下目录。进入到对应的目录也可以看到usb设备更加详细的信息(可以理解为设备描述符)。1、

2016-12-15 23:49:13 40476

原创 计算结构体成员偏移量

问题写一个宏计算出结构体成员的偏移量。 假设有如下一个结构体,要计算成员c的在结构体中的偏移量。typedef struct Type_t{ char a; // 0 int b; // 4~7 double c; // 8~16};注意,上述的结构体必须考虑字节对齐的问题。方法一我们可以声明一个Type_t结构的变量type,然后将成员c的地址减去成员a的地址就是

2016-09-07 22:56:02 8579

原创 调试tp驱动常用的adb命令

1、adb shell cat /proc/kmsg这条命令肯定是要放在第一位的,可以打印内核信息,对应于驱动程序中的printk语句。 如果出现以下提示,说明权限不够,可以通过adb root获取root权限。 /system/bin/sh: cat: /proc/kmsg: Permission denied另外,也可以将kmsg的内容重定向写入一个log文件中。可以依次执行下面命令

2016-08-16 11:40:38 9478

原创 大数相除算法

简介在实际的项目中,同事在移植一个算法时候碰到要进行64位整数的除法运算。找了一下一下,Linux内核中有支持该运算的函数do_div(),该函数在 Linux/arch/arm/include/asm/div64.h 文件中实现。看不太懂其具体的实现方法,于是我就想能不能自己写一个大数相除的算法。下面就是算法的内容,如有不足之处,敬请指正。注:在以下公式以及代码中,名字的含义如下: m

2016-08-05 21:38:04 7667

提示
确定要删除当前文章?
取消 删除