当前位置: 首页 > news >正文

电子电器架构刷写方案——General Flash Bootloader

电子电器架构刷写方案——General Flash Bootloader

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。

注:文章1万字左右,深度思考者入!!!

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:

屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。
无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。

文章大体有如下内容:

1、简介

2、刷写系统概述

3、Flash Bootloader刷写流程

4、Flash Bootloader架构介绍

5、关于刷写的思考

正文如下:

一、Bootloader简介

首先基于现在整车电子电气架构中ECU类型,大体分为两类:

MCU(常规MCU)具备硬实时,应用Classic AUTOSAR软件架构;

MPU,具备操作系统,应用上多使用Adaptive AUTOSAR软件架构或者自研;

那相应对于Bootloader介绍也分为:

1、MCU Bootloader是微控制器(MCU)中的引导程序,它的设计旨在解决程序升级问题,尤其是在产品稳定投产、程序烧录后,MCU被外壳等材料覆盖,无法通过烧录口进行升级的情况下。Bootloader可以通过一定方式触发运行,比如按键触发或UDS协议指令(在汽车行业中)触发。一旦Bootloader运行,它可以通过串口接收新的代码并写入Flash,从而在不使用烧录器的情况下实现程序升级。

2、Bootloader,中文名称为系统启动加载器,是计算机系统从开机上电到操作系统启动过程中所需要的一个引导程序。在嵌入式Linux系统中,Bootloader也扮演着重要的角色。它是一段在操作系统内核运行之前运行的程序,主要负责初始化硬件设备、建立内存空间映射图,将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

Bootloader的具体作用如下:

-> 1、提供初始的硬件设备的初始代码,以及检测和初始化单板;

-> 2、引导操作系统,包括定位、解压和加载操作系统到内存空间,然后将其控制权交给操作系统;

-> 3、当操作系统获取控制权后,嵌入式系统中的Bootloader就不复存在了。

此外,U-Boot是一款流行的功能强大的开源Bootloader项目。它支持多种嵌入式操作系统内核,如Linux、NetBSD、VxWorks等,也支持多种处理器系列,如PowerPC、ARM、x86、MIPS。U-Boot有较高的可靠性和稳定性,以及高度的灵活的功能设置,适合U-Boot调试、操作系统的不同引导要求、产品发布等。它还包含丰富的设备驱动源码和较为丰富的开发调试文档与强大的网络技术支持。

首先关于ECU刷写的软件架构Flash Bootloader并没有在AUTOSAR规范中有明确定义。原因是每家刷写策略基于自身需求不一致,没有必要在AUTOSAR规范中特定定义函数接口等信息。

基于整车不同域,使用场景不一样,就会有不同的总线类型。因此在做ECU刷写时,也是通过不同的总线类型CAN,LNFlexRay or Ethernet)来完成软件的下载更新。

整车所有件基于相同的刷写流程,只是数据传输的总线载体不一样而已。

在研发阶段,可以随时进行应用程序(Application)的更新和下载可以随时为研发工程师随时进行下载调试更新等功能在车辆下线阶段,进行应用程序的刷写和灌注:在车辆售后阶段进行售后维护和升级

目前对于ECU更新方式:

1、刷写上位机通过OBD口,相当于传统的Flash更新方式进行更新;

2、另外是通过OTA,基于OTAMaster 对车内节点进行更新;

image

上述刷写方式不需要通过更换硬件ECU来完成软件的更新,对于软件bug或者功能升级,在硬件不需要更新的情况下,可以直接通过更新Application功能实现功能升级对于量产的ECU产品,可以不通过传统的调试接口UTAGDAP2)来完成Fash 的刷写这个时候调试口已经关闭,通过OBD口升级提供一种更好的方案对于车内的ECU来讲,通过一套协议(UDS)即可完成全部ECU的刷写需求在一定程度上,保证了刷写过程中的安全性和合法性。

image

通过上位机加载待刷写的Flash Data/Driver,不用通过烧录口就可以进行software update,对用户而言更加友好。

二、系统概述

诊断仪通过OBD诊断口和网关ECU进行连接,实现诊断刷写和路由功能:每个ECU的内存布局都是基本类似,包含了三大部分 Flash Bootloader.Flash Driver 和Application.

image

Flash Bootloader实现总线通信基于ISO标准和OEM企标,实现诊断服务功能Application调用Flash Driver 接口来对Fash进行擦写操作一般情况下,代码仅在轮询模式下运行的中断仅在一些特殊需求下才会用到,一般代码精简短小,占用空间资源不大.

image

用于擦除和写入数据的Driver,通常是在RAM中执行调用的,是片内片外的驱动程序可对Hash 进行擦除和写入,可将数据写入Flash中。

-> 通过驱动调用擦除接口,可以对内存地址进行擦除,将地址上旧数据进行擦掉;

-> 在数据写入阶段可以调用驱动的写入接口,实现对新数据在擦除后的地址进行写入操作,不同的芯片厂家和硬件平台,flash driver 是有所不同的。

根据 Flash 芯片不同,不同点主要体现如下两点:

1、不同的擦写参数(Sectors/Pages): 擦除和写入的Sector 和page 大小不一样2、存储保护机制(ECC);

对于第一点(擦写参数(Sectors/Pages)是指在擦除或重写存储设备中的数据时所使用的单位。不同的存储设备可能有不同的擦写参数,这些参数可能会影响擦写性能和寿命。

在闪存设备中,擦写参数通常是以扇区(Sector)或页(Page)为单位进行操作的。扇区通常是一个存储单元,可以容纳一定数量的数据,而页是闪存设备中一个最小的可擦除单位。

对于不同的闪存设备,擦写参数可能会有所不同。例如,一些设备可能有 2KB的页大小,而另一些设备可能有 4KB 或 8KB 的页大小。此外,一些设备可能支持不同的擦写策略,例如一次擦写一个扇区或一次擦写多个扇区。

这些不同的擦写参数可能会影响闪存设备的性能和寿命。例如,如果一个设备的页大小较小,那么在执行写入操作时,可能会需要进行更多的读-改-写操作,这可能会导致性能下降。此外,如果一个设备的擦写策略过于频繁地擦除同一区域的数据,那么这个区域的寿命可能会比其他区域更短。因此,选择正确的擦写参数对于优化闪存设备的性能和寿命非常重要。这需要根据具体的应用需求和设备特性进行选择。

对于第二点:(存储保护机制(ECC)是一种用于Nand Flash 的差错检测和修正算法,它能够确保数据的可靠性。

在Nand Flash的每个页面上,包括额外的存储空间,即64个字节的空闲区(每512 字节的扇区有 16 字节)。这个空闲区能存储 ECC 代码及其它信息,例如磨损评级或逻辑到物理块映射。在编程操作期间,ECC单元根据扇区中存储的数据来计算误码校正代码。数据区的ECC代码然后被分别写入到各自的空闲区。当数据被读出时,ECC代码也被读出,运用反操作可以核查读出的数据是否正确

image

如果有数据错误,ECC 算法可以校正数据错误。能校正的错误的数量取决于所用算法的校正强度。软件通常负责磨损评级或逻辑到物理映射,并且如果处理器不包含ECC 硬件的话,软件还需要提供 ECC 码。

芯片内部对数flash driver存放位置:

-> 1、UTSAR转化为加密的二进制数组文件并对文件进行加密存储在FIashBootloader 中的指定Flash 区域,调用前先解密目的是防止flash误操作,误调用,比如用户程序(Application 调用flashdriver 接口,对某-块区域进行调用擦写),添加加密策略,就保证了只有 Bootloader 具备解密能力,才可以调用Flash driver;

-> 2、刷写Application之前通过诊断仪载入到 RAM中上述操作是先通过诊断仪将 flash driver 下载到指定的区域(RAM 区域),下载完成后Bootloader 才可以调用相应的接口实现对内存的擦除和写入。ECU 复位或者断电后 flashdriver就不再存在,避免安全问题。

image

三、Flash Bootloader刷写流程

本文仅描述通用性刷写流程,不同OEM或多或少有一定的差异如上图,当前假设只有FBL程序,没有Application(用户程序)。ECU上电后运行在Bootloader当中,Tester 通过相应的接口卡

举例常用的:

CAN总线用VN16 系列;

DoIP用VN56系列。

image

这样刷写上位机与待刷写 ECU 建立连接,通过UDS 协议刷写上位机与 ECU 进行相应的数据交互,主要读取一些所需要的诊断版本信息数据。接下来就是将用户程序数据通过刷写上位机传到ECU相应的地址处进行刷写。数据传输并写入完毕,Bootloader 会对数据进行校验,其中包含对单独每一个 block 以及整体的数据进行校验上述完毕后,对App有效标志位进行操作置位,后续复位。复位操作首先在FBL中查阅应用数据flag 位是否置位,判断有效后就会跳到用户程序中在Application中运行正常。后续有新的刷写请求,会继续运行至FBL中。对于刷写流程大体分为三步:

image

A:Pre programming

首先切换至编程会话模式,进行Programming Pre-condition状态检查(车速、挡位等);

关闭DTC功能

对常规通信报文进行设置,只接收诊断报文

目的是让ECU全负荷为刷写服务。

image

切换至编程会话模式写入一些DID和读取DID操作这些操作与OEM企业标准强相关。在定义刷写流程中明确每一步执行的内容和目的。信息安全要求过Service27,表示通过争取途径获取访问权限。

image

1、Request Service 34报文格式中会体现下载数据长度、是否压缩等信息;、

image

2、通过Service36/37完成数据的整体传输3、数据传输完成后,会执行 Service 31,对下载数据做完整性校验,数据丢失、错位等失真情况。

image

Flash Driver后会通过Service 31RID(猜出FF00)调用对内存擦除的接口实现对ECU内存的擦除操作。想要写入新的数据之前,必须对数据做擦除操作后才可以进行写入。

image

image

如上图,Vector 中国关于Fash Bootloader 产品手册的截图关于 Flash Bootloader 工程主要分为几大部分:

1、通信协议栈主要用于实现不同总线的通信需求,如图支持车载CAN 总线/LIN 总线/Flexray总线/车载以太网

2、OEM Download Manager主要是基于OEM企标要求做代码功能实现:A:OEM 定义的刷写流程(在 Bootloader 模式下)所使用到的诊断服务、子服务所支持的DID/RID/NRC信息都在这个模块做功能实现;

3、Fash bootloader 用户程序读取一些软件版本号、NVM存储应用,小模块上述流程也完全符合AUTOSAR开发流程。包含CAN、LIN早期协议栈是GENY做配置,现在是用Dawinciconfigurator定义pdur、CANdRIVER。当前 Bootloader 中也包含了一些非AUTOSAR定义的内容,这个时候需要由 Bootloader软件服务商自己OEM特定需求做定制化开发。也就是日常所说的购买成熟协议栈使用。

4、Bootmanager为芯片一级boot,是ECU 上电后第一个执行的代码,由该模块负责ECU该往那个代码模块跳比如进入 Bootloader还是Application(常见刷写成功后置位Flash位作为下次启动的判定标准)当需要对FlashBootloader做更新时,就需要由Bootloader Updater 来实现,其实这个逻辑也可以对照SBL/PBL,当有Super SBL时,也可以允许对PBL做擦除。

5、为了完成刷写功能,用于UI界面加载Flash Driver/Flash Data,也执行刷写template定义刷洗序列。

image

FBL和Application之间的跳转ECU上电后,代码运行会进入到FBL中,做相应的一些ECU初始化,初始化完成后会进入判断刷写标志位的一个步骤。若刷写标志位有效,进入到Boot 中,若标志位无效,进入App 中。FBL跳转至ApplicationFBL初始化

A:检查刷写标志位

B:检查Application的有效标志位

C:跳转至Application的入口

D:执行Application的启动代码

image

Application跳转至FBL

Application 运行中接收到诊断仪发出的诊断刷写请求

Application 将刷写请求标志位存入NVM 或者RAM中

Application 执行复位操作

FBL检查诊断刷写标志位

image

另外关于Stay In Boot功能:

在Application无法接收和处理诊断请求时,避免ECU无法进行刷写更新并不是所有的OEM都会用到,通常情况下,用于研发阶段,量产中可能也会用(影响启动时间)。该功能应用场景是在某一次更新当中把新的APP更新到ECU中。此时APPdata没有经过很充分的认证导致APP 软件中有 bug,比如有死循环 (While)。每一次ECU 上电,先进入boot,在进入app,死循环无法与诊断仪(刷写上位机)做诊断数据交互,发送请求也没有响应。

这个时候通过其他方式来规避这个风险,vFlash也支持,对ECU启动时间有影响。

image

当收到Stay in boot message进入Stay in boot状态,避免ECU编程板砖。

image

image

image

关于ECU安全启动

对于Flash Data会存在片内或片外,会有可能被不法分子做篡改的风险。

通过安全启动获知该ECU 是否App data 是否被篡改、是否无效等,保证车辆安全ECU一上电,通过HSM,HSM 可以理解位信息安全的加密引擎,对FBL做源码校验,通过特定算法和 key 计算出一个 MAC 值(消息认证码)。这个消息认证码与原本存在芯片中的消息认证码进行比较:

若一样,FBL valid。不一样:FBL被算改了!

同样策略也可以对APP做mac检验,开启ECU时计算一个MAC值对比ECU内部存储的就可以确认APP是否有效安全启动每一家芯片供应商都有自己的做法

HSM(硬件安全模块)对于实现AUTOSAR系统的加密保护起着重要作用。随着汽车电子控制单元(ECU)连通度的提高,安全和防范外部威胁的重要性日益增加。HSM具有适当的固件,即使在资源不足的情况下,也能保证系统的加密。此外,HSM还允许在单独的处理器上计算密码,以满足实时需求。因此,HSM在AUTOSAR系统中发挥着关键作用,确保了系统的安全性和实时性能。

image

为了传输数据增加速度,会在刷写过程中支持压缩数据传输。这点功能的本质是降低数据传输时间,在Server端会有还原步骤,整体刷写时间增加还是降低主要看还原时间。

image

数据传输步骤如下图:

image

原则上对于Flash Bootloader只能在供应商下线时候做烧录下载后便不再更新,但是极少特殊情况也是可以对Flash Bootloadr进行更新。

image

更新步骤如下:

image

搁笔分享完毕!

愿你我相信时间的力量

做一个长期主义者!

相关文章:

电子电器架构刷写方案——General Flash Bootloader

电子电器架构刷写方案——General Flash Bootloader 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:文章1万字左右,深度思考者入!!! 老规矩,分享一段喜欢的文字,避免…...

【Linux】僵尸与孤儿 进程等待

目录 一,僵尸进程 1,僵尸进程 2,僵尸进程的危害 二,孤儿进程 1,孤儿进程 三,进程等待 1,进程等待的必要性 2,wait 方法 3,waitpid 方法 4,回收小结…...

Java小案例-Sentinel的实现原理

前言 Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。 主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 核心概念 要想理解一个新的技…...

【Leetcode Sheet】Weekly Practice 21

Leetcode Test 1901 寻找峰值Ⅱ(12.19) 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中任意两个相邻格子的值都 不相同 。找出 任意一个 峰值 mat[i][j] 并 返回其位置 [i,j] 。 …...

C语言使用qsort和bsearch实现二分查找

引言 在计算机科学领域&#xff0c;查找是一项基本操作&#xff0c;而二分查找是一种高效的查找算法。本博客将详细解释一个简单的C语言程序&#xff0c;演示如何使用标准库函数qsort和bsearch来对一个整数数组进行排序和二分查找。 代码解析 包含头文件 #include <stdi…...

MySQL的替换函数及补全函数的使用

前提&#xff1a; mysql的版本是8.0以下的。不支持树形结构递归查询的。但是&#xff0c;又想实现树形结构的一种思路 提示&#xff1a;如果使用的是MySQL8.0及其以上的&#xff0c;想要实现树形结构&#xff0c;请参考&#xff1a;MySQL数据库中&#xff0c;如何实现递归查询…...

2022第十二届PostgreSQL中国技术大会-核心PPT资料下载

一、峰会简介 本次大会以“突破•进化•共赢 —— 安全可靠&#xff0c;共建与机遇”为主题&#xff0c;助力中国数据库基础软件可掌控、可研究、可发展、可生产&#xff0c;并推动数据库生态的繁荣与发展。大会为数据库从业者、数据库相关企业、数据库行业及整个IT产业带来崭…...

2024 年 10大 AI 趋势

2025 年&#xff0c;全球人工智能市场预计将达到惊人的 1906.1 亿美元&#xff0c;年复合增长率高达 36.62%。 人工智能软件正在迅速改变我们的世界&#xff0c;而且这种趋势在未来几年只会加速。 我们分析了未来有望彻底改变 2024 年的 10 个AI趋势。从生成式人工智能的兴起到…...

Uboot

什么是Bootloader? Linux系统要启动就必须需要一个 bootloader程序&#xff0c;也就说芯片上电以后先运行一段bootloader程序。 这段 **bootloader程序会先初始化时钟&#xff0c;看门狗&#xff0c;中断&#xff0c;SDRAM&#xff0c;等外设&#xff0c;然后将 Linux内核从f…...

ECMAScript 的未来:预测 JavaScript 创新的下一个浪潮

以下是简单概括关于JavaScript知识点以及一些目前比较流行的比如&#xff1a;es6 想要系统学习&#xff1a; 大家有关于JavaScript知识点不知道可以去 &#x1f389;博客主页&#xff1a;阿猫的故乡 &#x1f389;系列专栏&#xff1a;JavaScript专题栏 &#x1f389;ajax专栏&…...

代码随想录算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素

239. 滑动窗口最大值 题目链接&#xff1a;239. 滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 文章讲解…...

推荐五个免费的网络安全工具

导读&#xff1a; 在一个完美的世界里&#xff0c;信息安全从业人员有无限的安全预算去做排除故障和修复安全漏洞的工作。但是&#xff0c;正如你将要学到的那样&#xff0c;你不需要无限的预算取得到高质量的产品。这里有SearchSecurity.com网站专家Michael Cobb推荐的五个免费…...

Cross-Drone Transformer Network for Robust Single Object Tracking论文阅读笔记

Cross-Drone Transformer Network for Robust Single Object Tracking论文阅读笔记 Abstract 无人机在各种应用中得到了广泛使用&#xff0c;例如航拍和军事安全&#xff0c;这得益于它们与固定摄像机相比的高机动性和广阔视野。多无人机追踪系统可以通过从不同视角收集互补的…...

【LeetCode刷题笔记】动态规划(二)

647. 回文子串 解题思路: 1. 暴力穷举 , i 遍历 [0, N) , j 遍历 [i+1, N] ,判断每一个子串 s[i, j) 是否是回文串,判断是否是回文串可以采用 对撞指针 的方法。如果是回文串就计数 +1...

(十七)Flask之大型项目目录结构示例【二扣蓝图】

大型项目目录结构&#xff1a; 问题引入&#xff1a; 在上篇文章讲蓝图的时候我给了一个demo项目&#xff0c;其中templates和static都各自只有一个&#xff0c;这就意味着所有app的模板和静态文件都放在了一起&#xff0c;如果项目比较大的话&#xff0c;这就非常乱&#xf…...

蓝牙技术在物联网中的应用

随着蓝牙技术的不断演进和发展&#xff0c;蓝牙已经从单一的传统蓝牙技术发展成集传统蓝牙。高速蓝牙和低耗能蓝牙于一体的综合技术&#xff0c;不同的应用标准更是超过40个越来越广的技术领域和越来越多的应用场景&#xff0c;使得目前的蓝牙技术成为包含传感器技术、识别技术…...

宝塔面板Linux服务器CentOS 7数据库mysql5.6升级至5.7版本教程

近段时间很多会员问系统更新较慢&#xff0c;也打算上几个好的系统&#xff0c;但几个系统系统只支持MYSQL5.7版本&#xff0c;服务器一直使用较低的MYSQL5.6版本&#xff0c;为了测试几个最新的系统打算让5.6和5.7并存使用&#xff0c;参考了多个文档感觉这种并存问题会很多。…...

掌握常用Docker命令,轻松管理容器化应用

Docker是一个开源的应用容器引擎&#xff0c;它可以让开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的Linux机器或Windows机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。下面介…...

【数据结构1-2】P5076 普通二叉树(简化版)(c++,multiset做法)

文章目录 一、题目【深基16.例7】普通二叉树&#xff08;简化版&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1基本思路&#xff1a; 一、题目 【深基16.例7】普通二叉树&#xff08;简化版&#xff09; 题目描述 您需要写一种数据结构&#xff0c;来维…...

Linux系统安装及管理

目录 一、Linux应用程序基础 1.1应用程序与系统命令的关系 1.2典型应用程序的目录结构 1.3常见的软件包装类型 二、RPM软件包管理 1.RPM是什么&#xff1f; 2.RPM命令的格式 2,1查看已安装的软件包格式 2.2查看未安装的软件包 3.RPM安装包从哪里来&#xff1f; 4.挂…...

MySQL学生向笔记以及使用过程问题记录(内含8.0.34安装教程

MySQL 只会写代码 基本码农 要学好数据库&#xff0c;操作系统&#xff0c;数据结构与算法 不错的程序员 离散数学、数字电路、体系结构、编译原理。实战经验&#xff0c; 高级程序员 去IOE&#xff1a;去掉IBM的小型机、Oracle数据库、EMC存储设备&#xff0c;代之以自己在开源…...

obs video-io.c

video_frame_init 讲解 /* messy code alarm video_frame_init 函数用于初始化视频帧。它接受一个指向 struct video_frame 结构体的指针 frame&#xff0c; 视频格式 format&#xff0c;以及宽度 width 和高度 height。该函数根据视频格式的不同&#xff0c;计算出每个视频帧…...

简述 tcp 和 udp的区别?

简述 tcp 和 udp的区别&#xff1f; TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;是两种不同的传输层协议&#xff0c;用于在计算机网络中进行数据传输。以下是它们的主要区别&#xff1a; 区别&#xff1…...

信息收集 - 谷歌hack

搜索引擎 FOFA网络空间测绘:https://fofa.info/ FOFA(FOcus on Assets)是一个网络空间搜索引擎,可以帮助用户快速定位和收集特定目标的信息。 ZoomEye:https://www.zoomeye.org ZoomEye 是一个网络空间搜索引擎,可以用于发现和收集特定目标的网络设备、Web应用程序、开放…...

英飞凌TC3xx之一起认识DSADC系列(七)应用实战项目二(实现旋变软解码)

英飞凌TC3xx之一起认识DSADC系列(七) 1 项目要求2 项目实现2.1 内部时钟配置2.2 输入信号配置2.3 调制器配置2.4 滤波器链路配置2.5 整流器配置3 总结本文写一篇关于DSADC的resover的载波信号生成的应用,刚刚接触DSADC的开发者很容易被手册中简短的文字描述弄的迷惑,它到底…...

【浏览器】同源策略和跨域

1. 什么是跨域 在说跨域之前,先说说同源策略,什么是同源策略呢?同源策略是浏览器的一种安全机制,减少跨站点脚本攻击(XSS,Cross Site Scripting)、跨站点请求伪造(CSRF,Cross Site Request Forgery)攻击等,因为非同源的请求会被浏览器拦截掉。 同源就是协议、域名(…...

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…...

基于jdk11和基于apache-httpclient的http请求工具类

1.基于apache-httpclient 需要引入依赖 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.5</version></dependency> 工具类如下&#xff1a; package com.bw.e…...

Node.js(二)-模块化

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 1.2 编程领域中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&…...

ARM AArch64的TrustZone架构详解(上)

目录 一、概述 1.1 在开始之前 二、什么是TrustZone? 2.1 Armv8-M的TrustZone 2.2 Armv9-A Realm Management Extension(RME)...

从源PC上一次性p2v(qcow2)的构想

磁盘分区表&#xff0c;虚拟硬盘文件&#xff0c;操作系统引导 1. 基本概念和术语 源硬盘&#xff1a;一般就是客户的PC机的硬盘&#xff0c;硬盘里面包含了Windows分区。 源Windows&#xff1a;以源硬盘启动的Windows环境。 虚拟磁盘文件&#xff1a;文件格式有qcow2、vhd…...

数据结构:KMP算法

1.何为KMP算法 KMP算法是由Knuth、Morris和Pratt三位学者发明的&#xff0c;所以取了三位学者名字的首字母&#xff0c;叫作KMP算法。 2.KMP的用处 KMP主要用于字符串匹配的问题&#xff0c;主要思想是当出现字符串不匹配时&#xff0c;我们可以知道一部分之前已经匹配过的的文…...

小程序真机如何清除订阅数据

在做小程序订阅消息开发的过程中发现&#xff0c;真机上如果是选择了‘总是保持以上选择’&#xff0c;一旦用户授权后&#xff0c;后面就不会再弹出申请改订阅消息的授权弹窗&#xff0c;这对于开发过程中是很不方便的。 曾试过清除缓存&#xff0c;重进小程序也不能清除掉 解…...

基于ssm出租车管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本出租车管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…...

音视频转码

音视频转码是指&#xff1a; 容器中音视频数据编码方式转换&#xff0c;如由H.264编码转成mpeg-4编码&#xff0c;mp3转成AAC&#xff1b;音视频码率的转换&#xff0c;如4Mb视频码率降为2Mb&#xff0c;视频分辨率的转换&#xff0c;如1080P转换为720P&#xff0c;音频重采样…...

编解码异常分析

前言 最近在做的项目&#xff0c;有H264解码的需求。部分H264文件解码播放后&#xff0c;显示为绿屏或者花屏。 分析 如何确认是否是高通硬解码的问题 adb 指令 adb root adb remount adb shell setenforce 0 adb shell setprop vendor.gralloc.disable_ubwc 1 adb shell c…...

APISpace 热门好用的API推荐,含免费次数

短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可达&#xff0c;99.99&#xff05;到达率&#xff0c;支持大容量高并发。通知短信&#xff1a;短信通知支持三大运营商以及虚拟运营商&#xff0c;我们提供电信级运维…...

Qt/QML编程学习之心得:一个.qml文件调用另一个.qml文件(十七)

在c++中,一个文件调用另外一个文件最直接最快捷的方式就是#incldue<头文件>的使用,那么在元数据描述性语言QML中,如何从一个界面描述调用另外一个界面描述,一个.qml文件调用另外一个.qml呢?QML虽然有个import,但是用法可以说完全不同于#include。 引用方法1:直接…...

C++_单列模式介绍

介绍 (1)…什么是单例 1.只能有一个实例化的对象的类(2).单例有什么用 1.多线程的线程池的设计 2.系统中只需要一个窗口时才使用单例(无法重复创建) 3.一个操作系统只能有一个文件系统(3).单例怎么用 1.隐藏所有构造函数 2.静态成员内部调用构造函数实例化 3.提供一个静态函数来…...

油烟净化器如何做到高效净化?科技力量,清新餐饮生活

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 油烟净化器的出现&#xff0c;为我们的餐饮生活注入了一抹清新的色彩。然而&#xff0c;它究竟是如何工作的&#xff1f;为何能…...

【HTML5】HTML5 语音合成

一、前言 前一段时间在项目中需要用到播报文字语音。找到了 HTML 5 有这样的功能。 现在有时间进行总结下。 二、SpeechSynthesis SpeechSynthesis 接口是语音服务的控制接口。它可以用于获取设备上关于可用的合成声音的信息&#xff0c; 开始、暂停语音&#xff0c;或者别…...

顺序表的实现

目录 一. 数据结构相关概念​ 二、线性表 三、顺序表概念及结构 3.1顺序表一般可以分为&#xff1a; 3.2 接口实现&#xff1a; 四、基本操作实现 4.1顺序表初始化 4.2检查空间&#xff0c;如果满了&#xff0c;进行增容​编辑 4.3顺序表打印 4.4顺序表销毁 4.5顺…...

深度学习中的池化

1 深度学习池化概述 1.1 什么是池化 池化层是卷积神经网络中常用的一个组件&#xff0c;池化层经常用在卷积层后边&#xff0c;通过池化来降低卷积层输出的特征向量&#xff0c;避免出现过拟合的情况。池化的基本思想就是对不同位置的特征进行聚合统计。池化层主要是模仿人的…...

Java面试整理-Java设计模式

Java中的设计模式通常是从更广泛的面向对象设计模式中借鉴而来的,这些模式旨在解决特定的设计问题和改善代码的可维护性、灵活性和可扩展性。设计模式大致可以分为三类:创建型、结构型和行为型。以下是这三类中一些常见的设计模式: 创建型模式 单例模式(Singleton):确保一…...

用CHAT了解更多知识点

问CHAT&#xff1a;什么是硅基生命和碳基生命&#xff1f; CHAT回复&#xff1a;硅基生命和碳基生命是两种理论性的生物体类型&#xff0c;这些生物体主要是由硅或碳元素以及其他元素构成的。 碳基生命是我们当前所熟知的生命形式。碳元素能够形成稳定且复杂的分子&#xff0c;…...

一个利用摸鱼时间背单词的软件

大家好&#xff0c;我是 Java陈序员。 最近进入了考试季&#xff0c;各种考试&#xff0c;英语四六级、考研、期末考等。不知道大家的英语四六级成绩怎么样呢&#xff1f; 记得大学时&#xff0c;英语四级都是靠高中学习积累的老本才勉强过关。 而六级则是考了多次&#xff…...

Matlab/Simulink的一些功能用法笔记(3)

01--引言 最近加入到一个项目组&#xff0c;有一些测试需要去支持&#xff0c;通过了解原先团队的测试方法后&#xff0c;自己作了如下改善&#xff0c;大大提高了工作效率。这也许就是软件开发的意义吧&#xff0c;能够去除一些重复的机械的人工操作并且结果还非常不可靠。 …...

Wafer晶圆封装工艺介绍

芯片封装的目的&#xff08;The purpose of chip packaging&#xff09;: 芯片上的IC管芯被切割以进行管芯间连接&#xff0c;通过引线键合连接外部引脚&#xff0c;然后进行成型&#xff0c;以保护电子封装器件免受环境污染&#xff08;水分、温度、污染物等&#xff09;&…...

Mac OS 13+,Apple Silicon,删除OBS虚拟摄像头(virtual camera),

原文链接: https://www.reddit.com/r/MacOS/comments/142cv OBS为了捕获摄像头视频,将虚拟摄像头插件内置为系统插件了.如下 直接删除没有权限的,要删除他,在mac os 13以后,需要关闭先关闭苹果系统的完整性保护(SIP) Apple 芯片(M1,....)的恢复模式分为两种,回退恢复模式,和…...

精解 ES6 Promise 用法

&#x1f431; 个人主页&#xff1a;SHOW科技&#xff0c;公众号&#xff1a;SHOW科技 &#x1f64b;‍♂️ 作者简介&#xff1a;2020参加工作&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;优质专栏&#x…...