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摄像头硬件确认点: 1.供电:5V,2.8V,1.2V,1.8V,reset脚(硬拉3.3,上电的时候从低到高),pwron脚外接 3.3V。 2,时钟:MCLKOUT是2…...
C++---继承
继承 前言继承的概念及定义继承的概念继承定义继承关系和访问限定符 基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员**多重继承**多继承下的类作用域菱形继承虚继承使用虚基类 支持向基类的常规类型转换 前言 在需要写Father类和Mother…...
使用新版Maven-mvnd快速构建项目
目前我们项目的构建方式多数是 maven、gradle,但是 maven 相对 gradle 来说,构建速度较慢,特别是模块相对较多的时候,构建速度更加明显。但是我们将项目由 maven 替换为 gradle 相对来说会比较麻烦,成本较高。于是我们…...
【ICASSP 2023】ST-MVDNET++论文阅读分析与总结
主要是数据增强的提点方式。并不能带来idea启发,但对模型性能有帮助 Challenge: 少有作品应用一些全局数据增强,利用ST-MVDNet自训练的师生框架,集成了更常见的数据增强,如全局旋转、平移、缩放和翻转。 Contributi…...
MySQL 面试题——MySQL 基础
目录 1.什么是 MySQL?有什么优点?2.MySQL 中的 DDL 与 DML 是分别指什么?3.✨数据类型 varchar 与 char 有什么区别?4.数据类型 BLOB 与 TEXT 有什么区别?5.DATETIME 和 TIMESTAMP 的异同?6.✨MySQL 中 IN …...
JDK9特性——概述
文章目录 引言JDK9特性概述JDK9的改变JDK和JRE目录变化总结 引言 JAVA8 及之前,版本都是特性驱动的版本更新,有重大的特性产生,然后进行更新。 JAVA9开始,JDK开始以时间为驱动进行更新,以半年为周期,到时…...
征战开发板从无到有(三)
接上一篇,翘首已盼的PCB板子做好了,管脚约束信息都在PCB板上体现出来了,很满意,会不会成为爆款呢,嘿嘿,来,先看看PCB裸板美图 由于征战开发板电路功能兼容小梅哥ACX720,大家可以直…...
Linux设备树详细学习笔记
参考文献 参考视频 开发板及程序 原子mini 设备树官方文档 设备树的基本概念 DT:Device Tree //设备树 FDT: Flattened Device Tree //开放设备树,起源于OpenFirmware (所以后续会见到很多OF开头函数) dts: device tree source的缩写 //设备树源码 dtsi: device …...
【系统架构】系统架构设计基础知识
导读:本文整理关于系统架构设计基础知识来构建系统架构知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑,基于大量项目实践经验基础上,不断加深理论体系的理解,从而能够创造新解决系统相关问题。 目录 1、软件架…...
快递、外卖、网购自动定位及模糊检索收/发件地址功能实现
概述 目前快递、外卖、团购、网购等行业 :为了简化用户在收发件地址填写时的体验感,使用辅助定位及模糊地址检索来丰富用户的体验 本次demo分享给大家;让大家理解辅助定位及模糊地址检索的功能实现过程,以及开发出自己理想的作品…...
Springboot后端导入导出excel表
一、依赖添加 操作手册:Hutool — 🍬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实现分页、模糊搜索、按列过滤功能 背景逻辑展示示例代码 背景 在有一些数据通过数据库查询出来后,需要经过一定的逻辑处理才进行前端展示,这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。这些功能通过普通的逻辑处理可能较为繁琐…...
webpack:系统的了解webpack一些核心概念
文章目录 webpack 如何处理应用程序?何为webpack模块chunk?入口(entry)输出(output)loader开发loader 插件(plugin)简介流程插件开发:Tapable类监听(watching)compiler 钩子compilation 钩子compiler和compilation创建自定义 插件 loader和pl…...
Unreal Engine Loop 流程
引擎LOOP 虚幻引擎的启动是怎么一个过程。 之前在分析热更新和加载流程过程中,做了一个图。记录一下!! 数据同步
文章目录 一、Linux环境要求二、准备工作2.1 Linux安装jdk2.2 linux安装python2.3 下载DataX: 三、DataX压缩包导入,解压缩四、编写同步Job五、执行Job六、定时更新6.1 创建定时任务6.2 提交定时任务6.3 查看定时任务 七、增量更新思路 一、Linux环境要求…...
第二章 进程与线程 十、调度算法1(先来先服务、短作业优先、最高响应比优先)
目录 一、先来先服务算法 1、算法思想 2、算法规则 3、用于作业/进程调度 4、是否可抢占? 5、优缺点 优点: 缺点: 6、是否会导致饥饿 7、例子 二、短作业优先算法 1、算法思想 2、算法规则 3、用于作业/进程调度 4、是否可抢占? 5、优缺…...
windows平台 git bash使用
打开所在需要git管理的目录,鼠标右键open Git BASH here 这样就直接进来,不需要windows dos窗口下麻烦的切路径,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 四、部署…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
