自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (5)
  • 收藏
  • 关注

原创 USB 网卡驱动数据流

1)应用层通过系统调用,进入到内核层;(2)内核的数据链路层将数据送入驱动层;(3)USB网卡驱动将数据发送到UDC控制器;(将req写入in端点)(4)UDC控制器写寄存器将数据通过phy发送出去。...

2022-07-23 17:35:22 990 1

原创 数据包传输:应用层-内核-硬件

以下,整理出了pingrequest报文,从,经,到达,的datapath。

2022-07-23 16:04:22 469

原创 usb peripheral 驱动 - EEM

2. tcpdump数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length.

2022-07-08 10:20:42 626

原创 usb host 驱动 - UVC 掉包

yavta 是一款测试APP,测试UVC 摄像头的数据采集回传。帧率60FPS 不能正常运行,blocked, all frame fail。帧率30FPS 能正常运行,但中间也会有一些丢包。帧率:FPS(每秒钟要多少帧画面); 以及Gop(表示多少秒一个I帧),影响流畅度。分辨率:单位英寸中所包含的像素点数; VGA:Video Graphics Array(视频图像分辨率),影响清晰度。视频大小:分辨率 x 2(每个像素占多少字节) x 8 x 帧率 x 时间(s) /1024/1024

2022-07-05 20:05:50 534

原创 usb peripheral 驱动 - debug

打开驱动文件的debug log:打开 trace:

2022-06-22 10:41:18 472

原创 总线与接口(内部总线、系统总线、外部总线)

这种分类方式是根据离芯片远近等级分类的。内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连。总线10多年前由公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个总线器件同时接到总线上,通过地址来识别通信对象。串行外围设备接口总线技术是公司推出的一种同步串行接口。公司生产的绝大多数(微控制器)都配有硬件接口,如68系列。总线是一种三线同步总线,因其硬件功能很强,所以

2022-06-01 11:40:29 6596

原创 usb phy

1、charge/* Default current range by charger type. */ //默认电流#define DEFAULT_SDP_CUR_MIN 2 //SDP 2.0#define DEFAULT_SDP_CUR_MAX 500#define DEFAULT_SDP_CUR_MIN_SS 150 //SDP 3.0#define DEFAULT_SDP_CUR_MAX_SS 900#define DEFAULT_DCP_CUR_MIN 500

2022-05-06 19:14:16 2995

原创 usb host 驱动 - device 拔插

1、disconnect1.1 上层卸载usb 设备驱动[ 709.471619] [T29796] Kernel panic - not syncing: Object already free[ 709.478060] [T29796] CPU: 4 PID: 29796 Comm: GConnection0 Tainted: G S B O 5.4.134-qgki-debug-g8c50b8eb5d9c #1[ 709.489217] [T29796] Hardware name: Qual

2022-04-07 15:57:03 11110 3

原创 usb 驱动之usbip

1、usbip 框架1.1 usbip 功能介绍usbip驱动提供了linux下USB 透传(bypass)的功能,或者说usb over tcp,利用以太网,将usb 设备共享到另外一端。usbip分为两端:server端和client端,它们分别运行在不同的linux主机中,其中运行server端插入usb 设备(如U盘等),用于共享。此时client端就可以 attach 到server端,此时client端就能看到 u盘,它以为真的有一个 u盘插入本机,并为其安装驱动,效果跟在本机上直接插入U

2022-04-01 11:38:12 6209 1

原创 usb udc 驱动

1.1 gadegt 初始化// dwc3== dwc3_gadget_init(struct dwc3 *dwc); == usb_add_gadget(dwc->gadget); == device_add(&gadget->dev); == list_add_tail(&udc->list, &udc_list); == device_add(&udc->dev);// dummy== dummy_udc_probe(st

2022-03-28 18:19:42 1472

原创 usb host 驱动之设备层次

1、device 层次架构设备:struct device =(派生)=> struct usb_device =(包含)=> struct usb_interface(派生自device)驱动:struct device_driver =(派生)=> struct usb_device_driver =(派生)=> struct usb_driver1.1 usb 设备驱动(1) USB设备的注册:usb_new_device(struct usb

2022-03-24 18:13:59 1364

原创 usb设备结构及描述符拓扑

1、usb 设备1.1 usb_device// 拓扑重点关注struct usb_device { struct usb_host_endpoint ep0; //端点0 的特殊地位决定了它必将受到特殊的待遇,在struct usb_device 对象产生的时候它就要初始化 struct usb_device_descriptor descriptor; /* Descriptor 设备描述符,此结构体的bMaxPacketSize0 filed保存了端点0的maximum p

2022-03-21 15:47:26 3097

原创 usb host 驱动之 urb

1、URB 处理流程(1)usb 设备驱动程序创建并初始化一个访问特定usb设备特定端点的 urb,并提交给 usb core;(2)usb core 提交该 urb 到 usb 主控制器驱动程序;(3)usb 主控制器驱动程序根据 urb 描述的信息,来访问 usb 设备;(4)当设备访问结束后,usb 主控制器驱动程序通知 usb core(调用这个函数usb_complete_t complete;)然后其再通知usb设备驱动程序。1.1 创建URBstruct urb *usb_allo

2022-03-16 19:22:56 4315

原创 usb host 驱动 - device 插入枚举过程

hub 检测到端口有 usb 设备连接时,hub_port_connect枚举设备过程:== usb_alloc_dev(hdev, hdev->bus, port1); //构建udev== usb_set_device_state(udev, USB_STATE_POWERED); //设置udev 的状态为 powered== hub_port_init(hub, udev, port1, i); //复位设备, 分配地址, 获取设备描述符 == hub_port_reset(

2022-03-02 16:29:52 1217

原创 malloc & 指针

1、指针的内存分配(1)指针定义时不会被分配内存,如int *p;。(2)指针初始化时,需要给其分配一个地址,如int *p = NULL; 或 int *p = &i;。(3)指针分配内存使用malloc,位于堆区,用完需要free。#include <stdio.h>#include <stdlib.h> int main(int argc, char** argv){ int i = 1; //全局变量分配内存在全局区 int

2021-12-03 16:02:00 4203

原创 work queue

1、工作队列schedule_work把任务提交到内核默认提供的工作队列[events/0]中执行schedule_delayed_work把任务提交到内核默认提供的工作队列[events/0]中,(延时一定的时间)执行queue_work把任务提交到自定义创建的队列[my workqueue/0]中执行queue_delayed_work把任务提交到自定义创建的队列[my workqueue/0]中,(延时一定的时间)执行1.1 queue_work(自定义的

2021-11-07 20:39:40 2482

原创 进程管理基础

1、概述1.1 进程相关1.1.1 进程和线程的区别进程1.进程是处于执行期的程序,进程=程序+执行2.进程是资源封装的单位,拥有独立的资源空间,包含很多资源:打开的文件、挂起的信号量、内存管理、处理器状态、一个或多个执行线程或数据段等;3.进程通常通过fork系统调用来创建;4.新创建的进程可以通过exec创建地址空间(用户栈初始化等),并载入新的可执行程序5.进程退出可以自愿退出或非自愿退出。线程1.线程是轻量级进程,是操作系统调度的最小单位2.一个进程可以有多个线程线程共享进程的

2021-07-07 14:45:28 122

原创 md5sum使用

1、linux比较两个文件是否一样(linux命令md5sum使用方法)1.1 简介MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了L

2021-07-07 09:39:48 666

原创 中断 and 上下文

1、中断处理框架中断:CPU 在执行程序的过程中,出现了某些突发事件急待处理,CPU 必须暂停当前程序的执行,转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行。内部中断:来自CPU 内部(软件中断指令、溢出、除法错误等),例如:操作系统从用户态切换到内核态需借助CPU 内部的软件中断。外部中断:来自CPU 外部,由外设提出请求。为了在中断执行时间尽可能短和中断处理需完成的工做尽可能大之间找到一个平衡点,Linux将中断处理程序分解为两个半部:顶半部和底半部。顶半部用于完成尽可能少的比较

2021-07-02 14:27:40 396

原创 USB拨号驱动

1. 拨号介绍ppp拨号:modem相当于猫,自身不能上网;ECM拨号:网络共享方式,AP和modem都能上网。1.1 ppp拨号      **PPP(点到点协议)**在拨号过程中用于MS和PC间数据交互、协商。在拨号流程的初期首先开启的就是PC和MS直接的PPP过程,在拨号成功后,还需要依靠PPP协议对IP包进行封装传输数据。1.1.1 linux中PPP实现方式传输层、网络层(TCP/IP)——数据链路层(PPP)——物理层(

2021-03-16 17:33:45 1640

原创 USB gadget 驱动之 android.c

2021-03-09 20:09:22 3521 3

原创 高通下载模式9008

1、进入下载模式目前进入下载模式的方法有如下:(1) 擦除sbl1.mbn, PBL没有检测到sbl,会直接进入下载模式 ;(2) D+ 接地,即短接USB线进入下载模式,在sbl阶段实现 ;(3) aboot阶段,通过组合键进入,在lk实现:组合键进入EDL的接口:bootable/bootloader/lk/app/aboot/aboot.c reboot_device(EMERGENCY_DLOAD);(4) 启动到kernel阶段,adb reboot edl或者通过diag命令(Q

2021-03-08 15:44:26 3789

原创 嵌入式存储器

按照存储介质的不同,将存储器分为光学存储、半导体存储和磁性存储三大类。(1)光学存储:CD、DVD;(2)磁性存储:磁带、软盘、机械硬盘;(3)半导体存储:5.1 ROMROM(Read-Only Memory):只读存储器。通常掉电后数据不会消失的半导体存储器都泛称为 ROM 了。比如手机参数里所说的 ROM 通常就是指 NAND FLASH 类存储器。但这些 ROM 基本上都是不支持执行代码的。一般:1G以下(小容量),用nandflash ;1G以上(大容量),用emmc 。5.1.

2021-03-08 10:33:14 819

原创 ADB调试总结

1.ADB介绍ADB(Android Debug Bridge)安卓的调试桥,debug工具。借助adb工具可以管理设备或手机模拟器的工作状态,还可以进行很多手机操作,如安装软件,运行shell命令等。注意:adb shell进去之后,debug版本终端是以#开头,而USER版本终端是以$开头。1、adb其实就是个socket通信,数据发过来发过去。2、adb每次都是发送的一个数据包,数据结构是struct apacket,其中包含msg消息部分,及data数据部分。3、从PC跟device通信

2021-03-05 17:46:28 2296 1

原创 进程间通信

进程与线程的区别:线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;调度和切换:线程上下文切换比进程上下文切换要快得多。进程之间交换信息的唯一途径就是传送打开的文件。可以经由fork或者exec来传送。每个进程各自有不同的用户地址空间,任何一个进程的全局变量在

2021-02-25 16:18:17 207

原创 adb devices offline

解决办法11、adb kill-server2、adb start-server3、adb remount执行这3个命令,然后重新键入adb shell应该就可以了解决办法2用adb version查看版本后发现是1.0.29——较低的版本,现在的设备已经不支持了。后来我把adb的版本更新到了1.0.36,成功解决了问题。解决办法3拔插USB线。...

2021-02-24 17:02:12 159

原创 C语言常见语法

1. constconst是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。被const修饰的变量称为常类型变量。const的主要作用:(1)可以定义const常量,具有不可变性。例如:const int Max=100; Max++会产生错误;2. static2.1 static修饰全局变量在全局变量前加static,全局变量就被定义成为一个全局静态变量。特点如下:1)存储区:静态存储区没变(静态存储区在整个程序运行期间都存在);

2021-02-20 16:27:50 488

原创 结构体语法

1. 使用语法定义结构体指针,访问成员时就用->定义结构体变量,访问成员时就用.例如:struct A { int a; char b;};struct A q; 访问成员就用:q.a;struct A *p; 访问成员就用:p->a;2. 内存一般情况下用“.”,只需要声明一个结构体。格式是,结构体类型名+结构体名。然后用结构体名加“.”加域名就可以引用域了。因为自动分配了结构体的内存。如同 int a;一样。而用“->”,则要声明一个结构体的指针,

2021-02-20 16:03:29 668

原创 Linux 虚拟文件系统

class_create 和 device_create内核同时提供了class_create()函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用device_create()函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应 device_create()函数,去/sysfs下寻找对应的类从而创建设备节点。此外,利用device_create_file函数可以在/sys/class/下创建对应的属性文件,从而通过对该文件的读

2021-02-07 14:41:17 3709 1

原创 I2C适配器驱动及设备驱动代码详解

实例Accelerometer Sensors: bma2x21.简述根据i2C驱动的开发流程去分析i2c从机设备bma2x2(加速度sensors)的驱动;以及分析其挂载的控制器(适配器)i2c-msm-v2的驱动。2.I2C总线驱动i2c-msm-v22.1 定义总线驱动:platform_driverstatic struct platform_driver i2c_msm_driver = { .probe = i2c_msm_probe, .remove = i2c_

2021-02-07 10:19:11 1842

原创 驱动架构 & platform平台总线驱动模型

1. platform驱动模型      platform总线是kernel 2.6中引入的一种虚拟总线,主要用来管理CPU的片上资源,具有良好的移植性。相对于USB、PCI、I2C等物理总线来说,平台总线是Linux设备驱动模型为了保持设备驱动的统一性而虚拟出来的总线。      usb、i2c、pci等设备都是直接挂在相应的总线下与cpu进行数据交互的,但在嵌入式系统中,并非所有的

2021-02-04 16:10:35 514

原创 通信方式总结及I2C驱动详解

1.常见通信方式2.I2C总线2.1 I2C总线硬件连接2.2 I2C软件架构2.3 I2C子系统实现流程(1)i2c adapter创建i2c client;(2)i2c adapter中的i2c client与i2c driver通过i2c core完成注册匹配;(3)i2c driver传递上层应用的数据至i2c client;(4)i2c client通过i2c adapter找到对应的i2c algorithm,并传送数据;(5)i2c控制器产生SCL和SDA。3. I2

2021-02-03 18:15:21 691

原创 高通9x07两种启动模式

fota升级:recovery模式系统给system正常系统进行升级。

2021-01-25 11:04:23 492

原创 Ubuntu启动流程

3.1 加载BIOS    当你打开计算机电源,计算机会首先加载BIOS信息。BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。    BIOS是和主板一起开发的,所以主板的一些硬件信息只有BIOS清楚,每块主板的BIOS基本都是不同的,主板的具体信息需要BIOS报告给操作系统。    BIOS主要存在于.

2021-01-23 17:37:32 1640 4

原创 Android各image分析

3.1 boot.imgboot.img = boot_img_hdr + zImage(kernel) + boot-ramdisk      boot.img中ramdisk1里的init.rc位于*\system\core\rootdir\init.rc*      手机正常启动时,用的就是boot.img。首先内核态的init线程加载kernel image和ramdisk image到RAM中;其次,kernel自解压zIm.

2021-01-23 16:39:40 1517

原创 ubuntu临时添加模块

sudo modprobe usbserial vendor=0x2949 product=0x8243sudo modprobe optionsudo echo 2949 8243 > /sys/bus/usb-serial/drivers/option1/new_id

2021-01-23 15:41:34 207

原创 kernel log调试方法

可以打开全部log,但是对于android多个文件来说log太多导致系统分析不方便,为了便于打开需要模块的log,在需要打开log的文件中对define进行重新定义.#ifdef pr_debug#undef pr_debug#define pr_debug(fmt, ...) \ printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)#else#define pr_debug(fmt, ...) \ printk(KERN_DEBUG pr_fmt(fmt

2021-01-23 15:03:26 1105

原创 ubuntu格式化硬盘

(1)使用fdisk -lu 查看硬盘使用情况,我们要格式化的为/dev/sdb 500G容量。(2)mkfs.ext4 /dev/sdb4 //格式化新的磁盘(3)mount /dev/sdb /mnt/external //将格式化后的磁盘 挂载在/data目录下(4)修改/etc/fstab 添加开机自动挂载blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询.或:(5)最后重启生效。/dev/sdb

2021-01-22 11:34:42 18719

原创 单编内核驱动模块

1.单编option.komake -C /lib/modules/3.10.44/build M=/home/neoway/kernel/linux-3.10.44/drivers/usb/serial obj-m=option.o2.拷贝替换option.kocp /home/neoway/kernel/linux-3.10.44/drivers/usb/serial/option.ko /lib/modules/3.10.44/kernel/drivers/usb/serial3.加载op

2021-01-21 11:36:37 221

原创 makefile模板

编译驱动makefile# -C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile# M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile#要生成的模块名obj-m := GobiNet.o#生成这个模块所需要的目标文件GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o MPQMUX.oKDIR := /lib/modules/$(shell uname -r)/buildPWD := $(shell

2021-01-20 16:42:55 229

USB Type C规范详解.pdf

USB Type C规范详解.pdf

2021-09-25

usb2.0官方协议.pdf

usb2.0官方协议.pdf

2021-09-25

USB模式识别过程.pdf

USB模式识别过程.pdf

2021-09-25

USB3.0中文译本.pdf

USB3.0中文译本.pdf

2021-09-25

C语言学习笔记

数据类型可以理解为固定内存大小的别名,数据类型是创建变量的模子。 char 1字节 short 2字节 int 4字节 long 4字节 float 4字节 double 8字节 变量是一段实际连续存储空间的别名,通过变量的名字可以使用存储空间。变量的属性:auto(存储于栈中,默认)、static(存储于静态区中)、register(存储于寄存器中) static静态局部变量:被多次调用时,只被一次定义和初始化,调用时保持上次的不变。 全局变量分配在数据段上,局部变量分配在栈上。

2018-08-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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