嵌入式驱动开发详解21(网络驱动开发)
文章目录
- 前言
- 以太网框架
- ENET 接口简介
- MAC接口
- MII \ RMII 接口
- MDIO 接口
- RJ45 接口
- PHY芯片
- 以太网驱动
- 驱动挂载
- wifi模块挂载
- 后续
前言
linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了,网络设备驱动本文会做简要讲解,主要是讲解网络设备里面的以太网,PHY芯片,usb和sdio的wifi驱动挂载注意事项等,对网络内部实现仅仅只做简要介绍。
以太网框架
嵌入式网络硬件分为两部分:MAC 和 PHY,MAC 类似 I2C 控制器、SPI 控制器一样的外设,其外部必须搭配一个 PHY 芯片。
- 内部无MAC外设
- 找个外置的 MAC 芯片,一般这种外置的网络芯片都是 MAC+PHY 一体的。比如三星 linux 开发板里面用的最多的 DM9000,DM9000 对 SOC 提供了一个 SRAM 接口,但是此芯片需要进行手动开发网络的协议栈,类似STM32连接网络时所用的lwip。
- 外置的网络芯片更强大,内部甚至集成了硬件 TCP/IP 协议栈,对外提供一个 SPI 接 口,比如 W5500。一般用于单片机领域,由于内置了硬件 TCP/IP 协议栈,因此不需要移植软件协议栈,直接通过 SPI 来操作 W5500。
- 让不支持网络的 SOC 能够实现网络功能;网络效率不高,一般芯片内置的 MAC 会有网络加速引擎,比如网络专用 DMA;成本较高,可选择性少。
- 内部有MAC外设
- 上图是内部MAC,外置PHY芯片和RJ45坐子的连接示意图,关于内部有MAC的详解在接下来的内容中进行介绍。
ENET 接口简介
MAC接口
I.MX6ULL 内核集成了两个 10/100Mbit/S 的网络 MAC,符合 IEEE802.3-2002 标准,MAC 层支持双工、半双工局域网。MAC 可编程、可以作为 NIC 卡或其他一些交换器件。根据 IETF RFC 2819 协议,MAC 实现了 RMON(Remote Network Monitoring)计数功能。MAC 内核拥有硬件加速处理单元来提高网络性能,硬件加速单元用于处理 TCP/IP、UDP、ICMP 等协议。通过 硬件来处理帧头等信息,效果要比用一大堆软件处理要好很多。ENET 外设有一个专用的 DMA, 此 DMA 用于在 ENET 外设和 SOC 之间传输数据,并且支持可编程的增强型的缓冲描述符,用以支持 IEEE 1588
MII \ RMII 接口
内部 MAC 通过 MII/RMII 接口来与外部的 PHY 芯片连接,完成网络数据传输
-
MII接口
-
MII 全称是 Media Independent Interface,直译过来就是介质独立接口,它是 IEEE-802.3 定 义的以太网标准接口
-
前面的引脚含义看名称可以看出来不做解释,RX_DV:接收数据有效,作用类似 TX_EN。 CRS:载波侦听信号。 COL:冲突检测信号。
-
发送时钟和接收时钟如果网速为100M的话时钟频率为25MHz。
-
MII 接口的缺点就是所需信号线太多,因此引出了RMII接口
-
-
RMII接口
- RMII 全称是 Reduced Media Independent Interface,翻译过来就是精简的介质独立接口,也 就是 MII 接口的精简版本。
- REF_CLK:参考时钟,由外部时钟源提供, 频率为 50MHz。这里与 MII 不同,MII 的接收和发送时钟是独立分开的,而且都是由 PHY 芯片提供的。
- RMII 接口只需要 7 根数据线,相比 MII 直接减少了 9 根,极大的 方便了板子布线
- RMII 全称是 Reduced Media Independent Interface,翻译过来就是精简的介质独立接口,也 就是 MII 接口的精简版本。
-
此外还有GMII、RGMII、SMII、SMII 等接口,基本都是大同小异。
MDIO 接口
MDIO 全称是 Management Data Input/Output,直译过来就是管理数据输入输出接口,是一 个简单的两线串行接口,一根 MDIO 数据线,一根 MDC 时钟线。驱动程序可以通过 MDIO 和 MDC 这两根线访问 PHY 芯片的任意一个寄存器。
- MDIO 接口支持最多可达 32 个 PHY。同一时刻内只能对一个 PHY 进行操作,使用器件地址进行区分
- 同一 MDIO 接口下的所有 PHY 芯片,其器件地址不能冲突,必须保证唯一
RJ45 接口
- 网络设备是通过网线连接起来的,插入网线的叫做 RJ45 座,RJ45 座要与 PHY 芯片连接在一起
- 中间需要一个网络变压器,网络变压器用于隔离以及滤波等,网络变压器也是一个芯片。
- 很多 RJ45 座子内部已经集成了网络变压器,内置网络变压器的 RJ45 座和不内置的引脚一样,但是一般不内置的 RJ45 座会短一点。
- RJ45 座子上一般有两个灯,一个黄色(橙色),一个绿色,绿色亮的话表示网络连接正常,这两个灯由 PHY 芯片控制,PHY 芯片会有两个引 脚来连接 RJ45 座上的这两个灯。
PHY芯片
PHY 芯片寄存器地址空间为 5 位,地 址 0~31 共 32 个寄存器,IEEE 定义了 0~15 这 16 个寄存器的功能,16~31 这 16 个寄存器由厂 商自行实现。
- 不管你用的哪个厂家的 PHY 芯片,其中 0~15 这 16 个寄存器是一模一 样的,仅靠这 16 个寄存器是完全可以驱动起 PHY 芯片的,至少能保证基本的网络数据通信。
- 随着现在的 PHY 芯片性能越来越强大,32 个寄存器可能满足不了厂商的需求, 因此很多厂商采用分页技术来扩展寄存器地址空间,以求定义更多的寄存器。(需要 PHY 厂商提供相应的驱动源码)
- IEEE802.3 协议一共 8 个 SECTION,在 “802.3-2018_SECTION2” 中找到 “22.2.4 Management functions” 章节,此章节对 PHY 的前 16 个寄存器功能进行了规定。
MAC 层通过 MDIO/MDC 总线对 PHY 进行读写操作,MDIO 最多可以控制 32 个 PHY 芯 片,通过不同的 PHY 芯片地址来对不同的 PHY 操作。SR8201F 通过设置 LED0/PHYAD[0]和 LED1/PHYAD[1]这两个引脚来设置其 PHY 地址,因此SR8201F可以同时存在4个芯片连接到MAC上。
以太网驱动
-
申请 net_device:编写网络驱动的时候首先要使用 alloc_netdev 函数来申请 net_device,alloc_netdev 的本质是 alloc_netdev_mqs 函数,Linux 内核内核支持的网络接 口有很多,比如光纤分布式数据接口(FDDI)、以太网设备(Ethernet)、红外数据接口(InDA)、高 性能并行接口(HPPI)、CAN 网络等。内核针对不同的网络设备在 alloc_netdev 的基础上提供了 一层封装,比如我们本章讲解的以太网,针对以太网封装的 net_device 申请函数是 alloc_etherdev,alloc_etherdev 最 终 依 靠 的 是 alloc_etherdev_mqs 函数。
struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs,unsigned int rxqs) {return alloc_netdev_mqs(sizeof_priv, "eth%d", NET_NAME_UNKNOWN,ether_setup, txqs, rxqs); }
- alloc_netdev_mqs 来申请 net_device,注意这里设置网卡的名字为“eth%d”,这是格式化字符串,大家进入开发板的 linux 系统以后看到的“eth0”、“ eth1”这样的网卡名字就 是从这里来的。
- 设置了以太网的 setup 函数为 ether_setup,不同的网络设备其 setup 函数不同,比如 CAN 网络里面 setup 函数就是 can_setup。
- ether_setup 函数会对 net_device 做初步的初始化。
-
注销网络驱动的时候 需要释 放掉前面 已经申 请到的 net_device ,释放函 数为 free_netdev。
-
注册 net_device:net_device 申请并初始化完成以后就需要向内核注册 net_device,要用到函数 register_netdev。
-
注销 net_device 使用函数 unregister_netdev。
-
net_device_ops 结构体:net_device 有个非常重要的成员变量:netdev_ops,为 net_device_ops 结构体指针类型,这 就是网络设备的操作集。net_device_ops 结构体里面都是一些以“ndo_”开头的函数,这些函数就需要网络驱动编写人员 去实现,不需要全部都实现,根据实际驱动情况实现其中一部分即可。
- ndo_open 函数,打开网络设备的时候此函数会执行,网络驱动程序需要实现此函 数,非常重要!(包含使能网络外设时钟、申请网络所使用的环形缓冲区、初始化 MAC 外设等内容)
- ndo_stop 函数,关闭网络设备的时候此函数会执行,网络驱动程序也需要实现此函数。(包括停止 PHY、停止 NAPI 功能、停止发送功能等)
- ndo_start_xmit 函数,当需要发送数据的时候此函数就会执行,此函数有一个参数 为 sk_buff 结构体指针,sk_buff 结构体在 Linux 的网络驱动中非常重要,sk_buff 保存了上层传递给网络驱动层的数据。
- ……还有很多很重要的函数
-
**sk_buff 结构体 **:网络是分层的,对于应用层而言不用关心具体的底层是如何工作的,只需要按照协议将要 发送或接收的数据打包好即可。打包好以后都通过 dev_queue_xmit 函数将数据发送出去,接收数据的话使用 netif_rx 函数即可
- dev_queue_xmit 函数
- netif_rx 函数:上层接收数据的话使用 netif_rx 函数,但是最原始的网络数据一般是通过轮询、中断或 NAPI 的方式来接收,关于接收函数主要是以下两个部分,第一个是数据处理部分主要是通过sk_buff实现的,第二个部分是数据接收主要是通过 NAPI 实现的。
- sk_buff 这个结构体用于管理接收或发送数据包,针对 sk_buff 内核提供了一系列的操作与管理函数。
- NAPI 的核心思想就是不全部采用中断来读取网络数据,而是采用中断来唤醒数据接收服务程 序,在接收服务程序中采用 POLL 的方法来轮询处理数据。这种方法的好处就是可以提高短数 据包的接收效率,减少中断处理的时间。Linux 内核使用结构体 napi_struct 表示 NAPI,针对 NAPI 内核提供了一系列的操作与管理函数。
- dev_queue_xmit 函数
驱动挂载
对于驱动的配置与源码分析,篇幅较多,这里大概说一下主要内容包含哪些,具体的还请参考正点原子的教材。
- 设备树的配置,包含fec部分和子节点mdio部分(此子节点用于指定网络外设所使用的 MDIO 总线, 主要作为 PHY 节点的容器)
- fec匹配表包含“fsl,imx6ul-fec”,设备树和驱动匹配上,当匹配成功以后 fec_probe 函数就会执行,该函数会实现以太网驱动所提到的所有初始化内容,。
- MDIO 总线注册:Linux 内核专门为 MDIO 准备一个总线,叫做 MDIO 总线,采用 mii_bus 结构体表示,fec_probe 函数不仅会初始化以太网相关内容也会调用 fec_enet_mii_init 函数完成 MII 接口的初始化,其中就包括初始化 mii_bus 下的 read 和 write 这两个函数。
- PHY驱动:of_mdiobus_register 函数有两个主要的功能,一个是通过 mdiobus_register 函数向 Linux 内核注册 mdio 总线,另一个就是通过 of_mdiobus_register_phy 函数向内核注册 PHY。
wifi模块挂载
wifi模块的加载就是编译内核生成相关的驱动文件,然后配置工具进行wifi连接和测试即可
modprobe 8188eu.ko
ifconfig wlan0 up
iwlist wlan0 sacn
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
udhcpc -i wlan0
后续
网络驱动是一个比较大的方向,仅仅只做了大体的框架分析,如果后期有更深入的需求再详细分析内部实现,这里只是给大家做一个了解。
相关文章:
嵌入式驱动开发详解21(网络驱动开发)
文章目录 前言以太网框架ENET 接口简介MAC接口MII \ RMII 接口MDIO 接口RJ45 接口 PHY芯片以太网驱动驱动挂载wifi模块挂载后续 前言 linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了,网络设备驱动本文会做简要…...
2024年12月25日Github流行趋势
项目名称:system-design-primer 项目维护者:donnemartin, cclauss, satob, fluency03, linhe0x0项目介绍:学习如何设计大规模系统。为系统设计面试做准备。包括 Anki 卡片。项目star数:282,387项目fork数:47,226 项目…...
6、mysql的MHA故障切换
MHA的含义 MHA:master high availability,建立在主从复制基础上的故障切换的软件系统。 主从复制的单点问题: 当主从复制当中,主服务器发生故障,会自动切换到一台从服务器,然后把从服务器升格成主&…...
#error: WinSock.h has already been included解决方案
原因: 在工程中使用了 Boot 库之后,使用了socket、tcp 相关的头文件,在其他地方还是包括了头文件<windows.h>,该头文件内包含了<winsock.h>。导致遇到报错问题:WinSock.h has already been included 解决…...
npm淘宝镜像
通过命令行配置npm的淘宝镜像源和官方镜像源,以及如何安装和使用cnpm来解决安装包卡顿或无法安装的问题。通过设置registry和disturl,配合清理缓存,可以优化npm的下载速度。 1、官方默认镜像 npm config set registry https://registry.n…...
光谱相机的工作原理
光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异,以下是其具体工作过程: 一、光的收集 目标物体在光源照射下,其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统(如透镜、反射镜…...
安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析
在信息技术迅猛发展的今天,企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具,其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术,正逐渐成为提升运维管理效率和安全性的重要…...
外包干了27天,技术退步明显。。。。。
时光荏苒,转眼我已是一个拥有近四年功能测试经验的大专生。20年,我满怀激情地通过校招进入湖南某知名软件公司,期待在这里开启我的职业生涯。然而,长时间的舒适环境让我渐渐失去了前进的动力,技术停滞不前,…...
leetcode 面试经典 150 题:合并两个有序数组
链接合并两个有序数组题序号88题型数组解题方法1. 双指针法 ;2. 合并排序法难度简单熟练度✅✅✅✅✅ 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 …...
波动理论、传输线和S参数网络
波动理论、传输线和S参数网络 传输线 求解传输线方程 对于传输线模型,我们通常用 R L G C RLGC RLGC 来表示: 其中 R R R 可以表示导体损耗,由于电子流经非理想导体而产生的能量损耗。 G G G 表示介质损耗,由于非理想电介质…...
YOLO11改进-注意力-引入自调制特征聚合模块SMFA
本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…...
uniapp登录
第一步整登录 先整个appid APPID和APPSecret https://developers.weixin.qq.com/community/develop/article/doc/000ca4601b8f70e379febac985b413 一个账号只能整一个小程序 正确流程 调用uni.login https://juejin.cn/post/7126553599445827621 https://www.jb51.net/a…...
mysql,数据库主从同步搭建
1.mysql主从同步1.主从同步原理(1)复现binlog日志中的sql语句(2)主服务器启动binlog日志(3)从服务器启动binlog日志,io线程,sql线程2.主从同步结构一主一从一主多从级联复制互为主从(keepalived高可用)3.mysql复制模式异步复制:主服务器处理完sql直接返回给客户端结果半同步复制…...
云途领航:现代应用架构助力企业转型新篇
在数字化转型的浪潮中,现代应用架构为企业带来了灵活性、效率和创新能力。各类服务模型相继出现,为企业提供了强有力的支持,助力其顺利转型。随着技术的快速发展,企业面临的挑战和机遇也在不断演变,这促使它们必须重新…...
redis——岁月云实战
单线程序,基于IO多路复用,基于内存和c语言编写,性能高。redis官方命令 1 数据结构 1.1 key的层级 redis的key可以通过冒号(:)来划分层级,如下图mms:company:order,但系统中可以看到有不少没有…...
Flink调优----资源配置调优与状态及Checkpoint调优
目录 第 1 章 资源配置调优 1.1 内存设置 1.1.1 TaskManager 内存模型 1、内存模型详解 2、案例分析 1.1.2 生产资源配置示例 1.2 合理利用 cpu 资源 1.2.1 使用 DefaultResourceCalculator 策略 1.2.2 使用 DominantResourceCalculator 策略 1.2.3 使用 DominantRes…...
Java web的发展历史
目录 前言: 一.Model I和Model II 1.Model I开发模式 编辑 2.Model II开发模式 二. MVC模式 前言: 该篇文章主要介绍了Java web的发展历史,以及MVC相关内容 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是ÿ…...
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
🎯导读:本文档详细描述了一个基于Spring Cloud Gateway的微服务网关及Admin服务的实现。网关通过定义路由规则,利用负载均衡将请求转发至不同的后端服务,并集成了Token验证过滤器以确保API的安全访问,同时支持白名单路…...
MongoDB 更新文档
关于MongoDB更新文档的操作,可以通过多种方法实现。以下是一些常用的方法: updateOne() 方法:用于更新匹配过滤器的单个文档。其语法为 db.collection.updateOne(filter, update, options)。其中,filter 用于查找文档的查询条件&a…...
静态路由与动态路由
静态路由和动态路由是网络中两种不同的路由配置方式,它们在网络中的运作方式、配置方法以及适用场景等方面存在显著差异。以下是对两者的详细比较: 一、定义与配置方式 静态路由 定义:静态路由是由网络管理员手动配置的固定路径,…...
leetcode hot二叉树的层序遍历
102. 二叉树的层序遍历 已解答 中等 相关标签 相关企业 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点) # Definition for a binary tree node. # class TreeNode(object): # …...
Windows下ESP32-IDF开发环境搭建
Windows下ESP32-IDF开发环境搭建 文章目录 Windows下ESP32-IDF开发环境搭建一、软件安装二、搭建IDF开发环境2.1 安装VS Code插件:2.2 配置ESP-IDF插件:2.3 下载例程源码: 三、编译和烧录代码四、Windows下使用命令行编译和烧录程序4.1 配置环…...
基于高云GW5AT-15 FPGA的SLVS-EC桥MIPI设计方案分享
作者:Hello,Panda 一、设计需求 设计一个4Lanes SLVS-EC桥接到2组4lanes MIPI DPHY接口的电路模块: (1)CMOS芯片:IMX537-AAMJ-C,输出4lanes SLVS-EC 4.752Gbps Lane速率; (2&…...
【day18】多线程高级应用
day17回顾 在深入探讨模块18之前,让我们回顾一下【day17】中的关键内容: 创建多线程: 继承Thread类: 定义一个类,继承Thread。重写run方法,设置线程任务。创建自定义线程对象。调用start方法,开…...
Python接口自动化测试的实现
1)环境准备: 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的进行选择&#x…...
nvidia docker, nvidia docker2, nvidia container toolkits区别
背景 在docker容器中用GPU时,查阅了网上许多教程,教程之间概念模糊不清,相互矛盾,过时的教程和新的教程混杂在一起。主要原因是Nvidia为docker容器的支持发生了好几代变更,api发生了不少变化。下面来总结一下各代支持…...
字节跳动Java开发面试题及参考答案(综合篇)
HTTP 与 HTTPS 的区别? HTTP(超文本传输协议)和 HTTPS(超文本传输安全协议)主要有以下区别。 从安全性角度看,HTTP 是明文传输协议,数据在网络中传输时是以原始文本的形式发送的。这就好比在信件传递过程中没有进行密封,任何中间节点(如路由器、代理服务器等)都可以查…...
搭建Elastic search群集
一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件: /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…...
深入解析 Spring WebFlux:原理与应用
优质博文:IT-BLOG-CN WebFlux 是 Spring Framework 5 引入的一种响应式编程框架,和Spring MVC同级,旨在处理高并发和低延迟的非阻塞应用。这是一个支持反应式编程模型的新Web框架体系。 顺便一提,Spring Cloud Gateway在实现上是…...
Docker 部署 SpringBoot VUE项目
是一套基于若依的wms仓库管理系统 一、后端部署 后端地址:https://gitee.com/zccbbg/wms-ruoyi/tree/v1/ 1、用IDEA拉代码,并修改API统一后缀 2、复制一个配置文件 application-dev.yaml,并修改里面的mysql与redis配置 3、将打包的jar上传…...
【Java基础面试题031】Java运行时异常和编译时异常之间的区别是什么?
回答重点 主要有三大区别,分别是发生时机、捕获和处理方式和设计意图 1)发生时机: 编译时异常(Checked Exception):发生在编译阶段,编译器会检查此类异常,程序必须堆这些异常进行…...
常见网络功能概述-主要拆解功能
大家觉得有意义和参考价值记得关注和点赞!!! 一、防火墙介绍 防火墙(Firewall)是一种网络安全系统,用于监控、过滤和控制进出网络的数据流量。它是一种屏障,通过策略规则来允许、限制或拒绝数…...
Chapter 3-1. Detecting Congestion in Fibre Channel Fabrics
Chapter 3. Detecting Congestion in Fibre Channel Fabrics This chapter covers the following topics: 本章包括以下主题: Congestion detection workflow. Congestion detection metrics. Congestion detection metrics and commands on Cisco MDS switches. Automatic A…...
Day13 用Excel表体验梯度下降法
Day13 用Excel表体验梯度下降法 用所学公式创建Excel表 用Excel表体验梯度下降法 详见本Day文章顶部附带资源里的Excel表《梯度下降法》,可以对照表里的单元格公式进行理解,还可以多尝试几次不同的学习率 η \eta η来感受,只需要更改学习率…...
重温设计模式--5、职责链模式
文章目录 职责链模式的详细介绍C 代码示例C示例代码2 职责链模式的详细介绍 定义与概念 职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它旨在将请求的发送者和多个接收者解耦,让多个对象都有机会处理请求&am…...
C语言-08复合类型-结构体
一、结构体 1.结构体struct struct关键字,允许自定义复合数据类型,将不同类型的值组合在一起,这种类型称为结构体类型。 2.使用步骤 第一步:创建或声明结构体 第二步:定义结构体变量 第三步:调用并操作结…...
vue 基础学习
一、ref 和reactive 区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app"><h1>{{Web.title}}</h1><h1&…...
Elasticsearch检索方案之一:使用from+size实现分页
前面两篇文章介绍了elasticsearch以及Kibana的安装,检索引擎以及可视化工具都已经安装完成,接下来介绍下如何使用golang的sdk实现简单的分页查询。 1、下载Elastic官方golang sdk 在讲解elasticsearch检索之前,需要先把golang的环境安装好&…...
Highcharts 饼图:数据可视化利器
Highcharts 饼图:数据可视化利器 引言 在数据可视化的领域中,饼图作为一种经典且直观的图表类型,被广泛应用于各种行业和场景中。Highcharts,作为一个功能强大且易于使用的JavaScript图表库,为我们提供了创建交互式和…...
Docker部署Sentinel
一、简介 是什么:面向分布式、多语言异构化服务架构的流量治理组件 能干嘛:从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址:https://sentinelguard.io/zh-c…...
后端接口设计
一、基本规范 1.URL设计 应遵循RESTful风格,使用动词名词的方式描述接口的功能。应简洁明了,易于理解和记忆。 2.请求协议及方法 使用HTTPS协议进行数据传输,保证数据在传输过程中的安全性。如无特殊情况,统一使用post方法。 …...
GitLab部署到阿里云服务器上
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。 一、安装 1.创建一…...
GitLab的卸载与重装
目录 一、GitLab的卸载 二、 GitLab的安装与配置 1. 创建安装目录 2. 安装 3. 使用 3.1 初始化 3.2 创建空白项目 编辑 3.3 配置SSH 3.3.1 配置公钥 编辑 3.3.2 配置私钥 3.4 配置本地git库 一、GitLab的卸载 1. 停止gitlab sudo gitlab-ctl stop 2. 卸载…...
动态住宅IP适合哪些数据采集项目?
在数据采集的广阔天地中,动态住宅IP代理能够灵活地变换身份,帮助我们在网络世界中自由地穿梭。这种代理IP因其住宅性质和动态变化的特点,成为了许多数据采集项目的理想选择。今天,我们就来聊聊动态住宅IP代理适合哪些数据采集项目…...
Git_撤销本地commit_查找仓库中大文件
Gitee普通账号的仓库总空间限制为5G; 右上角头像,下拉—》设置/账号设置—》数据管理下的仓库空间信息即可查看空间限额和各仓库空间大小;Gitee普通账号每次推送大小不能超过100MB,否则会推送失败;当提交大小超过100MB…...
golang windows打包为linux可执行文件
使用go的交叉编译功能 set GOOSlinux set GOARCHamd64然后再执行go build 可能会报异常, 所以贴出我的go env配置仅供参考 go env环境配置 D:\GoWork\src\go-tzv>go env set GO111MODULEauto set GOARCHamd64 set GOBIN …...
源码分析之Openlayers中GeometryCollection类
概述 本文主要介绍GeometryCollection类,GeometryCollection类继承于Geometry类,关于Geometry类,参考这篇文章源码分析之Openlayers中Geometry基类介绍 GeometryCollection类就是一组几何对象的集合. 源码分析 GeometryCollection类源码实现 GeometryCollection类源码实现…...
*【每日一题 基础题】 [蓝桥杯 2024 省 B] 好数
[蓝桥杯 2024 省 B] 好数 好数 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一…...
Redis大Key问题全解析
1. 引言 1.1 什么是Redis大Key? Redis大Key是指单个Key对应的数据量过大,占用过多的内存或导致操作耗时较长的现象。大Key可以是以下几种常见数据类型中的任意一种: String类型:单个字符串的长度过大。List类型:包含…...
一起学Git【第六节:查看版本差异】
git diff是 Git 版本控制系统中用于展示差异的强大工具。他可以用于查看文件在工作区、暂存区和版本库之间的差异、任意两个指定版本之间的差异和两个分支之间的差异等,接下来进行详细的介绍。 1.显示工作区与暂存区之间的差异 # 显示工作区和暂存区之间的差异,后面不加参数…...