在生活、工作中经常会接触到USB设备,如鼠标、键盘、摄像头、可移动硬盘、扫码枪等。这些设备通过USB接口连接到电脑上后,电脑会立刻提示“检测到新硬件...”、安装驱动等。这里需要强调下USB设备使用的是USB总线,window或Linux内核中都会自带usb总线驱动,所以接上USB设备后,主机能够立刻检测到,提醒需要安装设备驱动是指安装USB设备驱动

USB设备驱动使用USB总线,所以很多操作由USB总线驱动帮我们完成了,我们只需要的按照总线、设备、驱动框架来实现USB设备的驱动既可。USB设备数据的读写操作由总线驱动现在,我们可以直接使用总线读取到的数据,然后解析这些数据的含义、再进行相关的操作就可以了(这里需要注意的一点是USB总线驱动只提供USB设备的读写操作函数,这函数是通用的,即里面的数据的含义总线驱动并不知道)。

USB设备驱动的框架图下,具体的代码可以参考内核中的/drivers/hid/usbhid/usbmouse.c

  • 分配/设置usb_driver结构体,填充里面的.id_table、.probe、.disconnect成员。
  • 调用usb_register把usb_driver结构体注册到内核中。
static struct usb_driver usbtouch_driver = {.name		= "myusb",.probe		= usbtouch_probe,.disconnect	= usbtouch_disconnect,.id_table	= usbtouch_devices,
};static int __init usbtouch_init(void)
{return usb_register(&usbtouch_driver);
}static void __exit usbtouch_cleanup(void)
{usb_deregister(&usbtouch_driver);
}

struct usb_driver中的id_table成员是用与和usb设备进行匹配的选项,表示这个驱动支持的设备。

.probe成员为函数指针,就是在设备和驱动匹配成功的时候执行。

.disconnect成员也为函数指针,在设备和驱动关联成功后再断开执行,如拔了USB设备或卸载USB设备驱动。

.probe函数中我们需要处理的事情如下(这里以鼠标为例子):

  • 创建input_dev设备
  • 设置input_dev支持的类,需要支持按键类、相对位移类。
  • 设置input_dev支持的事件,能够产生左、中、右、以及侧边附加按键事件,还有xy方向上的相对位移事件和滚轮滑动事件。
  • 注册input_dev到input输入子系统中。
  • 硬件相关的操作,不同的设备的操作存在差异

USB总线为组从结构,USB总线驱动只能轮询去获取USB设备上的数据,USB设备不能主动通知USB主机传输数据。在USB驱动中需要构建urb(usb request block)结构体,然后填充使用。urb中要指定USB设备数据存放到主机上的物理地址以及虚拟地址,还有USB数据传输的方向、长度,和设备通信的端点等。

使用usb_alloc_urb()函数分配urb结构体,结束后使用usb_free_urb()释放这个结构体。

struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags)
/*用于分配urb结构体给usb驱动使用*//*  If the driver want to use this urb for interrupt, control, or bulk* endpoints, pass '0' as the number of iso packets.* The driver must call usb_free_urb() when it is finished with the urb.
*/

USB设备的数据要存放在主机上的什么地方,USB设备驱动中需要指明。

void *usb_buffer_alloc(struct usb_device *dev,size_t size,gfp_t mem_flags,dma_addr_t *dma)
/*用于分配usb缓存,用于存放读写的数据*/
/*@dma: used to return DMA address of buffer 这里是内存的物理地址
*函数返回的是虚拟地址
*/

找到对应的设备端点和数据长度

pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
/*pipe为源地址*/
len = endpoint->wMaxPacketSize;
/*len 为一次传输的数据的大小,即包的长度*/

现在数据传输的三要素(源、长度、目的)都确定了,剩下的就是要进行填充urb结构体,即告诉主机数据传输的三要素。

	static inline void usb_fill_int_urb (struct urb *urb,struct usb_device *dev,unsigned int pipe,void *transfer_buffer,int buffer_length,usb_complete_t complete_fn,void *context,int interval)/ * usb_fill_int_urb - macro to help initialize a interrupt urb* @urb: pointer to the urb to initialize.* @dev: pointer to the struct usb_device for this urb.* @pipe: the endpoint pipe* @transfer_buffer: pointer to the transfer buffer* @buffer_length: length of the transfer buffer* @complete_fn: pointer to the usb_complete_t function* @context: what to set the urb context to.* @interval: what to set the urb interval to, encoded like*	the endpoint descriptor's bInterval value.	*/mouse->irq->transfer_dma = mouse->data_dma;mouse->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;

调用usb_fill_int_urb(),其中complete_fn相当于中断函数,即主机读取完数据会放到指定的内存data_dma中。然后通知CPU处理这些数据,这些数据只有USB设备驱动程序知道其含义。所以要在这个完成函数中处理这些数据,如上报。

最后就是提交usr请求块了。

usb_submit_urb(urb, GFP_ATOMIC);

到这里基本上就结束了,剩下的就是disconnect函数的操作。这个函数和.probe完全相反,申请了的资源需要在这里释放。

看到这里是不是感觉USB驱动很简单啊!框架确实很简单!很简单!很简单!重要的事情要说三遍,要相信你们的实力。

下面的代码是我在ARM板子上的针对usb鼠标写的。

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/usb/input.h>
#include <linux/hid.h>
#include <linux/slab.h>/*USB设备驱动可以使用input输入子系统框架来完成数据的读入即上报
*和传统的input子系统存在差异,传统的input输入子系统是在中断函数里面获取数据然后input_event上报数据
*在usb设备中,数据的读取由usb总线驱动完成,这个可以直接使用urb模块来实现。然后再urb的中断中上报数据
*/static struct input_dev *input_dev;
static struct urb *urb;
static dma_addr_t data_dma;
static unsigned char *data;	
static unsigned len;static void usbtouch_irq(struct urb *urb)
{#if 1int status;switch (urb->status) {case 0:			/* success */break;case -ECONNRESET:	/* unlink */case -ENOENT:case -ESHUTDOWN:return;/* -EPIPE:  should clear the halt */default:		/* error */goto resubmit;}/*在usb设备驱动程序中,需要对数据进行解析。即usb总线获取到数据不会解析数据的含义*需要在usb设备驱动中进行解析数据,我的usb数百data[1]为按键的值*data[2]为鼠标在x方向上的相对位移值,data[3]为鼠标在y方向上的相对位移值*data[4]为鼠标滚轮滑动产生的值*/input_report_key(input_dev, BTN_LEFT,   data[1] & 0x01);input_report_key(input_dev, BTN_RIGHT,  data[1] & 0x02);input_report_key(input_dev, BTN_MIDDLE, data[1] & 0x04);input_report_key(input_dev, BTN_SIDE,   data[0] & 0x08);input_report_key(input_dev, BTN_EXTRA,  data[0] & 0x10);input_report_rel(input_dev, REL_X,     data[2]);input_report_rel(input_dev, REL_Y,     data[3]);input_report_rel(input_dev, REL_WHEEL, data[4]);input_sync(input_dev);
resubmit:	/*上报后,重新提交urb请求*/status = usb_submit_urb (urb, GFP_ATOMIC);#else/*打印USB总线驱动获取到的数据,分析数据。解析其数据含义*/	int i =0,status;for(i = 0; i < len;i++){printk("%x ",data[i]);	}printk("\n");status = usb_submit_urb (urb, GFP_ATOMIC);#endif
}	static int usbtouch_probe(struct usb_interface *intf,const struct usb_device_id *id)
{int pipe;struct usb_device *udev = interface_to_usbdev(intf);struct usb_host_interface *interface;struct usb_endpoint_descriptor *endpoint;interface = intf->cur_altsetting;/*除端点0外的第一个端点,并不是指设备接口配置中的端点0*/endpoint = &interface->endpoint[0].desc;/*1.分配一个input_dev结果体*/input_dev = input_allocate_device();if(!input_dev){return -1;}/*2.设置结构体中的支持的类以及事件。鼠标要支持案件类和相对位移类事件*/input_dev->name = "usb-mouse";input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);input_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);input_dev->relbit[0] = BIT(REL_X) | BIT(REL_Y);input_dev->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_SIDE) | BIT(BTN_EXTRA);input_dev->relbit[0] |= BIT(REL_WHEEL);/*3.注册input_dev到系统中*/input_register_device(input_dev);/*4.硬件相关的操作。主要是usb数据的获取以及上报*/urb=usb_alloc_urb(0, GFP_KERNEL);/*传输数据的来源,设备、端点、方向等组合*/pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress);/*和设备驱动交互一次传输的数据长度*/len = endpoint->wMaxPacketSize;/*USB总线驱动获取到的数据存放的内存*/data = usb_buffer_alloc(udev, len,GFP_ATOMIC, &data_dma);urb->dev = udev;urb->transfer_dma = data_dma;urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;/*上下文参数(这里使用的NULL),可以用来给完成函数提供参数*/usb_fill_int_urb(urb, udev,pipe,data, len,usbtouch_irq, NULL, endpoint->bInterval);/*提交urb请求*/		 usb_submit_urb(urb, GFP_ATOMIC);		 return 0;
}static void usbtouch_disconnect(struct usb_interface *intf)
{usb_kill_urb(urb);input_unregister_device(input_dev);usb_free_urb(urb);usb_buffer_free(interface_to_usbdev(intf), len, data,data_dma);input_free_device(input_dev);
}
/*定义设备驱动支持的设备*/
static struct usb_device_id usbtouch_devices [] = {{ USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,USB_INTERFACE_PROTOCOL_MOUSE) },{ }	/* Terminating entry */
};static struct usb_driver usbtouch_driver = {.name		= "myusb",.probe		= usbtouch_probe,.disconnect	= usbtouch_disconnect,.id_table	= usbtouch_devices,
};static int __init usbtouch_init(void)
{return usb_register(&usbtouch_driver);
}static void __exit usbtouch_cleanup(void)
{usb_deregister(&usbtouch_driver);
}module_init(usbtouch_init);
module_exit(usbtouch_cleanup);MODULE_LICENSE("GPL");

测试如下图,按键和移动鼠标都能产生相应的事件码。这里/dev/event0的格式就不说了,要是不太清楚的可以参考input输入子系统。

usb驱动设备使用了input输入子系统框架,这个和之前的输入子系统(按键、触摸屏)之类的存在一点差异。之前的都是在中断服务函数中直接获取到数据然后调用input_event上报,而USB设备驱动中的数据来源是USB总线驱动,在完成函数中调用input_event上报数据

# hexdump /dev/event0
0000000 4998 0000 4b9a 000c 0001 0110 0001 0000
0000010 4998 0000 4bb6 000c 0000 0000 0000 0000
0000020 4998 0000 cc2f 000e 0001 0110 0000 0000
0000030 4998 0000 cc4b 000e 0000 0000 0000 0000
0000040 4999 0000 93c0 000d 0001 0111 0001 0000
0000050 4999 0000 93db 000d 0000 0000 0000 0000
0000060 499a 0000 2fe0 0001 0001 0111 0000 0000
0000070 499a 0000 2ff2 0001 0000 0000 0000 0000
0000080 499c 0000 b23e 0006 0002 0000 00ff 0000
0000090 499c 0000 b24e 0006 0002 0001 0001 0000
00000a0 499c 0000 b252 0006 0000 0000 0000 0000
00000b0 499e 0000 cf82 0007 0001 0112 0001 0000
00000c0 499e 0000 cf9d 0007 0000 0000 0000 0000
00000d0 499e 0000 59ad 000b 0001 0112 0000 0000
00000e0 499e 0000 59c2 000b 0000 0000 0000 0000
00000f0 499f 0000 df37 0007 0002 0008 00ff 0000
0000100 499f 0000 df4e 0007 0000 0000 0000 0000
0000110 499f 0000 cacc 000d 0002 0008 00ff 0000
0000120 499f 0000 cadf 000d 0000 0000 0000 0000

事情就是这么个事情,情况就是这么个情况。

这就是usb设备驱动的简单框架,后面有空在把写操作(数据由主机发送到设备)的驱动模型以及各种传输类型的驱动更新下

 

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Django框架 Form组件2(生成标签,验证数据,其他)

    一.生成HTML标签 标签是通过插件生成的1.通过.<field_name>生成: #在后端: <obj>=<form_class>(**<acq_data>):生成<input>#参数说明:form_class:Form类的名称acq_data:默认值构成的dict#也可以在定义Form类时给某个字段单独设置默认值obj:返回自…...

    2024/3/8 3:48:14
  2. C++ primer(第五版) 练习 6.30

    //C++ primer(第五版) 练习 6.30 //题目:编译第200页的str_subrange函数,看看编译器是如何处理函数中的错误的。 //作者:Seven777 //时间:2020年7月5日 17:55#include <iostream>using namespace std;bool str_subrange(const string& str1, const string& …...

    2024/3/28 20:40:38
  3. 嵌入式浮点运算异常

    嵌入式设备中出现float运行无法执行float问题从c语言端无法定位很难定位问题,需要借助汇编语言调试解决。 针对float和double运算,arm内核会进行加速来提高运算速度。 主要涉及ARM平台NEON指令的编译和优化,主要在汇编指令中区分差异。 以float运算中vadd.f32 指令就是对应f…...

    2024/3/15 7:33:52
  4. VHDL设计—简易LED数字时钟

    简易LED数字时钟...

    2024/3/11 9:52:50
  5. 一、Java基础1.8~1.9

    第一章 Java基础1.8循环1.8.1while循环1.8.2for循环1.8.3增强for循环1.8.4do while循环1.8.5循环陷阱1.8.6注意点1.9判断1.9.1if1.9.2if-else1.9.3嵌套if1.9.4if-else if-else1.9.5switch1.9.6跳转 软件是一系列按照特定顺序组织的计算机数据和指令的集合 1.8循环 编程语言中的…...

    2024/3/8 3:48:10
  6. 【实训3-javaweb】ems

    〇、前情提要 暑期计算机实训。 使用eclipse+tomcat+mysql 一、eclipse中配置tomcat 解压下载好的tomcat在eclipse中---window---preferencs--server -- runtime Environments----add ---选择对应tomcat版本,最下面对勾勾选上----broswer---找到解压的位置 ----确定 二、mys…...

    2024/3/11 10:59:24
  7. 图像仿射的基本原理-旋转变换、平移、缩放

    旋转是图像处理的常用技巧。今天介绍一下旋转,平移以及尺度放缩的基本原理。 点的旋转 给定一个点P(x,y),以及一个角度θ\thetaθ,求逆时针旋转θ\thetaθ之后新的点坐标P′PP′的位置。 我们用极坐标表示P x=Rcosϕx = Rcos\phix=Rcosϕ y=Rsinϕy = R sin\phiy=Rsinϕ 逆…...

    2024/3/8 3:48:08
  8. 【笔记】mitmproxy的使用

    一、安装安装mitmproxy的4.0.4版本安装后有3个命令行工具:mitmproxy, mitmdump, mitmwebmitmproxy:交互式;查看流量数据(请求与响应);执行自定义脚本mitmdump:执行自定义脚本,脚本在Mitmproxy中叫做Addon使用mitmdump --version查看版本信息使用mitmweb直接启动web页面二…...

    2024/3/11 1:56:19
  9. 单链表的实现和基本操作

    一 概述基本操作包括单链表的增,删,查,改以及单链表数据的打印。1.初始化单链表!2.使用前插法将数插入单链表中!3.使用后插法将数插入单链表中!4.在单链表指定位置增加一个数!5.从单链表中删除指定位置的数!6.从单链表中找出某一个指定的数!7.将单链表中的结点数据替换!8.输…...

    2024/3/12 20:33:23
  10. 【Java学习】_02注释和关键字

    一、注释 注释是再程序指定位置添加说明性信息,不参与程序运行 1.注释的分类 (1)单行注释 //注释信息 (2)多行注释 /* 注释信息 */ (3)文档注释 /*注释信息/ 2.举例 /*Java程序中最基本的组成单位是类。类的定义格式:public class 类名{}这是我定义的HelloWorld类 */ pu…...

    2024/3/8 3:48:06
  11. python初级8函数中

    1函数的返回值 ●返回值就是函数执行以后返回的结果 ●通过return来指定函数的返回值 ●return后面可以跟任意对象,返回值甚至可以是一个函数 def s(*b): r=0for i in b:r+=iprint(r) s(1,2,3)6 # 但是这个r=6 这个r自始至终都在函数内部 def s(*b):r=0for i in b:r+=ipri…...

    2024/3/8 3:48:04
  12. 微信小程序之将base64图片转为本地图片

    开始 最近项目中遇到个问题,就是生成海报的时候,需要画上小程序的二维码,然后后台返回的二维码图片是base64的格式,真机生成海报后二维码没有显示。 所以就把后台返回的base64格式的二维码图片转为本地图片,主要的API有wx.getFileSystemManager和wx.getFileSystemManager(…...

    2024/3/4 6:03:54
  13. Jmeter的数据驱动

    一、简介数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚本读取并执行测试的过程。 有的时候会有大量的测试脚本与测试数据内聚在一起,使得我们的测试脚本的可移植性及可维护性变得很不好,所以采取了csv格式表格保存测试数据来驱动…...

    2024/3/28 19:03:16
  14. Java中的Lambda简单学习

    Lambda表达式Lambda简述以线程创建为例Lambda应用二最后 Lambda简述JDK8的一个新特性 希腊字母排序十一位的字母,英文名称为Lambda 避免内部类定义过多 其实质属于函数式编程的概念下面是今天初次接触Lambda的简单应用 以线程创建为例 因为线程创建用到一个Runnable接口,很符…...

    2024/3/28 19:03:14
  15. springboot使用@Async,和@Async整合线程池

    @Async使用,最好把线程放到单独的一个类中。代码实现用户登录异步写入登录日志。1. 登录伪代码/** 异步执行类 */@Autowiredprivate AsyncLoginLogManage asyncLoginLogManage;@Overridepublic BaseResponse<JSONObject> login(UserLoginDto userLoginDto) {// 异步写入…...

    2024/3/28 19:03:13
  16. pytorch学习记录(2) Autograd

    2 AutoGrad 2.1 autograd基础操作计算梯度:z.backward() 沿着计算图的每一条边计算梯度,直到叶子节点为止查看梯度:x.grad ∂z∂x \frac{\partial z}{\partial x} ∂x∂z​ 注意:默认参数backward(retain_graph=False)下,计算图graph会被清空,如需保留,设置retain_graph=True如…...

    2024/3/28 19:03:13
  17. Flink学习9---DataStream之功能更丰富的Transformation算子RichMapFunction

    Flink还提供了功能更丰富的Transformation实现接口。RichFuction除了提供原来MapFuction的方法之外,还提供open, close, getRuntimeContext 和setRuntimeContext方法,这些功能可用于参数化函数(传递参数),创建和完成本地状态,访问广播变量以及访问运行时信息以及有关迭代…...

    2024/3/8 3:48:02
  18. mybatis-plus的学习

    1.主键生成策略2.自动填充 创建时间和更新时间: create_time和update_time , 类型为datetime类型在对应的pojo类上,加上注解@TableField@TableField(fill = FieldFill.INSERT )private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;…...

    2024/3/13 15:29:11
  19. java学期总结篇

    在这学期,我们开始学习java这门新的课程,但因为疫情的原因,我们的java编程课是在家里通过上网课的形式开始学习的。我们开始在钉钉上课,课结束还有直播回放可以看,这让我们开始的内容可以在不断重温。因为上网课,可能会没有积极性,老师就让积极参与,代码敲完截图上传,…...

    2024/3/11 10:11:13
  20. 坚定信心、科学防疫

    ——许昌学院“普‘疫’识,共健康”社会实践队2020年7月5日,周日。许昌学院“普‘疫’识,共健康”社会实践队的社会实践活动已经进行到了第四天。队员们完成的任务和工作相比于前几天更加的完善。从新冠疫情爆发至今,各行各业都遭到了重大的打击,许多人都不得不冒着感染新…...

    2024/3/11 8:20:11

最新文章

  1. 位运算算法(2)

    目录 面试题 01.01. 判断字符是否唯一 一、题目描述 二、思路解析 三、代码 268.丢失的数字 一、题目描述 二、思路解析 三、代码 371.两整数之和 一、题目描述 二、思路解析 三、代码 137.只出现一次的数字 II 一、题目描述 二、思路解析 三、代码 面试题 01.0…...

    2024/3/29 22:12:43
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1

    一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理&#xff0c;它完全符合 Java Message Service (JMS) 2.0 规范&#xff0c;并支持多种通信协议&#xff0c;包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…...

    2024/3/29 17:11:04
  4. Excel 导入、导出的封装

    最近在封装公司统一使用的组件&#xff0c;主要目的是要求封装后开发人员调用简单&#xff0c;不用每个项目组中重复去集成同一个依赖l&#xff0c;写的五花八门&#xff0c;代码不规范&#xff0c;后者两行泪。 为此&#xff0c;我们对EasyExcel进行了二次封装&#xff0c;我…...

    2024/3/29 3:10:33
  5. AI推介-大语言模型LLMs论文速览(arXiv方向):2024.03.15-2024.03.20

    文章目录~ 1.Dated Data: Tracing Knowledge Cutoffs in Large Language Models2.Automatic Information Extraction From Employment Tribunal Judgements Using Large Language Models3.mPLUG-DocOwl 1.5: Unified Structure Learning for OCR-free Document Understanding4.…...

    2024/3/29 11:02:31
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/29 18:08:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/29 18:08:34
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/29 16:26:39
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/29 18:08:00
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/29 11:11:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/29 8:28:16
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/29 7:41:19
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/29 18:07:15
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/29 9:57:23
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/29 18:06:57
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/29 17:27:19
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/29 18:06:36
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/29 18:06:22
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/29 18:06:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57