一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。...2)、“消息”指具有某种USB定义格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。
关于USB显示器跟HDMI之类的显示器有本质区别,我们需要实现的有两个: 在USB上插入一个显示器,怎么让windows系统能识别到显示器 如何让USB显示器显示对应的屏幕内容。...其中用户态驱动以动态链接库的形式存放在system32文件夹中,当程序调用D3D函数时,系统会自动加载用户态驱动到自己的运行空间中。...而内核态驱动则在系统启动时由系统自动加载到内核态内存空间中,它主要用于实现与显卡硬件之间交互,如显存的分配、显卡中断处理等。
在虚拟化实践过程中把物理机上的usb设备透传给虚拟机直接使用时很常见的应用场景,尤其时一些usb加密key的的透传使用,本文简单介绍一下usb设备透传的方式。...Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:800a Intel...Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux...id='0x0405'/> 注意:vendor和porduct的id对应 3.使用创建的xml文件透传usb设备给虚拟机 # virsh attach-device...$domain_name usb.xml 这样就能在虚拟机内部看到有usb设备插入的提示 4.从虚拟机拔出usb # virsh detach-device $domain_name usb.xml
Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....BUS/DEV/DRV 模型 "USB 接口"是逻辑上的 USB 设备,编写的 usb_driver 驱动程序,支持的是"USB 接口": USB 控制器或 Hub 识别出 USB 设备后,会创建、...注册 usb_device usb_device 被"drivers\usb\core\generic.c" 驱动认领后,会选择、设置某个配置 这个配置下面的接口,都会分配、设置、注册一个 usb_interface...左边的 usb_driver 和右边的 usb_interface 如果匹配,则调用 usb_driver.probe 2....接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。
图 2-11: linux-4.x usb gadget 配置选择 2.6.2 linux-4.x/linux-5.4 USB Gadget 配置流程 Linux-4.x/Linux-5.4 使用 configfs...• 样机设备 USB 口外接独立供电的 USB-HUB 设备,再将 USB 设备连接到 USB-HUB 上,确认主机功能是否正常。 • 确认主机驱动是否加载成功。...(2)若为 USB1 口,则可通过卸载驱动、再加载驱动。 • 对比 SDK 代码与最新发布的代码或者补丁, 确认代码是否更新到最新。...• 确认 Device 驱动是否加载成功,可通过如下方式: (1)通过 Log。...• 重新加载 Device 驱动,确认此时功能是否恢复正常。 (1)重新插拔 USB 线。 (2)手动切换到 Device 模式。
虚拟机把字节码文件从磁盘加载进内存的这个过程,我们可以粗糙的称之为「类加载」,因为「类加载」不仅仅是读取一段字节码文件那么简单,虚拟机还要进行必要的「验证」、「初始化」等操作,下文将一一叙述。...验证 验证阶段的目的是为了确保加载的 Class 文件中的字节流是符合虚拟机运行要求的,不能威胁到虚拟机自身安全。 这个阶段「把控」的如何,将直接决定了我们虚拟机能否承受住恶意代码的攻击。...当然,如果你觉得验证阶段会拖慢你的程序,jvm 提供:-Xverify:none 启动参数关闭验证阶段,缩短虚拟机类加载时间。...初始化 初始化阶段是类加载的最后一步,在这个阶段,虚拟机会调用编译器为类生成的 「」 方法执行对类变量的初始化语句。...类加载器 类加载的第一步就是将一个二进制字节码文件加载进方法区内存中,而这部分内容我们前文并没有详细说明,接下来我们就来看看如何将一个磁盘上的字节码文件加载进虚拟机内存中。
一、概述 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。...至于是否要触发子类的加载和验证,在虚拟机规范中并未明确规定,这点取决于虚拟机的具体实现。...加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中,方法区中的数据存储格式由虚拟机实现自行定义,虚拟机规范未规定此区域的具体数据结构。...4.2 双亲委派模型 从 Java 虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用 C++ 语言实现,是虚拟机自身的一部分...lib目录中也不会被加载) 类库加载到虚拟机内存中。
二 类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。...实现这个动作的模块被称为"类加载器"。 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。...这句话说的更通俗一些:比较两个类是否“相等”,只有在这两个类由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个class文件,同一个虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不同...三 双亲委派模型 从java虚拟机的角度讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用c++实现,是虚拟机自身的一部分;另一种就是所有其它的类加载器...,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)类库加载到虚拟机中。
1.类加载的时机 类从被加载到虚拟机内存开始,到卸载出内存为止,它整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution...加载阶段在什么情况下进行,虚拟机规范中并没有强制约束,这点可以交个虚拟机的具体实现来自由把握。...1.加载 加载(loading)阶段是“类加载” (Class Loading)过程的一个阶段,在加载阶段,虚拟机需要完成以下三件事情: 1)通过一个类的全限定名来获取定义此类的二进制字节流。...加载完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区中,方法区中的数据存储格式由虚拟机实现自行定义,虚拟机规范未规定此区域的具体数据结构。...,那虚拟机将会把代表N的全限定名传递给D的类加载器去加载这个类C。
虚拟机类加载机制 简述java类加载机制? 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型。...Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。...什么是类加载器,类加载器有哪些? 实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。...扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。...类装载分为以下 5 个步骤: 加载:根据查找路径找到相应的 class 文件然后导入; 验证:检查加载的 class 文件的正确性; 准备:给类中的静态变量分配内存空间; 解析:虚拟机将常量池中的符号引用替换成直接引用的过程
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。...当虚拟机启动时,用户需要指定一个要执行的主类,虚拟机会先初始化这个主类。...验证阶段是非常重要的,这个阶段是否严谨,直接决定了java虚拟机是否能够承受恶意代码的攻击,从执行性能的角度上讲,验证阶段的工作量在虚拟机的类加载子系统中又占了相当大的一部分。...对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在java虚拟机中的唯一性,每一个类加载器都拥有一个独立的类名称空间。...类加载器模型 双亲委派模型 从java虚拟机角度来讲,只存在两种不同的类加载器:一种是启动类加载器,使用C++语言实现,是虚拟机自身的一部分;另一种是所有其他类的加载器,由java语言实现,独立于虚拟机外部
方法区只有HotSpot虚拟机有,J9,JRockit都没有 虚拟机 == 类加载器 + 执行引擎 通过上述的内存详细结构图我们可以得知,类加载子系统也分为三个阶段。...对于加载 (Loading)阶段而言, 它是由虚拟机的具体实现来自由把控的。...加载阶段既可以使用Java虚拟机里内置的引导类加载器来完成,也可以由用户自定义的类加载器去完成 开发人员通过自动定义类加载器来定义类加载器去控制字节 流的获取方式(重写一个类加载器的findClass(...符号引用与虚拟机实现的内存布局无关,引 用的目标并不一定是已经加载到虚拟机内存当中的内容。...初始化 类的初始化阶段是类加载过程的最后一个步骤。 除了在加载阶段用户应用程序可以通过自动逸类加载器的方式局部参与外, 其他的动作都是完全由Java虚拟机来主导控制的。
由于道行不够深,所以此篇类加载机制的讲解主要来自于《深入理解Java虚拟机——JVM高级特性与最佳实践》的第7章 虚拟机类加载机制。...在前面《初识Java反射》中我们在开头提到要了解Java反射,就得要了解虚拟机的类加载机制。在这里,我们来试着窥探一下何为类加载。...“虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,类型的加载、连接和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。”...我们都知道Java编译后形成.class字节码文件,虚拟机是不认识.java文件的,所以虚拟机要加载Class文件将它做一些处理才能到“还原”成我们所写的java程序,按照我们的逻辑步骤来执行。...对于加载阶段(注意加载和类加载概念,加载是类加载过程的第一个阶段)JVM并没有对此约束,而是交由虚拟机的具体实现。
《深入理解Java虚拟机》一书中将类的加载过程放到了类加载器前面一节,但在这里我想先讲“类加载器”。在上一篇类加载时机中我们用大量篇幅来讲解了类加载过程中的5个步骤的最后一步——初始化。...这是因为,对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在Java虚拟机的唯一性,每一个类加载器,都拥有一个独的类名称空间。...启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++实现,是虚拟机自身的一部分。...负责加载\lib中(或者-Xbootclasspath参数所指定路径),且是虚拟机识别的类库加载到虚拟机内存中。不可直接被Java程序引用。...扩展类加载器(Extension ClassLoader),这个类加载器由Java实现,独立于虚拟机外部,继承至java.lang.ClassLoader抽象类。
解决【使用shell连接虚拟机时连接等待时长过长】的问题 打开sshd服务的配置文件/etc/ssh/sshd_config 把UseDNS yes,改为UseDNS no 重启ssh服务 打开sshd...修改为no 3、按下键盘的Esc键,并且输入:wq 重启ssh服务 输入下面的命令,重启ssh服务: service sshd restart 当我们再次使用shell连接虚拟机时就会很快了...以上就是学妹跑过来问我为啥使用Xshell连接虚拟机时连接需要等那么久【手把手讲解】的全部内容。 看完如果对你有帮助,感谢点赞支持! 加油! 共同努力!
四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似.../usb.h> 4.2 USB设备注册框架示例 #include #include #include //定义...鼠标驱动(中断传输方式) 5.1 USB驱动注册框架代码 #include #include #include ...#include #include #include #include .../init.h> #include #include #include #include <linux/slab.h
通过扫描以下目录获取物理节点所有 USB 设备: /sys/bus/usb/devices/usb* /sys/bus/usb/devices/usb*/$busnum-* 从该文件系统收集某一个设备的主要信息如下..."level": 1, "manufacturer": "QEMU", "port": 0, "prodid": "0001", "product": "QEMU USB...: 产品 serial: USB 硬件设备序列号 ,例如 0000:00:01.2 定位方法# 定位某一个 USB 设备的方法有两种: busnum + devnum idVendor + idProduct...设备类bDeviceClass、bDeviceSubClass、bDeviceProtocol By USB 中文网 USB设备描述符中的idVendor、idProduct和bcdDevice By...USB 中文网 USB 硬件设备的序列号 By IBM 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
[ 0.513302] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 0.513303] usb usb1...Controller [ 0.513304] usb usb1: Manufacturer: Linux 3.10.0-327.el7.x86_64 xhci-hcd [ 0.513305...] usb usb1: SerialNumber: 0000:00:14.0 [ 0.518700] usb usb2: New USB device found, idVendor=1d6b,...0.518702] usb usb2: Product: xHCI Host Controller [ 0.518702] usb usb2: Manufacturer: Linux 3.10.0...] usb 1-4: New USB device found, idVendor=413c, idProduct=301a [ 1.040348] usb 1-4: New USB device
在上一章分析完USB总线驱动程序后, 接下来开始写一个USB驱动: 本节目的: 将USB鼠标的左键当作L按键,将USB鼠标的右键当作S按键,中键当作回车按键 参考/drivers/hid/usbhid/...: usb_deregister(struct usb_driver *driver); 注册一个usb_driver驱动,然后内核会通过usb_driver的成员.id_table函数匹配一次USB设备...释放input_device 3.5在出口函数中 1)通过usb_deregister ()函数注销usb_driver结构体 4.代码如下: #include #include... #include #include #include #include... static struct input_dev *myusb_mouse_dev; //input_dev static char *myusb_mouse_buf
上一篇:Java虚拟机--类加载时机 类加载的全过程包括:加载、验证、准备、解析和初始化。...加载: 在加载阶段,虚拟机需要完成3件事情: 通过一个类的全限定名来获取定义此类的二进制字节流; 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构; 在内存中生成一个代表这个类的Class对象...文件格式验证: 第一阶段要验证字节流是否符合Class文件的格式规范,并且能被当前版本的虚拟机处理。该验证阶段的主要目的是保证输入的字节流能正确的解析并存储与方法区内。...符号引用与虚拟机实现的内存布局无关,引用的目标不一定已经加载到内存中了。 直接引用:可以是直接指向目标的指针、相对偏移量或能间接定位目标的句柄。...虚拟机会保证一个类的()方法在多线程下被正确的加锁、同步。
领取专属 10元无门槛券
手把手带您无忧上云