正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介
前言:
本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。
引用:
正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com
《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》
正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档
正点原子imx6ull-mini-Linux驱动之Linux I2C 驱动实验(21)-CSDN博客
正文:
本文是 “Arm(iMX6U)Linux系统移植和根文件系统构键篇--2.1讲uboot简介。本节将参考正点原子的视频教程和配套的正点原子开发指南文档进行学习。
0. 概述
Linux系统要启动就必须需要一个 bootloader程序,也就说芯片上电以后先运行一段bootloader程序。程序。
这段 bootloader程序会先初始化 DDR等外设,然后将 Linux内核从 flash(NAND NOR FLASH SD MMC等 )拷贝到 DDR中,最后启动 Linux内核。
当然了,bootloader的实际工作要复杂的多,但是它最主要的工作就是启动 Linux内核, bootloader和 Linux内核的系就跟 PC上的 BIOS和 Windows的关系一样, bootloader就相当于 BIOS。。所以我们要先搞定bootloader,很庆幸,有很多现成的 bootloader软件可以使用,比如 U-Boot、 vivi、 RedBoot等等,其中以 U-Boot使最为广泛,为了方便书写,本书会将 U-Boot写为 uboot。
uboot的全称是 Universal Boot Loader uboot是一个遵循 GPL协议的开源软件, uboot是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot已经支持液晶屏、网络、 USB等高级功能。 uboot官网为
The U-Boot Documentation — Das U-Boot unknown version documentation
我们可以在 uboot官网下载 uboot源码,点击图 30.1.1中左侧 Topics中的“ Source Code
打开如图 30.1.2所示界面:
但是我们一般不会直接用 uboot 官方的 U-Boot 源码的。uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。也就是半导体厂商会自己维护一个版本的 uboot,这个版本的 uboot 相当于是他们定制的。既然是定制的,那么肯定对自家的芯片支持会很全,虽然 uboot 官网的源码中一般也会支持他们的芯片,但是决议是没有半导体厂商自己维护的 uboot 全面。
- u-boot网站的源码
- SoC芯片厂家从u-boot网站上下载源码,然后把自家的芯片SoC移植进去,SoC厂家自己维护了一个版本的bu-boot,与原始u-boot相比,对自家的芯片支持更全面。
NXP 就 维 护 的 2016.03 这 个 版 本 的 uboot , 下 载 地 址 为 :
http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/tag/?h=imx_v2016.03_4.1.15_2.0.0_ga&id=
rel_imx_4.1.15_2.1.0_ga
下载界面如图 30.1.4 所示
图 30.1.4 中的 uboot-imx_rel_imx4.1.15_2.1.0_ga.xx(xx 为 zip、 tar.gz 或 tar.bz2)就是 NXP 官方维护的 uboot,后面我们学习 uboot 移植的时候就是使用的图 30.1.4 中的 uboot,下载ubootimx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。图 30.1.4中的 uboot 基本支持了 NXP 当前所有可以跑 Linux 的芯片,而且支持各种启动方式,比如 EMMC、NAND、 NOR FLASH 等等,这些都是 uboot 官方所不支持的。
但是图 30.1.4 中的 uboot 是针对NXP 自家评估板的,如果是我们自己做的板子就需要修改 NXP 官方的 uboot,使其支持我们自己做的板子,正点原子的 I.MX6U 开发板就是自己做的板子,虽然大部分都参考了 NXP 官方的I.MX6ULL EVK 开发板,但是还是有很多不同的地方,所以需要修改 NXP 官方的 uboot,使其适配正点原子的 I.MX6U 开发板。所以当我们拿到开发板以后,是有三种 uboot 的,这三种 uboot的区别如下表所示:
那么这三种 uboot 该如何选择呢?首先 uboot 官方的基本是不会用的,因为支持太弱了。最常用的就是半导体厂商或者开发板厂商的 uboot,如果你用的半导体厂商的评估板,那么就使用半导体厂商的 uboot,如果你是购买的第三方开发板,比如正点原子的 I.MX6ULL 开发板,那么就使用正点原子提供的 uboot 源码(也是在半导体厂商的 uboot 上修改的)。当然了,你也可以在购买了第三方开发板以后使用半导体厂商提供的 uboot, 只不过有些外设驱动可能不支持, 需要自己移植,这个就是我们常说的 uboot 移植。
本节是 uboot 的使用,所以就直接使用正点原子已经移植好的 uboot,这个已经放到了开发
板光盘中了。
1.U-Boot 初次编译
在 Ubuntu 中创建存放 uboot 的目录,比如我的是/home/chen/linux/uboot,然后在此目录下新建一个名为“alientek_uboot”的文件夹用于存放正点原子提供的 uboot 源码。(从正点原子网站上百度网盘链接下载)
dimon@dimon-VirtualBox:~/I.MX6ULL/uboot_altek$ lsuboot-imx-2016.03-2.1.0-g0ae7e33-v1.7.tar.bz2dimon@dimon-VirtualBox:~/I.MX6ULL/uboot_altek$
使用如下命令对其进行解压缩
dimon@dimon-VirtualBox:~/I.MX6ULL/uboot_altek$ tar -xf uboot-imx-2016.03-2.1.0-g0ae7e33-v1.7.tar.bz2
解压之后得到了整点原子修改移植过得针对正点原子 I.MX6ULL Alpha开发板的u-boot的源码。解压完成以后 alientek_uboot 文件夹内容如图 30.2.2 所示。
图 30.2.2 中除了 uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2 这个正点原子提供的 uboot 源码压缩包以外,其他的文件和文件夹都是解压出来的 uboot 源码。
512MB(DDR3)+8GB(EMMC)核心板
如果使用的是 512MB+8GB 的 EMMC 核心板,使用如下命令来编译对应的 uboot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
这三条命令中 ARCH=arm 设置目标为 arm 架构, CROSS_COMPILE 指定所使用的交叉编译器。第一条命令相当于“make distclean”,目的是清除工程,一般在第一次编译的时候最好清理一下工程。第二条指令相当于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置 uboot,配置文件为 mx6ull_14x14_ddr512_emmc_defconfig。最后一条指令相当于 “make -j12”也就是使用 12 核来编译 uboot。当这三条命令执行完以后 uboot 也就编译成功了,如图 30.2.3 所示
编译完成以后的 alentek_uboot 文件夹内容如图
可以看出,编译完成以后 uboot 源码多了一些文件,其中 u-boot.bin 就是编译出来的 uboot二进制文件。uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U上执行,图 30.2.4 中的 u-boot.imx 文件就是添加头部以后的 u-boot.bin, u-boot.imx 就是我们最终要烧写到开发板中的 uboot 镜像文件.
每次编译 uboot 都要输入一长串命令,为了简单起见,我们可以新建一个 shell 脚本文件,将这些命令写到 shell 脚本文件里面,然后每次只需要执行 shell 脚本即可完成编译工作。新建名为 mx6ull_alientek_emmc.sh 的 shell 脚本文件,然后在里面输入如下内容.
##我购买的是正点原子I.MX6ULL Alpha Mini开发板,是256MB的DDR EMMC开发板
##所以选择的 xxx_defconfig 是256MB emmc的 defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr256_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
第 1 行是 shell 脚本要求的,必须是“#!/bin/bash”或者“#!/bin/sh”。
第 2 行使用了 make 命令,用于清理工程,也就是每次在编译 uboot 之前都清理一下工程。这里的 make 命令带有三个参数,第一个是 ARCH,也就是指定架构,这里肯定是 arm;第二个参数 CROSS_COMPILE 用于指定编译器,只需要指明编译器前缀就行了,比如 arm-linuxgnueabihf-gcc 编译器的前缀就是“arm-linux-gnueabihf-”;最后一个参数 distclean 就是清除工程.
第 3 行也使用了 make 命令,用于配置 uboot。同样有三个参数,不同的是,最后一个参数
是 mx6ull_14x14_ddr512_emmc_defconfig。
前面说了 uboot 是 bootloader 的一种,可以用来引导Linux,但是 uboot 除了引导 Linux 以外还可以引导其它的系统,而且 uboot 还支持其它的架构和外设, 比如 USB、 网络、 SD 卡等。这些都是可以配置的,需要什么功能就使能什么功能。所以在编译 uboot 之前,一定要根据自己的需求配置 uboot。
mx6ull_14x14_ddr512_emmc_defconfig就是正点原子针对 I.MX6U-ALPHA 的 EMMC 核心板编写的配置文件,这个配置文件在 uboot源码的 configs 目录中。在 uboot 中,通过“make xxx_defconfig”来配置 uboot, xxx_defconfig就是不同板子的配置文件,这些配置文件都在 uboot/configs 目录中.
在u-boot源码目录下, u-boot/configs/ 目录下有非常多的 xxx_defconfig 的默认配置文件,一般一个xxx_defconfig 配置文件对应着一种硬件开发板(不同硬件开发板有不同的外设,所以u-boot的默认配置有所差异)。
第 4 行有 4 个参数,用于编译 uboot,通过第 3 行配置好 uboot 以后就可以直接“make”编译 uboot 了。其中 V=1 用于设置编译过程的信息输出级别; -j 用于设置主机使用多少线程编译uboot,最好设置成我们虚拟机所设置的核心数,如果在 VMware 里面给虚拟就分配了 4 个核,那么使用-j4 是最合适的,这样 4 个核都会一起编译。
使用 chmod 命令给予 mx6ull_alientek_emmc.sh 文件可执行权限,然后就可以使用这个 shell
脚本文件来重新编译 uboot,命令如下
chmod +x build_im6ull_emmc.sh
bash build_im6ull_emmc.sh
2.U-Boot 烧写与启动
uboot 编译好以后就可以烧写到板子上使用了, 这里我们跟前面裸机例程一样,将 uboot烧写到 SD 卡中,然后通过 SD 卡来启动来运行 uboot。使用 imxdownload 软件烧写,命令如下:
chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面
等待烧写完成,完成以后将 SD 卡插到 I.MX6U-ALPHA 开发板上, BOOT 设置从 SD 卡启动,使用 USB 线将 USB_TTL 和电脑连接,也就是将开发板的串口 1 连接到电脑上。打开MobaXterm,设置好串口参数并打开,最后复位开发板。在 MobaXterm 上出现“Hit any key to stop autoboot: ”倒计时的时候按下键盘上的回车键,默认是 3 秒倒计时,在 3 秒倒计时结束以后如果没有按下回车键的话 uboot 就会使用默认参数来启动 Linux 内核了。如果在 3 秒倒计时结束之前按下回车键,那么就会进入 uboot 的命令行模式,如图 30.3.1 所示
相关文章:
正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介
前言: 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用: …...
Android14 OTA差分包升级报kPayloadTimestampError (51)
由于VF 架构, 所以镜像的打包时间可能存在偏差, 如 boot.img 和 客制化的一些镜像打包 可能会在 vendor 侧进行打包。 而 与system 侧进行merge 时,时间戳比较乱,为了解决这个问题,让时间戳进行统一。 使用adb方式验证…...
PPT 技能:巧用 “节” 功能,让演示文稿更有序
在制作PPT时,你是否遇到过这样的情况:幻灯片越来越多,内容越来越杂,找某一页内容时翻得眼花缭乱?尤其是在处理大型PPT文件时,如果没有合理的结构,编辑和调整都会变得非常麻烦。这时候࿰…...
Mysql创建库、表练习
创建库 #创建 create database gc_novels default charsetutf8mb4;#default charsetutf8mb4 指定编码为utf-8#使用 use gc_novels#查看当前所在位置 select database(); 结果: 创建表 #创建 create table heros(-> id int,-> name varchar(50),-&…...
【原创】Ollama Test API For Linux/MacOS/Unix
安装Json解析工具 Linux/Unix sudo apt-get install jq -yMacOS brew install jq -y设置环境变量 export IP"192.168.250.229" export PORT"8080" export MODEL"deepseek-r1:7b"检查Ollama版本 curl http://"$IP":"$PORT&qu…...
盛铂科技 SLMF315频率综合器200MHz至15GHz 国产频综模块
在当今科技飞速发展的时代,射频技术在众多领域发挥着关键作用,从通信、雷达系统到科研实验,对频率综合器的性能要求日益严苛。以下是关于盛铂科技的 SLMF315 超低相位噪声频率综合器的介绍: SLMF315超低相位噪声0.2至15GHz频率综合…...
AI-前端开发webcrumbs.ai/frontend-ai,Fitten Code提高开发效率
1.webcrumbs.ai/frontend-ai Frontend AI by Webcrumbshttps://app.webcrumbs.ai/frontend-ai 可选择某一模版进行生成对应版本代码,减少开发量。 2.Fitten Code Vue AI 编程助手 Vue AI 编程助手 | 菜鸟教程https://www.runoob.com/vue2/fitten-code-vue2.htm…...
DeepSeek开源Day4:DualPipeEPLB技术详解
2 月 24 日,DeepSeek 启动 “开源周”,第四个开源的代码库为 DualPipe 与 EPLB(一下发布了两个)。DualPipe 与 EPLB 依然使用了大量与 Hopper 架构绑定的技术。 DualPipe 是由 DeepSeek-AI 团队开发的一种双向流水线并行通信算法&…...
代码随想录算法训练营第22天 | 组合 组合总和 电话号码的字母组合
77. 组合 77. 组合 - 力扣(LeetCode) class Solution {List<Integer> path new ArrayList<>();List<List<Integer>> result new ArrayList<>();public void backTracking(int n,int k,int startIndex){if(path.size() …...
Oracle19c进入EM Express(Oracle企业管理器)详细步骤
以下是使用Oracle 19c进入Oracle Enterprise Manager Database Express(EM Express)的详细步骤: ### **步骤 1:确认EM Express配置状态** 1. **登录数据库服务器** 使用Oracle用户或管理员权限账户登录操作系统。 2. **查看EM…...
Oracle 数据库基础入门(六):视图与索引的深入解析
在 Oracle 数据库的知识体系中,视图与索引是提升数据库操作效率和优化数据管理的重要工具。对于 Java 全栈开发者而言,熟练掌握视图与索引的运用,不仅能够增强数据库查询的性能,还能为构建高效稳定的后端应用提供有力支持。接下来…...
机器学习-随机森林解析
目录 一、.随机森林的思想 二、随机森林构建步骤 1.自助采样 2.特征随机选择 3构建决策树 4.集成预测 三. 随机森林的关键优势 **(1) 减少过拟合** **(2) 高效并行化** **(3) 特征重要性评估** **(4) 耐抗噪声** 四. 随机森林的优缺点 优点 缺点 五.…...
Qt添加MySql数据库驱动
文章目录 一. 安装MySql二.编译mysql动态链接库 Qt版本:5.14.2 MySql版本:8.0.41 一. 安装MySql 参考这里进行安装:https://blog.csdn.net/qq_30150579/article/details/146042922 将mysql安装目录里的bin,include和lib拷贝出来…...
MR的环形缓冲区(底层)
MapReduce的大致流程: 1、HDFS读取数据; 2、按照规则进行分片,形成若干个spilt; 3、进行Map 4、打上分区标签(patition) 5、数据入环形缓冲区(KVbuffer) 6、原地排序ÿ…...
RMAN备份bug-审计日志暴涨(select action from gv$session)
问题概述 /oracle 文件系统使用率过大,经过检查是审计日志过大,/oracle 目录 197G 审计日志占用70G,每6个小时产生大量审计日志,日志内容全是select action from gv$session ,猜测可能跟备份有关, $>df -h /oracle…...
30秒从零搭建机器人管理系统(Trae)
1. 安装 [Trae官网】(https://www.trae.com.cn/) 2. 提示词 创建一个BS架构的机器人远程操控系统,具备机器人状态及位置实时更新,可以实现机器人远程遥控,可以对机器人工作日志进行统计分析,以及其它管理系统的常用功能3. 模型…...
OpenFeign 学习笔记
OpenFeign 学习笔记 一、基础入门 1.1 简介 OpenFeign 是基于声明式的 REST 客户端,用于简化服务间远程调用。(编程式 REST 客户端(RestTemplate)) 通过接口注解方式定义 HTTP 请求,自动实现服务调用。 …...
单例模式(线程案例)
单例模式可以分为两种:1.饿汉模式 2.懒汉模式 一.饿汉模式 //饿汉模式👇 class MySingleTon{//因为这是一个静态成员变量,在类加载的时候,就创建了private static MySingleTon mySingleTon new MySingleTon();//创建一个静…...
HttpServletRequest 和 HttpServletResponse 不同JDK版本的引入
java中,可能会用到JWT令牌校验, 这时,大概率会用到 HttpServletRequest,和 HttpServletResponse。 若为 JDK8,SpringBoot 2.7.3 的版本则引入: import javax.servlet.http.HttpServletRequest; import ja…...
数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南
文章目录 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…...
【JavaEE】SpringMVC简单练习
目录 一、计算器1.1 接口定义1.2 前端代码1.3 后端代码1.4 运行结果 二、⽤⼾登录2.1 需求2.2 接口定义2.3 前端页面2.4 后端代码2.5 结果 三、留⾔板3.1 需求:3.2 接口3.3 前端代码3.4 后端代码3.5 运行结果 四、图书管理系统4.1 需求4.2 接口定义4.3 后端代码 一、计算器 1.…...
文件上传漏洞:upload-labs靶场11-20
目录 pass-11 pass-12 pass-13 pass-14 pass-15 pass-16 pass-17 pass-18 pass-19 pass-20 pass-11 分析源代码 ,发现上传文件的存放路径可控 if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],st…...
苹果Siri升级遇阻,国行iPhone或将引入阿里、百度AI自救
AI整合进展缓慢 苹果正加速将生成式AI技术整合至Siri,但内部消息称其底层技术研发落后于竞争对手,进展未达预期。 国行iPhone将引入双AI模型 苹果计划在2025年中期为国行iPhone引入AI功能,目前已敲定与 阿里巴巴、百度 合作,用户…...
立即释放 Mac 空间!Duplicate File Finder 8 重复文件高速清理工具
Duplicate File Finder 专业的 Mac 重复文件清理工具。查找并删除重复的文件、文件夹,甚至相似的照片。 不要让无用的文件占用磁盘上的宝贵空间。 整理你的 Mac。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…...
ES时序数据库的性能优化
本文主要是讲解了Elasticsearch数据库的优化,大家可以看一下。因为当时实操中涉及了6版本和7版本的一起优化,所以内容上大家自行区分一下。 一、基础设置 1. jvm.options参数详解 不同版本java配置会不一样 -Xms12g -Xmx12g 说明: 将 Xms…...
第3章:启动界面与主界面设计
第3章:启动界面与主界面设计 学习目标 掌握SwiftUI中的启动界面(Splash Screen)设计与实现学习主界面的布局与导航结构设计实现灵感笔记的列表与网格视图掌握SwiftUI中的动画与过渡效果学习如何使用环境对象共享数据理论知识讲解 启动界面设计原则 启动界面(Splash Scre…...
c++ 作用域解析操作符::
目录 什么是 ::? 基本语法 主要用途 1. 访问全局作用域 2. 访问类的静态成员 3. 访问命名空间中的内容 4. 区分嵌套作用域 5. 在类中定义成员函数 注意事项 什么是 ::? 在C中,:: 是作用域解析操作符(Scope Resolution O…...
JavaScript数据类型转换
在JavaScript编程中,由于其动态类型特性,经常需要在不同的数据类型之间进行转换。正确地执行类型转换不仅能够避免潜在的错误,还能提高代码的灵活性和可维护性。本文将探讨JavaScript中的常见数据类型转换方法,并提供一些实用的例…...
css错峰布局/瀑布流样式(类似于快手样式)
当样式一侧比较高的时候会自动换行,尽量保持高度大概一致, 例: 一侧元素为5,另一侧元素为6 当为5的一侧过于高的时候,可能会变为4/7分部dom节点 如果不需要这样的话删除样式 flex-flow:column wrap; 设置父级dom样…...
AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行
将 AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行,从而提高系统的精度、效率和可靠性。以下是 AI 技术在 RTK 系统中的应用实例: 一、AI 技术在 RTK 系统中的应用场景 1. 整周模糊度快速解算 问题:RTK 的核心是解算载波相位的整周模糊度,传统方法…...
【STM32F103ZET6——库函数】11.捕获红外信号
目录 红外原理 数据码 引导码 连发码 配置捕获引脚 使能引脚时钟 配置定时器 使能定时器时钟 配置输入捕获 中断优先级分组 配置定时器4中断 定时器中断使能 使能定时器 重写定时器中断服务函数 清空定时器中断标志位 例程 例程说明 main.h main.c HongWai…...
江科大51单片机笔记【9】DS1302实时时钟(上)
一、DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。RTC(Real Time Clock):实时时钟,是一种集成电路…...
在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案
问题背景 在实际业务中,我们常会遇到数据冗余问题。例如,一个公司表(sys_company)中存在多条相同公司名的记录,但只有一条有效(del_flag0),其余需要删除。删除前需将关联表…...
【计网】网络层
网络层 4.1 网络层提供的两种服务(一) 面向连接的虚电路服务(二) 无连接的数据报服务 4.2 IPv44.2.1 IPv4概述4.2.2 分类编址的IPv4地址4.2.3 划分子网的IPv4地址4.2.4 无分类编址的IPv4地址4.2.5 IPv4地址的应用规划(…...
稳定性保障-前端
前端稳定性保障是确保应用在各种环境下都能 高效、稳定、无错误 运行的策略和方法。可以从 监控、测试、容灾、优化 等方面进行保障。 📌 1. 监控 & 报警 实时监控 线上情况,及时发现问题。 ✅ 1.1 前端错误监控 • Sentry、Fundebug:…...
批量给 Word 中的所有图片添加水印
如果要给一个 Word 文档加水印,很多小伙伴都能轻松的完成,因为使用 Office 就能轻松的操作,并且也有很多第三方的工具可以帮我们实现。那假如需要给 Word 中的每一张图片都添加上水印,那有什么比较好的方法实现呢?今天…...
jQuery UI 简介
jQuery UI 简介 引言 随着互联网技术的飞速发展,前端开发已经成为网站和应用程序建设的重要组成部分。jQuery UI 是一个基于 jQuery 的用户界面库,它为开发者提供了丰富的交互组件和视觉效果,使得创建具有吸引力和互动性的网页变得更加简单。本文将为您详细介绍 jQuery UI…...
`label` 标签的 `for` 属性详解
一、基本概念 label 标签的 for 属性用于将标签与表单控件(如 input、select 等)绑定,其值需与目标元素的 id 完全匹配。这种关联允许用户点击标签时触发控件交互(如聚焦输入框或切换复选框),提升操作便捷…...
ArcGIS操作:10 投影坐标系转地理坐标系
应用情景:在计算shp面质心坐标的时,由于需要的坐标是经纬度,所以需要将投影坐标系转化为地理坐标系 1、打开工具箱 2、右侧:数据管理工具 → 投影和变换 → 要素 → 投影 3、选择投影的数据、输出路径、地理坐标系,点…...
【单片机通信技术】串口通信的几种方式与比较,详细解释SPI通信
一、介绍 串口通信是一种通过串行接口逐位传输数据的通信方式,广泛应用于嵌入式系统、工业控制、传感器网络等领域。 二、以下是几种常见的串口通信方式及其对比: 1.UART(Universal Asynchronous Receiver/Transmitter) 特点&am…...
DeepSeek开源Day5:3FSsmallpond技术详解
2 月 24 日,DeepSeek 启动 “开源周”,第四个开源的代码库为 3FS&smallpond(又是一下发布了两个)。 3FS(Fire-Flyer File System)是 DeepSeek 内部开发的一款高性能分布式文件系统,旨在为 A…...
常见的限流算法有哪些
计数器算法 原理:在固定的时间窗口内,对请求进行计数,当请求数量达到设定的阈值时,就开始限流,拒绝多余的请求。例如,设定 1 分钟的时间窗口内允许最多 100 个请求,那么在这 1 分钟内每来一个请…...
Android 低功率蓝牙之BluetoothGattCallback回调方法详解
BluetoothGattCallback 是 Android 中用于处理蓝牙低功耗(BLE)设备通信的核心回调类。它负责处理与 BLE 设备的连接、服务发现、数据读写等操作的结果。以下是对 BluetoothGattCallback 的详细解析: 1. onConnectionStateChange 触发时机&am…...
socket.io协议内容详解
Socket.IO 是一个基于事件的实时通信库,支持双向通信。它并非单一协议,而是结合了 Engine.IO 传输层和 Socket.IO 应用层协议的复合体系。以下是其协议核心内容的详细解析: 1. 协议分层 Engine.IO:负责底层传输(如 WebSocket、HTTP 长轮询),处理连接稳定性、心跳和断线重…...
在Oracle中编写雪花算法升学雪花ID
雪花算法的定义不详细说了哈,直接给出代码! --雪花配置 --DROP TABLE SNOWFLAKE_CONFIG; CREATE TABLE SNOWFLAKE_CONFIG ( DATA_CENTER_ID NUMBER(5) NOT NULL, WORKER_ID NUMBER(5) NOT NULL, LAST_TIMESTAMP NUMBER(20) NOT NULL, SEQUENCE NUMBE…...
我们来学nginx -- 优化下游响应速度
优化下游响应速度 题记启用 Gzip 压缩优化缓冲区设置设置超时时间 题记 专家给出的配置文件真是…,信息量有点大啊! nginx:我只想作为一个简单的代理专家爸爸:都是为了你好! 这样,先从有关响应速度的角度&…...
SELECT ... FOR UPDATE 加锁后,其他线程能读取数据吗
在执行 SELECT * FROM table WHERE ... FOR UPDATE 语句时,MySQL 会对查询结果集中的行加 排他锁(X锁)。这种锁的行为会影响其他事务对这些行的读写操作。以下是具体的影响: 1. 加锁后的效果 当前事务: 对查询结果集中…...
【论文阅读】多模态——LSeg
文献基本信息 标题:Language-Driven Semantic Segmentation作者:Boyi Li、Kilian Q. Weinberger、Serge Belongie、Vladlen Koltun、Ren Ranftl单位:Cornell University、University of Copenhagen、Apple、Intel Labs会议/期刊:…...
GBT32960 协议编解码器的设计与实现
GBT32960 协议编解码器的设计与实现 引言 在车联网领域,GBT32960 是一个重要的国家标准协议,用于新能源汽车与监控平台之间的数据交互。本文将详细介绍如何使用 Rust 实现一个高效可靠的 GBT32960 协议编解码器。 整体架构 编解码器的核心由三个主要组…...
Tomcat之 配置https协议即SSL证书
太难了,Tomcat7服务器配置Https协议的SSL证书,半天没搞定啊 切换,Tomcat8 分分钟 参考 https://blog.csdn.net/u014553029/article/details/86672342 https://blog.csdn.net/qq_37138756/article/details/103516627 https://blog.csdn.net/r…...