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

RK3588 点亮imx586摄像头

一.硬件原理图

mipi摄像头硬件确认点:

1.供电:5V,2.8V,1.2V,1.8V,reset脚(硬拉3.3,上电的时候从低到高),pwron脚外接

   3.3V。

2,时钟:MCLKOUT是24兆时钟。

3.4组差分mipi线。mipi的data线的波形为方波。

二.驱动移植

RK提供的默认sdk里面已经将支持的所有摄像头驱动都添加到了内核,所以不需要移植该驱动了。

需确认下移植驱动对应的一些信息

源程序
kernel/drivers/media/i2c/imx586.c

kernel/drivers/media/i2c/Makefile

kernel/drivers/media/i2c/Kconfig

kernel/arch/arm64/configs/rockchip_linxu_defconfig

Makefile脚本

obj-$(CONFIG_VIDEO_IMX415) += imx586.oconfig VIDEO_IMX586tristate "Sony IMX586 sensor support"depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_APIdepends on MEDIA_CAMERA_SUPPORThelpThis is a Video4Linux2 sensor driver for the SonyIMX415 camera.To compile this driver as a module, choose M here: themodule will be called imx586.
  • 驱动对应的宏开关
CONFIG_VIDEO_IMX586=y

添加设备树文件:

&i2c5 {status = "okay";pinctrl-names = "default";pinctrl-0 = <&i2c5m0_xfer>;imx586: imx586@1a {compatible = "sony,imx586";reg = <0x10>;  //插摄像头看iic5上出现的新设备后填入clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;clock-names = "xvclk";pinctrl-names = "default";pinctrl-0 = <&mipim0_camera3_clk>;//需要和硬件确认是复用的哪个时钟,确认可以量到波形power-domains = <&power RK3588_PD_VI>;//reset-gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_HIGH>;//现在硬件上是直接拉高,所以不用配//avdd-supply = <&vcc_mipidphy0>;//供电也是直接供电,所以不用配rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "default";rockchip,camera-module-lens-name = "default";port {imx586_out0: endpoint {remote-endpoint = <&mipidphy0_in_ucam0>;data-lanes = <1 2 3 4>;};};};
};&csi2_dphy0 {status = "okay";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipidphy0_in_ucam0: endpoint@1 {reg = <1>;remote-endpoint = <&imx586_out0>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;csidphy0_out: endpoint@0 {reg = <0>;remote-endpoint = <&mipi2_csi2_input>;};};};
};&csi2_dphy0_hw {status = "okay";
};&mipi2_csi2 {status = "okay";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi2_csi2_input: endpoint@1 {reg = <1>;remote-endpoint = <&csidphy0_out>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;mipi2_csi2_output: endpoint@0 {reg = <0>;remote-endpoint = <&cif_mipi2_in0>;};};};
};&rkcif {status = "okay";
};&rkcif_mipi_lvds2 {status = "okay";port {cif_mipi2_in0: endpoint {remote-endpoint = <&mipi2_csi2_output>;};};
};&rkcif_mipi_lvds2_sditf {status = "okay";port {mipi_lvds2_sditf: endpoint {remote-endpoint = <&isp0_vir0>;};};
};&rkcif_mmu {status = "okay";
};&rkisp_unite {status = "okay";
};&rkisp_unite_mmu {status = "okay";
};&rkisp0_vir0 {status = "okay";/* dual isp process image case* other rkisp hw and virtual nodes should disabled*/rockchip,hw = <&rkisp_unite>;port {#address-cells = <1>;#size-cells = <0>;isp0_vir0: endpoint@0 {reg = <0>;remote-endpoint = <&mipi_lvds2_sditf>;};};
};

三.驱动调试

把驱动代码和设备树文件添加进去后就可以开始调试了。

使用i2ctool工具查看i2c5,发现有2个新的设别:0x10,0x50,猜测其中一个是senser,另一个可能是sensor的马达地址,尝试修改sensor的地址为0x10或者0x50看imx586能不能进probe函数。

当修改imx586的地址为ox10的时候,看imx586已经进了probe函数了。

从log可以看出imx586已经进了probe函数,但是并没有识别到sensor。

这时候,需要确认mipi摄像头上的供电是否正常,时钟是否正常。

经确认是sensor的一路供电没有,供电正常后可以设别到sensor。

到了这一步,可以确认,iic设备已经可以设别到sensor了,并挂载在iic5上面。

四.查看拓扑

rk3588_t:/ # media-ctl -d /dev/media0 -p
Opening media device /dev/media0
Enumerating entities
Found 14 entities
Enumerating pads and links
Media controller API version 0.0.177Media device information
------------------------
driver          rkcif
model           rkcif-mipi-lvds2
serial
bus info
hw revision     0x0
driver version  0.0.177Device topology
- entity 1: stream_cif_mipi_id0 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video0pad0: Sink<- "rockchip-mipi-csi2":1 [ENABLED]<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 5: stream_cif_mipi_id1 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video1pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 [ENABLED]<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 9: stream_cif_mipi_id2 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video2pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 [ENABLED]<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 13: stream_cif_mipi_id3 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video3pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 [ENABLED]<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 17: rkcif_scale_ch0 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video4pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 [ENABLED]<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 21: rkcif_scale_ch1 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video5pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 [ENABLED]<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 25: rkcif_scale_ch2 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video6pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 [ENABLED]<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 29: rkcif_scale_ch3 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video7pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 [ENABLED]<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 33: rkcif_tools_id0 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video8pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 [ENABLED]<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 []- entity 37: rkcif_tools_id1 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video9pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 [ENABLED]<- "rockchip-mipi-csi2":11 []- entity 41: rkcif_tools_id2 (1 pad, 11 links)type Node subtype V4Ldevice node name /dev/video10pad0: Sink<- "rockchip-mipi-csi2":1 []<- "rockchip-mipi-csi2":2 []<- "rockchip-mipi-csi2":3 []<- "rockchip-mipi-csi2":4 []<- "rockchip-mipi-csi2":5 []<- "rockchip-mipi-csi2":6 []<- "rockchip-mipi-csi2":7 []<- "rockchip-mipi-csi2":8 []<- "rockchip-mipi-csi2":9 []<- "rockchip-mipi-csi2":10 []<- "rockchip-mipi-csi2":11 [ENABLED]- entity 45: rockchip-mipi-csi2 (12 pads, 122 links)type V4L2 subdev subtype Unknowndevice node name /dev/v4l-subdev0pad0: Sink[fmt:SRGGB10/4000x3000crop.bounds:(0,0)/4000x3000crop:(0,0)/4000x3000]<- "rockchip-csi2-dphy0":1 [ENABLED]pad1: Source-> "stream_cif_mipi_id0":0 [ENABLED]-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad2: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 [ENABLED]-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad3: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 [ENABLED]-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad4: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 [ENABLED]-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad5: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 [ENABLED]-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad6: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 [ENABLED]-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad7: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 [ENABLED]-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad8: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 [ENABLED]-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad9: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 [ENABLED]-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 []pad10: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 [ENABLED]-> "rkcif_tools_id2":0 []pad11: Source-> "stream_cif_mipi_id0":0 []-> "stream_cif_mipi_id1":0 []-> "stream_cif_mipi_id2":0 []-> "stream_cif_mipi_id3":0 []-> "rkcif_scale_ch0":0 []-> "rkcif_scale_ch1":0 []-> "rkcif_scale_ch2":0 []-> "rkcif_scale_ch3":0 []-> "rkcif_tools_id0":0 []-> "rkcif_tools_id1":0 []-> "rkcif_tools_id2":0 [ENABLED]- entity 58: rockchip-csi2-dphy0 (2 pads, 2 links)type V4L2 subdev subtype Unknowndevice node name /dev/v4l-subdev1pad0: Sink[fmt:SRGGB10/4000x3000]<- "m00_b_imx586 5-0010":0 [ENABLED]pad1: Source-> "rockchip-mipi-csi2":0 [ENABLED]- entity 63: m00_b_imx586 5-0010 (1 pad, 1 link)type V4L2 subdev subtype Sensordevice node name /dev/v4l-subdev2pad0: Source[fmt:SRGGB10/4000x3000]-> "rockchip-csi2-dphy0":0 [ENABLED]

m00_b_imx586 5-0010 (1 pad, 1 link):表示imx586实在mipi0上,挂载在iic5,。

fmt:SRGGB10/4000x3000 表示格式为GB10,分辨率为4000*3000.

拓扑通路为:

m00_b_imx586 -> rockchip-csi2-dphy0 -> rockchip-mipi-csi2 -> stream_cif_mipi_id0 -> video0

五.抓取图像

命令:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=BG10 \--stream-mmap=3 \--stream-skip=3 \--stream-to=/tmp/cif888.out \--stream-count=1 \--stream-poll
[  370.297011] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297022] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297033] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297043] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297054] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297065] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297075] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297086] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297097] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297108] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297119] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297130] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297141] mipi2-csi2 ERR1:0x10000000 (ecc2)
[  370.297154] mipi2-csi2 ERR1:0x10000000 (ecc2)

发现一直报mipi2-csi2 ERR。

原因:一般报这种错误为物理层解析不到mipi协议。

排查:可能mipi4组差分线出现虚焊假焊,可能mipi插线没有整理好,也可能mipi波形不对。

mipi data波形:为方波

相关文章:

RK3588 点亮imx586摄像头

一.硬件原理图 mipi摄像头硬件确认点&#xff1a; 1.供电&#xff1a;5V&#xff0c;2.8V&#xff0c;1.2V&#xff0c;1.8V&#xff0c;reset脚&#xff08;硬拉3.3&#xff0c;上电的时候从低到高&#xff09;&#xff0c;pwron脚外接 3.3V。 2,时钟&#xff1a;MCLKOUT是2…...

C++---继承

继承 前言继承的概念及定义继承的概念继承定义继承关系和访问限定符 基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员**多重继承**多继承下的类作用域菱形继承虚继承使用虚基类 支持向基类的常规类型转换 前言 在需要写Father类和Mother…...

使用新版Maven-mvnd快速构建项目

目前我们项目的构建方式多数是 maven、gradle&#xff0c;但是 maven 相对 gradle 来说&#xff0c;构建速度较慢&#xff0c;特别是模块相对较多的时候&#xff0c;构建速度更加明显。但是我们将项目由 maven 替换为 gradle 相对来说会比较麻烦&#xff0c;成本较高。于是我们…...

【ICASSP 2023】ST-MVDNET++论文阅读分析与总结

主要是数据增强的提点方式。并不能带来idea启发&#xff0c;但对模型性能有帮助 Challenge&#xff1a; 少有作品应用一些全局数据增强&#xff0c;利用ST-MVDNet自训练的师生框架&#xff0c;集成了更常见的数据增强&#xff0c;如全局旋转、平移、缩放和翻转。 Contributi…...

MySQL 面试题——MySQL 基础

目录 1.什么是 MySQL&#xff1f;有什么优点&#xff1f;2.MySQL 中的 DDL 与 DML 是分别指什么&#xff1f;3.✨数据类型 varchar 与 char 有什么区别&#xff1f;4.数据类型 BLOB 与 TEXT 有什么区别&#xff1f;5.DATETIME 和 TIMESTAMP 的异同&#xff1f;6.✨MySQL 中 IN …...

JDK9特性——概述

文章目录 引言JDK9特性概述JDK9的改变JDK和JRE目录变化总结 引言 JAVA8 及之前&#xff0c;版本都是特性驱动的版本更新&#xff0c;有重大的特性产生&#xff0c;然后进行更新。 JAVA9开始&#xff0c;JDK开始以时间为驱动进行更新&#xff0c;以半年为周期&#xff0c;到时…...

征战开发板从无到有(三)

接上一篇&#xff0c;翘首已盼的PCB板子做好了&#xff0c;管脚约束信息都在PCB板上体现出来了&#xff0c;很满意&#xff0c;会不会成为爆款呢&#xff0c;嘿嘿&#xff0c;来&#xff0c;先看看PCB裸板美图 由于征战开发板电路功能兼容小梅哥ACX720&#xff0c;大家可以直…...

Linux设备树详细学习笔记

参考文献 参考视频 开发板及程序 原子mini 设备树官方文档 设备树的基本概念 DT:Device Tree //设备树 FDT: Flattened Device Tree //开放设备树&#xff0c;起源于OpenFirmware (所以后续会见到很多OF开头函数) dts: device tree source的缩写 //设备树源码 dtsi: device …...

【系统架构】系统架构设计基础知识

导读&#xff1a;本文整理关于系统架构设计基础知识来构建系统架构知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件架…...

快递、外卖、网购自动定位及模糊检索收/发件地址功能实现

概述 目前快递、外卖、团购、网购等行业 &#xff1a;为了简化用户在收发件地址填写时的体验感&#xff0c;使用辅助定位及模糊地址检索来丰富用户的体验 本次demo分享给大家&#xff1b;让大家理解辅助定位及模糊地址检索的功能实现过程&#xff0c;以及开发出自己理想的作品…...

Springboot后端导入导出excel表

一、依赖添加 操作手册&#xff1a;Hutool — &#x1f36c;A set of tools that keep Java sweet. <!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.20</versio…...

通过stream流实现分页、模糊搜索、按列过滤功能

通过stream实现分页、模糊搜索、按列过滤功能 背景逻辑展示示例代码 背景 在有一些数据通过数据库查询出来后&#xff0c;需要经过一定的逻辑处理才进行前端展示&#xff0c;这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。这些功能通过普通的逻辑处理可能较为繁琐…...

webpack:系统的了解webpack一些核心概念

文章目录 webpack 如何处理应用程序&#xff1f;何为webpack模块chunk&#xff1f;入口(entry)输出(output)loader开发loader 插件(plugin)简介流程插件开发&#xff1a;Tapable类监听(watching)compiler 钩子compilation 钩子compiler和compilation创建自定义 插件 loader和pl…...

Unreal Engine Loop 流程

引擎LOOP 虚幻引擎的启动是怎么一个过程。 之前在分析热更新和加载流程过程中&#xff0c;做了一个图。记录一下&#xff01;&#xff01; ![在这里插入图片描述](https://img-blog.csdnimg.cn/f11f7762f5dd42f9b4dd9b7455fa7a74.png#pic_center 只是记录&#xff0c;以备后用…...

FLASK中的鉴权的插件Flask-HTTPAuth

在 Web 应用中&#xff0c;我们经常需要保护我们的 api&#xff0c;以避免非法访问。比如&#xff0c;只允许登录成功的用户发表评论等。Flask-HTTPAuth 扩展可以很好地对 HTTP 的请求进行认证&#xff0c;不依赖于 Cookie 和 Session。本文主要介绍两种认证的方式&#xff1a;…...

linux万字图文学习进程信号

1. 信号概念 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。 1.1 linux中我们常用Ctrlc来杀死一个前台进程 1. Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。2. S…...

DataX实现Mysql与ElasticSearch(ES)数据同步

文章目录 一、Linux环境要求二、准备工作2.1 Linux安装jdk2.2 linux安装python2.3 下载DataX&#xff1a; 三、DataX压缩包导入&#xff0c;解压缩四、编写同步Job五、执行Job六、定时更新6.1 创建定时任务6.2 提交定时任务6.3 查看定时任务 七、增量更新思路 一、Linux环境要求…...

第二章 进程与线程 十、调度算法1(先来先服务、短作业优先、最高响应比优先)

目录 一、先来先服务算法 1、算法思想 2、算法规则 3、用于作业/进程调度 4、是否可抢占? 5、优缺点 优点&#xff1a; 缺点&#xff1a; 6、是否会导致饥饿 7、例子 二、短作业优先算法 1、算法思想 2、算法规则 3、用于作业/进程调度 4、是否可抢占? 5、优缺…...

windows平台 git bash使用

打开所在需要git管理的目录,鼠标右键open Git BASH here 这样就直接进来,不需要windows dos窗口下麻烦的切路径&#xff0c;windows和linux 路径方向不一致 (\ /) 然后git init 建立本地仓库,接下来就是git相关的操作了. 图形化界面查看 打开所在需要git管理的目录,鼠标右键…...

Linux系统之安装uptime-kuma服务器监控面板

Linux系统之安装uptime-kuma服务器监控面板 一、uptime-kuma介绍1.1 uptime-kuma简介1.2 uptime-kuma特点 二、本次实践环境介绍2.1 环境规划2.2 本次实践介绍2.3 环境要求 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装Node.js 四、部署…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...