驱动开发、移植
一、任务明确:把创龙MX8的驱动 按照我们的要求 然后移植到 我们的板子
1.Linux系统启动卡制作,
sd卡 先按照 《用户手册—3-2-Linux系统启动卡制作及系统固化》 把创龙的Linux系统刷进去。
2. 把TLIMX8-EVM的板子过一遍
把刚刚烧好系统的sd卡插入 创龙TLIMX8-EVM的板子,
用SecureCRT调试窗口 串口或者SSH远程登陆 创龙创龙TLIMX8-EVM的板子
然后按照 《2-1-评估板测试手册》 把评估版创龙TLIMX8-EVM下面这些功能测试一遍

3. 把TLIMX8-EVM的板子的Liunx系统编译一遍
按照 《3-1-Linux系统使用手册》 把创龙的TLIMX8-EVM的板子配套的Liunx系统下面图这些U-Boot、Linux内核编译一遍,也就是把刚刚刷进去SD卡的Linux系统内核编译一遍。(之后可以按照自己的需求对内核进行配置和裁剪)

4.按照我们的需求去修改、配置内核,编译成内核镜像文件,修改设备树dts,编译生成设备树dtb文件
按照我们的需求去修改、配置内核,编译成内核镜像文件,烧录到我们自己的板子;
之后我们就把创龙的TLIMX8-EVM 板 对应的Linux系统内核,也就是上面刷的那个系统内核 根据 我们这边的需求去修改、去配置内核,然后编译出来生成Linux系统镜像文件,然后把这个镜像文件烧进SD卡—Linux系统启动卡,然后把这个卡插到我们自己做的板子,启动这个系统。
修改设备树dts文件,重新编译生成设备树dtb二进制文件,拷贝到SD卡—Linux系统启动卡的BOOT分区。
然后在虚拟机上修改设备树dts文件,重新编译生成设备树dtb二进制文件,拷贝到SD卡—Linux系统启动卡的BOOT分区。
5.之后工作的任务步骤
在虚拟机上使用 创龙的TLIMX8-EVM 板 对应的SDK(里面有文件可以编译生成对应版本的Linux系统。可以编译生成U-Boot、内核、文件系统、设备树文件)编译生成对应版本的Linux系统,烧录到SD卡—Linux系统启动卡。
1.内核配置,内核编译
首先先在虚拟机使用官方提供的SDK按照我们的需求去修改、配置内核,编译成内核镜像文件,烧录到我们自己的板子;
2.驱动适配调式过程:
将烧录好系统的sd卡插入 创龙TLIMX8-EVM的板子,板子使用SD卡里面的系统进行启动,
用SecureCRT调试窗口 串口连接或者SSH远程登陆 创龙TLIMX8-EVM的板子去测试刚刚烧录到这个Linux系统跟板子的功能模块适不适配,参考资料《2-1-评估板测试手册.pdf》,
如果这个系统的某个功能模块(例如LED指示灯)在创龙TLIMX8-EVM板子上正常,说明原本的LDE指示灯驱动程序.c源文件没有问题。这时候我们就要去对应自己的板子去简单的修改LED指示灯驱动程序.c源文件,让这个驱动程序去适配我们的板子上的LED指示灯,如果.c源文件没有问题,或者不需要修改了,这时候就要去修改创龙TLIMX8-EVM板子对应的设备树文件,去修改成适配我们板子的设备树文件,然后拷贝到我们板子系统的BOOT分区(例如我们的板子使用的是SD卡—Linux系统启动卡,那我们就要插上这个卡连接到我们的PC机的虚拟机上,然后把这个设备树文件拷贝到SD卡—Linux系统的BOOT分区,然后在把这个卡拔掉,然后插到我们的板子,使用SD卡-Linux系统启动卡运行系统)。
除了LED指示灯功能模块,其他的功能模块的驱动也是类似进行开发,移植,
当自己的板子所有的功能模块的驱动都适配后,这时候就可以把SD卡-Linux系统启动卡中的系统 固化 到板子的 eMMC里面。
二、实战
1.虚拟机的账号和密码均是:Hugo

虚拟机开启root用户,设置了root用户密码

评估版的账号密码,都是root
遇到问题
共享文件夹的问题,cd 到 /mnt/hgfs/ 路径下,ls没有看到 Shared Folders 共享文件夹
系统自动挂载功能未启用,系统里面有这个共享文件夹,但是系统没有把这个文件夹自动挂载到/mnt/hgfs/下。
使用vmware-hgfsclient命令列出所有共享文件夹(在VM->setting->options->shared Folders里面设置的),可以看到所以共享文件夹都在系统中,只是没有自动挂载在 /mnt/hgfs/ 路径下。

我们手动挂载一下。先创建一个文件夹,然后把主机hots的共享文件夹SharedFolders 挂载到虚拟机这个文件夹 、mnt/hgfs/SharedFolders

1
- 根目录 / 是Linux文件系统的最顶层目录
- 是一个快捷方式,代表当前用户的主目录。这是一种方便的方式来引用主目录而不需要输入完整的路径。比如,如果用户 hugo 的家目录是 /home/hugo,那么 ~/IMX8 就相当于 /home/hugo/IMX8 。
- 总是指向执行命令的那个用户的家目录。
2

在每次打开U-Boot配置界面时,要先
export LINES=24
export COLUMNS=80
强制设定终端的高度为24行,宽度为80列。请注意,这种方法不一定总是有效,因为实际显示效果还取决于终端的实际大小。
三、BL360_X8M板驱动移植
1. 修改设备树的步骤和命令
如图所示:

先cd到NXP i.MX8系列处理器(IMX8)的内核(kernel)目录下的 Linux内核版本为5.4.70(Linux-5.4.70)的内核源代码、配置文件、编译结果(内核源码)路径。
cd IMX8/Kernel/Linux-5.4.70/
然后在这个路径下重新编译生成二进制设备树文件:
① 先使能SDK环境变量
② 在内核源码目录 IMX8/Kernel/Linux-5.4.70/ 下编译生成二进制设备树 dtb 文件(生成的 dtb文件位于arch/arm64/boot/dts/freescale/路径下)
source /home/hugo/SDK/environment-setup-aarch64-poky-linux
make freescale/tlimx8-evm.dtb
插上SD系统启动卡连接到PC机上的虚拟机,然后把生成的二进制dtb设备树文件拷贝到SD系统启动卡(Linux系统)的BOOT分区。

cd /media/hugo/BOOT
cp /home/hugo/IMX8/Kernel/Linux-5.4.70/arch/arm64/boot/dts/freescale/tlimx8-evm.dtb ./
2. 系统启动
问题描述(启动系统被卡住)
BL360_X8M板插入sd系统启动卡,插上电启动的过程的时候,调试器SecureCRT显示出串口打印的信息,有pcie 。。。time out。 然后系统就一直卡在这里,进不去。
问题解决
BL360_X8M板插入sd系统启动卡,启动前要先把设备树的pcie屏蔽掉。
1.首先把sd系统启动卡拿出来,通过读卡器插到pc机上,然后挂载到虚拟机上。
2.根据《3-1-Linux系统使用手册.pdf》的 《3.4 编译设备树文件》的提示,进入这个链接去修改tlimx8-evm.dts。
hugo@hugo-virtual-machine:~/IMX8/Kernel/Linux5.4.70/arch/arm64/boot/dts/freescale$ vi tlimx8-evm.dts

3.然后切换回内核源码安装目录下,执行如下命令使能SDK环境变量,并在内核源码目录"arch/arm/boot/dts/"路径中编译生成 dtb 文件。

4.把这个生成的dtb文件拷贝至Linux系统启动卡BOOT分区。

5.然后把系统启动卡断开链接,然后拔出来,插到BL360_X8M板上,重新启动
3.LED驱动移植
问题描述(修改LED驱动)
把创龙MX8评估板的系统移植到 自己的板子BL360_X8M,修改调试LED驱动适配我们的板子。
问题解决
① 首先,led.c的源码不用动,先根据你的原理图,看到我们自己的板子的LED1和LED2分别连接到GPIO3_23和GPIO3_34,
直接修改设备树文件tlimx8-evm.dts,找到leds节点,把GPIO的口改成我们板子的LED连接的GPIO口。
然后重新编译生成设备树,重新运行系统。
一般就这样修改,LED就会亮了,但是LED还是不亮,
解决看4.《【 遇到问题】(引脚功能被复用)》

4.【 遇到问题】(引脚功能被复用)
根据原理图修改成我们板子的LED的GPIO引脚号后,但是LED还是不亮
问题解决
② 然后有经验的工程师来教我,他先把led的pin_ctrl给注释掉了,说不用写也可以

为什么不需要配置pinctrl_gpio_led?
内核自动处理:
因为在LED节点中直接指定gpios = <&gpio3 23 ...>时,
内核会自动去检查该引脚是否被其他模块占用,
如果没有冲突,自动将引脚配置为GPIO模式。
但需注意:
如果引脚被其他模块占用(如PDM),内核会拒绝配置,将不会自动将引脚配置为GPIO模式,从而导致LED失败,
此时必须手动释放冲突模块(如禁用PDM)。
③ 然后他通过NXP芯片官网提供的config tool软件找到了GPIO3_23引脚,对应AD13,找到了这个脚有其他的功能复用的可能,然后他通过这段代码在设备树上查找:MX8MM_IOMUXC_SAI5_RXD2_PDM_DATA2

确实在设备树找到了代码:MX8MM_IOMUXC_SAI5_RXD2_PDM_DATA2 0xd6,说明配置了这个功能,刚好这个功能占用的口跟GPIO3_IO23冲突。

④ 然后通过在设备树搜索 :pinctrl_pdm

找到了用这个功能的代码,把这个功能注释掉就行。

⑤ 重新编译设备树,启动系统,通过代码测试,LED灯正常亮:
- 可以先cd到
/sys/class/leds路径下,然后ls,看看有没有user-led0 和 user-led1节点:

- 通过命令测试,观察LED指示灯的亮灭:
echo 0 > /sys/class/leds/user-led0/brightness
echo 1 > /sys/class/leds/user-led0/brightness
echo 0 > /sys/class/leds/user-led1/brightness
echo 1 > /sys/class/leds/user-led1/brightness
结果如下:

四、驱动移植的理解
1. 一个I2C总线挂载多个从设备
一个I2C总线理论上可以挂载的设备数量取决于所使用的地址空间。
对于标准7位地址空间,I2C协议允许最多128个不同的地址(从0x00到0x7F)。
然而,实际上有几个地址是保留用于特殊用途的,比如通用调用地址和起始字节地址,所以实际可用的地址略少一些。
所以一个I2C总线最多挂载的设备是少于128个的。
所以一个I2C总线可以挂载多个设备
比如下图的设备树可以看到,
一个i2c4的接口节点,有3个compatible,分别代表连接的设备为ds1307、isl1208、ov5640_mipi,这代表i2c-4上挂载了三种不同的设备:
一个兼容dallasds1307的实时时钟(RTC)设备(地址0x68);
一个兼容isil.isl1208的RTC设备(地址0x6f) ,
以及一个兼容ovti,ov5640 mipi的摄像头模块(地址0x3c) .
只要它们的reg属性不同(也就是12C的给他们分配的唯一的i2C地址),那这些设备挂载在一个i2C总线上就不会发生冲突,i2C总线是通过挂载在I2C的设备唯一的I2C地址识别是哪个设备,从而跟对应的设备通信,所以一个I2C总线接多个设备不会冲突。

2.设备树配置和i2c地址挂载的联系


1.设备树中i2c1中配置了以下设备:
pca9450@25(0x25):在系统文件i2c-0中被扫描出地址0x25显示为UU,说明驱动已加载。ina220@40(0x40):未在系统文件i2c-0中被扫描出,但是在设备树i2c1中有配置,说明硬件没有连上i2c1总线。ina220@41(0x41):未在系统文件i2c-0中被扫描出,但是在设备树i2c1中有配置,说明硬件没有连上i2c1总线。
2.设备树中i2c2中没有配置任何设备:
但是使用命令在系统文件i2c-1中扫描出了4个设备,说明有4个设备连接到了i2c2总线,只是没有在设备树中进行驱动配置
这4个设备连接上了I2C总线,没有和总线进行通信,可以被使用。
3.设备树中i2c3中配置了以下设备:
tlv320aic3106@18(0x18)在系统文件i2c-2中被扫描出地址0x18显示为UU,说明驱动已加载。gpio@21(0x21):未在系统文件i2c-2中被扫描出,但是在设备树i2c3中有配置,说明硬件没有连上i2c3总线。
4.设备树中i2c4中配置了以下设备:
rtc@68(0x68):在系统文件i2c-0中被扫描出地址0x68显示为UU,说明驱动已加载。rtc@6f(0x6f):未在系统文件i2c-0中被扫描出,但是在设备树i2c1中有配置,说明硬件没有连上i2c1总线。ov5640_mipi@3c(0x3c):未在系统文件i2c-0中被扫描出,但是在设备树i2c1中有配置,说明硬件没有连上i2c1总线。
注意点
1.显示为UU的原因
UU表示该地址已被内核驱动占用,用户空间无法直接访问。- 在你的设备树中,
i2c4总线上配置了rtc@68设备(0x68),并且其驱动已成功加载。 - 因此,
0x68地址被内核驱动占用,显示为UU。
2. 0x6f 和 0x3c 未显示的原因
设备树中配置了以下设备:
rtc@68(0x68):显示为UU,驱动已加载。rtc@6f(0x6f):未显示。ov5640_mipi@3c(0x3c):未显示。
可能的原因包括:
(1)硬件未连接
- 设备树中配置了设备,但实际硬件上并未连接到
i2c4总线。 - 例如:
0x6f的 RTC 设备未焊接或未连接。0x3c的摄像头模块未连接。
(2)设备初始化失败
- 设备已连接,但驱动初始化失败。
- 可能的原因:
- 设备供电异常。
- 设备引脚配置错误(如 SDA、SCL 未正确连接)。
- 设备驱动未正确加载。
(3)设备树配置错误
- 设备树中配置的设备地址或兼容性字符串有误,导致驱动无法正确匹配。
- 例如:
compatible字符串错误。- 设备寄存器地址(
reg)配置错误。
(4)设备被禁用
- 设备树中配置了设备,但其状态为
disabled。 - 例如:
ov5640_mipi: ov5640_mipi@3c {compatible = "ovti,ov5640_mipi";reg = <0x3c>;status = "disabled"; // 设备被禁用 };
3. 排查步骤
(1)检查硬件连接
- 确认
0x6f和0x3c设备是否实际连接到i2c4总线。 - 使用万用表或示波器检查设备的电源、SDA、SCL 引脚是否正常。
(2)检查设备树配置
- 确认设备树中
0x6f和0x3c设备的配置是否正确。 - 例如,检查
compatible字符串和reg地址:isl1208: rtc@6f {compatible = "isil,isl1208"; // 确认兼容性字符串正确reg = <0x6f>; // 确认地址正确status = "okay"; // 确认设备已启用 };ov5640_mipi: ov5640_mipi@3c {compatible = "ovti,ov5640_mipi"; // 确认兼容性字符串正确reg = <0x3c>; // 确认地址正确status = "okay"; // 确认设备已启用 };
(3)检查内核日志
- 使用
dmesg查看内核日志,确认设备是否初始化失败:dmesg | grep i2c - 如果设备初始化失败,日志中会显示相关错误信息。
(4)手动探测设备
- 使用
i2cget或i2cset手动探测设备,确认设备是否存在。 - 例如,探测
0x6f设备:i2cget -y 3 0x6f- 如果设备存在,会返回数据。
- 如果设备不存在,会返回错误。
(5)检查驱动加载
- 确认设备的驱动是否已加载:
lsmod | grep isl1208 lsmod | grep ov5640 - 如果驱动未加载,手动加载驱动:
modprobe isl1208 modprobe ov5640
4. 解决方法
(1)如果硬件未连接
- 确认硬件设计,修复连接问题。
- 如果设备不需要使用,可以从设备树中移除相关配置。
(2)如果设备初始化失败
- 检查设备供电和引脚连接。
- 检查设备树配置,确保
compatible和reg正确。 - 检查内核日志,修复驱动初始化问题。
(3)如果设备树配置错误
- 修正设备树中的
compatible字符串和reg地址。 - 确保设备状态为
okay。
(4)如果驱动未加载
- 确保内核中已编译相关驱动。
- 手动加载驱动,或修改设备树以正确匹配驱动。
5. 总结
0x68显示为UU:设备已连接且驱动已加载。0x6f和0x3c未显示:可能是硬件未连接、设备初始化失败、设备树配置错误或驱动未加载。- 通过检查硬件连接、设备树配置、内核日志和驱动加载情况,可以定位并解决问题。
相关文章:
驱动开发、移植
一、任务明确:把创龙MX8的驱动 按照我们的要求 然后移植到 我们的板子 1.Linux系统启动卡制作, sd卡 先按照 《用户手册—3-2-Linux系统启动卡制作及系统固化》 把创龙的Linux系统刷进去。 2. 把TLIMX8-EVM的板子过一遍 把刚刚烧好系统的sd卡插入 创…...
BFS与Flood Fill:算法原理、实现细节与复杂度分析
目录 1. 概述 2. BFS 的基本原理 3. Flood Fill 算法 4. BFS 实现 Flood Fill 的步骤 5. C 实现 6. 代码解析 7. 复杂度分析 8. 应用场景 总结 1. 概述 Flood Fill 算法是一种用于填充封闭区域的算法,常用于图像处理、绘图工具和游戏开发中。BFS(…...
计算机网络基础杂谈(局域网、ip、子网掩码、网关、DNS)
目录 1. 简单局域网的构成 2. IP 地址 3. 子网掩码 4. IP地址详解自定义IP 5. IP 地址详解 6. 网关 7. DNS 域名解析 8. ping 1. 简单局域网的构成 交换机是组建局域网最重要的设备,换句话说,没有交换机就没法搭建局域网 交换机不能让局域网连…...
雷龙CS SD NAND(贴片式TF卡)测评体验
一、产品概述 近期获赠雷龙科技(Longsto)推出的CS系列贴片式SD NAND存储解决方案,包含两片工业级贴片式NAND芯片(CSNP16GCR01-AOW)及全兼容转接板。该方案支持TF卡形态扩展,实现高可靠性嵌入式存储应用。 …...
【Alertmanager】alertmanager告警系统原理剖析与应用实战,应有尽有非常全面
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
Java——权限修饰符
一、权限修饰符的继承访问规则 以下按访问范围从宽到窄排序: 修饰符同包同类同包子类同包非子类跨包子类跨包非子类public✔️✔️✔️✔️✔️protected✔️✔️✔️✔️❌默认(包级)✔️✔️✔️❌❌private✔️❌❌❌❌ 关键点…...
一周学会Flask3 Python Web开发-redirect重定向
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学过渲染到模板页面,这个其实是一种内部的转发,浏览器地址栏地址没有变化。如果我们想重定向…...
python面向对象:方法
1. 实例方法 实例方法用于操作实例变量,必须包含 self 参数。 class Person:def __init__(self, name):self.name namedef greet(self):print(f"Hello, my name is {self.name}")person1 Person("Alice") person1.greet() # 输出ÿ…...
物联网简介集合
物联网(IoT)指的是物理设备(如电器和车辆)之间的互联互通。这些设备嵌入了软件、传感器和连接功能,使其能够相互连接并交换数据。这项技术实现了从庞大的设备网络中收集和共享数据,为打造更高效、自动化的系…...
centos下使用pyenv管理python版本
在 CentOS 上安装 pyenv 和 pyenv-virtualenv,可以按照以下步骤进行操作: ps: centos7 最高适配到3.9.* 步骤 1:安装依赖 首先,确保你的系统中安装了必需的依赖项。你可以使用以下命令安装它们: [root ~]# yum gro…...
C++:类与对象,定义类和构造函数
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //如何让定义一个类 // 封装 // 1、将数据和方法定义到一起。 // 2、把想给你看的数据给你看,不想给你看的封装起来。 通过访问限定符来实现 class Stack { public: //1.成…...
【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略
应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…...
解锁机器学习核心算法|神经网络:AI 领域的 “超级引擎”
一、神经网络:AI 领域的 “超级引擎” 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森…...
Android14(13)添加墨水屏手写API
软件平台:Android14 硬件平台:QCS6115 需求:特殊品类的产品墨水屏实现手写的功能,本来Android自带的Input这一套可以实现实时展示笔迹,但是由于墨水屏特性,达不到正常的彩屏刷新的帧率,因此使用…...
flyway的ignoreMigrationPatterns
1、概述 ignoreMigrationPatterns 是 Flyway 中的一个配置选项,用于指定在迁移过程中可以忽略的迁移脚本的模式。这个选项通常用于在特定情况下跳过某些迁移脚本的执行,例如在开发环境中跳过某些测试数据脚本,或者在特定条件下忽略某些已经不…...
25年2月通信基础知识补充:多普勒频移与多普勒扩展、3GPP TDL信道模型
看文献过程中不断发现有太多不懂的基础知识,故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关,故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…...
华为动态路由-OSPF-骨干区
华为动态路由-OSPF-骨干区 一、OSPF简介 1、OSPF概述 OSPF是一种开放式的、基于链路状态的内部网关协议(IGP),用于在自治系统内部进行路由选择和通信。 OSPF是互联网工程任务组(IETF)定义的标准之一,被广…...
接口测试-API测试中常用的协议(中)
一、SOAP SOAP(Simple Object Access Protocol)即简单对象访问协议,是一种基于 XML 的用于在网络中交换结构化信息的协议,常用于 Web 服务之间的通信。以下为你详细介绍: 产生背景 在互联网发展过程中,需…...
植物大战僵尸杂交版v3.2.1最新版本(附下载链接)
B站游戏作者潜艇伟伟迷于12月21日更新了植物大战僵尸杂交版3.2.1版本!!!,有b站账户的记得要给作者三连关注一下呀! 不多废话下载链接放上: 夸克网盘链接::https://pan.quark.cn/s/e5…...
java每日精进 2.20 MQ相关复健
在 RabbitMQ 中,消息消费者对消息的签收(acknowledgment)可以通过三种方式进行管理:自动签收、手动签收 和 拒绝签收。它们主要控制消费者如何处理消息确认和消息的重新排队。下面详细讲解它们的区别,并通过代码示例展…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
