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

三、STM32MP257系列之定制Yocto Machine

文章目录

  • STM32MP257系列之定制的Yocto Machine
    • 1. TFA 定制
    • 2. OPTEE OS定制
    • 3. Uboot 定制
      • 3.1 创建 board
      • 3.2 创建 board的头文件
      • 3.3 创建 board的配置文件
      • 3.4 添加我们自己的dtb文件
      • 3.5 生成新patch打包到uboot recipe中
      • 3.6 修改yocto中的配置
    • 4. Kernel 定制
      • 4.1 定制设备树
    • 5. 添加Machine
      • 5.1 添加Machine文件
      • 5.2 添加image recipe
    • 6. 完整编译烧录验证
      • 6.1 编译
      • 6.2 烧录
      • 6.3 启动

STM32MP257系列之定制的Yocto Machine

在第一篇文章中我们使用米尔官方提供的Yocto源码编译得到了产物镜像,但是是米尔自己的系统,本章节将在Yocto系统中添加我们自己的Machine,因为笔者想基于STM32MP257开发一个桌面机器人,所以起名叫Zero Robot, 寓意从0开始的机器人之旅。

1. TFA 定制

首先需要适配的就是TFA的改动,在yocto工程中获得TFA的源码,使用如下指令将TFA的源码添加到工作区:

devtool modify tf-a-stm32mp

稍等片刻我们就可以在build-openstlinuxweston-myd-ld25x/workspace/sources/tf-a-stm32mp 下面看到完整的tfa源码:
在这里插入图片描述
然后按照如下指令添加自定义设备树:

cd fdts
cp myb-stm32mp257x-2GB.dts zero-robot-stm32mp257x-2GB.dts
cp myb-stm32mp257x-base.dtsi zero-robot-stm32mp257x-base.dtsi
cp myb-stm32mp257x-2GB-fw-config.dts zero-robot-stm32mp257x-2GB-fw-config.dts
cp myb-stm32mp257x-2GB-fw-config.dtsi zero-robot-stm32mp257x-2GB-fw-config.dtsi

修改zero-robot-stm32mp257x-2GB.dts中的dtsi引用名称:

#include "zero-robot-stm32mp257x-base.dtsi" // 改这个
#include "stm32mp25-lpddr4-1x16Gbits-1x32bits-1200MHz.dtsi"
#include "stm32mp25-pinctrl.dtsi"
#include "stm32mp25xxai-pinctrl.dtsi"

修改zero-robot-stm32mp257x-2GB-fw-config.dts中的dtsi引用名称:

#include "stm32mp25-fw-config.dtsi"
#include "zero-robot-stm32mp257x-2GB-fw-config.dtsi" //改这个

完成以后使用git 添加到暂存区:

git add .
git commit -m "tfa add zero-robot dtb"

最后更新改动到recipe中:

devtool update-recipe tf-a-stm32mp

2. OPTEE OS定制

接着适配的就是OPTEE的改动,首先在yocto工程中获得optee os的源码,使用如下指令将optee的源码添加到工作区:

devtool modify optee-os-stm32mp

稍等片刻我们就可以在build-openstlinuxweston-myd-ld25x/workspace/sources/optee-os-stm32mp 下面看到完整的optee源码:
在这里插入图片描述
然后按照如下指令添加自定义设备树:

cd core/arch/arm/dts
mv myb-stm32mp257x-base.dtsi  zero-robot-stm32mp257x-base.dtsi 
mv myb-stm32mp257x-2GB.dts zero-robot-stm32mp257x-2GB.dts

修改zero-robot-stm32mp257x-2GB.dts中的dtsi引用名称:

#include "zero-robot-stm32mp257x-base.dtsi"  //主要修改这个
#include "myb-stm32mp257x-rcc.dtsi"
#include "myb-stm32mp257x-2GB-resmem.dtsi"
#include "myb-stm32mp257x-rif.dtsi"
#include "stm32mp25-pinctrl.dtsi"
#include "stm32mp25xxai-pinctrl.dtsi"

接下来需要将我们的dts添加到flavor中,修改core/arch/arm/plat-stm32mp2/conf.mk

flavor_dts_file-257F_DK = stm32mp257f-dk.dts
flavor_dts_file-257F_EV1 = stm32mp257f-ev1.dts
flavor_dts_file-257X_MYB2GB = myb-stm32mp257x-2GB.dts
flavor_dts_file-257X_MYB1GB = myb-stm32mp257x-1GB.dts
flavor_dts_file-257X_MYT2GB = myt-stm32mp257x-2GB.dts
flavor_dts_file-257X_MYT1GB = myt-stm32mp257x-1GB.dts
flavor_dts_file-257X_ZERO_ROBOT = myb-stm32mp257x-2GB.dts  //addflavorlist-MP25 = $(flavor_dts_file-257F_DK) \$(flavor_dts_file-257X_MYB2GB) \$(flavor_dts_file-257X_MYB1GB) \$(flavor_dts_file-257X_MYT2GB) \$(flavor_dts_file-257X_MYT1GB) \$(flavor_dts_file-257F_EV1) \$(flavor_dts_file-257X_ZERO_ROBOT)  //add

完成以后使用git 添加到暂存区:

git add .
git commit -m "optee adds zero-robot dtb"

最后更新改动到recipe中:

devtool update-recipe optee-os-stm32mp

3. Uboot 定制

接下来就是定制Uboot,首先在yocto工程中获得Uboot的源码,使用如下指令将Uboot的源码添加到工作区:

devtool modify u-boot-stm32mp

稍等片刻我们就可以在build-openstlinuxweston-myd-ld25x/workspace/sources/u-boot-stm32mp 下面看到完整的Uboot源码:
在这里插入图片描述

3.1 创建 board

我们需要根据自己的要求创建属于自己的板子配置文件,首先从board文件夹下拷贝myir为zero-robot,删除6ul相关的文件夹,只保留跟stm32mp25系列有关的内容

  1. 创建zero-robot 文件夹
cd build-openstlinuxweston-myd-ld25x/workspace/sources/u-boot-stm32mp/board
cp -r myir zero-robot
rm -rf zero-robot/mys_6ulx
mv zero-robot/myd_ld25x zero-robot/zero-robot_ld25x
mv zero-robot/zero-robot_ld25x/myd-ld25x.c  zero-robot/zero-robot_ld25x/zero-robot-ld25x.c
  1. 接下来要修改 Makefile,将 myd-ld25x.o 修改为 zero-robot_ld25x.o:
    在这里插入图片描述

  2. 然后修改Kconfig,将SYS_BOARDSYS_VENDORSYS_CONFIG_NAME修改为我们自己的
    在这里插入图片描述

  3. 我们的board已经准备完毕,接下来就是将我们的board添加到系统中
    arch/arm/mach-stm32mp/Kconfig.25x 文件最后增加我们的Kconfig路径(这个会影响 make menuconfig 配置):
    在这里插入图片描述
    这里的改动项主要是添加了一个我们的目标配置:TARGET_ZERO_ROBOT_LD25X,然后将我们的board路径添加进来

3.2 创建 board的头文件

有了我们自己的board以后还得有新单板的头文件,继续按照如下指令操作:

cd include/configs
cp myd_ld25x.h zero-robot_ld25x.h

这个zero-robot_ld25x.h其实就是我们在创建board文件夹中Kconfig中 SYS_CONFIG_NAME变量指定的。

3.3 创建 board的配置文件

距离大功告成还有一步,就是创建我们的配置文件,实操:

cd configs
cp myd_ld25x_2G_defconfig zero-robot_ld25x_2G_defconfig

因为我们上面添加了我们自己的target,所以我们还需要将zero-robot_ld25x_2G_defconfig下面的TARGET修改为刚才添加的TARGET_ZERO_ROBOT_LD25X:
在这里插入图片描述

3.4 添加我们自己的dtb文件

上面的步骤完成以后我们已经有了自己的单板,接下来就是创建我们自己的dtb文件,后面所有的定制都将基于我们自己的dts文件去修改。
米尔官方的uboot使用的dts主要有如下几部分构成:
在这里插入图片描述
编译 MYD-LD25X 的 uboot 源码时会合并相关的所有 dts/dtsi 文件,生成 uboot 阶段默认使用的 myb-stm32mp257x-2GB.dtb,我们以myb-stm32mp257x-2GB.dts为基础,拷贝一份出来命名为zero-robot-stm32mp257x-2GB.dts作为我们单板的默认配置设备树:

cd arch/arm/dts
cp myb-stm32mp257x-2GB.dts zero-robot-stm32mp257x-2GB.dts

接着修改该目录下的设备树 Makefile,添加zero-robot-stm32mp257x-2GB.dtb ,内容如下:
在这里插入图片描述
最后还需要修改我们上面创建的zero-robot_ld25x_2G_defconfig 配置文件中默认的设备树:
在这里插入图片描述

3.5 生成新patch打包到uboot recipe中

至此uboot部分的定制完成,我们需要使用如下命令将改动同步会yocto源码中:

devtool update-recipe u-boot-stm32mp

3.6 修改yocto中的配置

uboot代码修改完毕以后还需要修改yocto layer里面的相关配置

  1. 修改默认的defconfig
    最后修改yocto uboot recipe中meta-myir/meta-myir-stm32mp/recipes-bsp/u-boot/u-boot-stm32mp-config.inc的内容,修改default_stm32mp25 的默认目标为我们的配置:
UBOOT_CONFIG[default_stm32mp25] ?= "**zero-robot_ld25x_2G_defconfig**,,u-boot.dtb"
  1. 添加我们的设备树到系统中
    这部分需要修改我们自己的Machine文件,在第4章节添加Machine中补充。

添加完成以后可以使用bitbake u-boot-stm32mp 编译uboot,然后使用 bitbake u-boot-stm32mp -e | grep ^D= 查看编译产物的路径:
在这里插入图片描述
里面确实生成了我们的u-boot-zero-robot-stm32mp257x-2GB.dtb

4. Kernel 定制

4.1 定制设备树

内核定制主要就是添加我们自定义的设备树,首先生成工作区,获取kernel源码:

devtool modify linux-stm32mp

生成的kernel源码路径在build-openstlinuxweston-myd-ld25x/workspace/sources/linux-stm32mp 路径。
米尔的设备树文件位于 arch/arm64/boot/dts/myir/ 路径下:

cd ./arch/arm64/boot/dts/myir/
cp myb-stm32mp257x-2GB.dts zero-robot-stm32mp257x-2GB.dts
cp myb-stm32mp257x-base.dtsi zero-robot-stm32mp257x-base.dtsi

然后修改zero-robot-stm32mp257x-2GB.dts里面的部分内容:

/dts-v1/;#define		LVDS_7INCH_PANEL		1
#define		ETH_SWITCH_ENABLE  		0#include "zero-robot-stm32mp257x-base.dtsi"   //修改为我们的dtsi引用
#include "myb-stm32mp257x-2GB-resmem.dtsi"
#include "myb-stm32mp257x-ethswitch.dtsi"/ {// model 和compatible 修改为我们的自定义内容model = "Zero Robot STM32MP257x Evaluation Board"; compatible = "tao,zero-robot-stm32mp257x", "st,stm32mp257f-ev1", "st,stm32mp257";chosen {stdout-path = "serial0:115200n8";};memory@80000000 {device_type = "memory";reg = <0x0 0x80000000 0x0 0x80000000>;};};

最后需要在Makefile中添加我们的zero-robot-stm32mp257x-2GB.dtb 文件:

# SPDX-License-Identifier: GPL-2.0-only
dtb-$(CONFIG_ARCH_STM32) += \stm32mp257f-dk.dtb \stm32mp257f-ev1.dtb \myb-stm32mp257x-1GB.dtb \myb-stm32mp257x-2GB.dtb \zero-robot-stm32mp257x-2GB.dtb \myb-stm32mp257x-1GB-ethswitch.dtb \myb-stm32mp257x-2GB-ethswitch.dtb

完成以后就可以提交修改:

git add . 
git commit -m "add zero-robot-stm32mp257x-2GB.dtb in kernel"

然后将修改同步回recipe:

devtool update-recipe linux-stm32mp

5. 添加Machine

5.1 添加Machine文件

这一部我们需要添加属于我们自己的Machine了,还是先以myd-ld25x.conf为蓝本操作:

cd layers/meta-myir/meta-myir-stm32mp/conf/machine
cp myd-ld25x.conf zero-robot.conf

然后修改zero-robot.conf中的关键内容:

MACHINENAME="zero-robot"ST_OPTEE_EXPORT_TA_REF_BOARD:stm32mp2common = "zero-robot-stm32mp257x-2GB.dts"KERNEL_DEVICETREE += "myir/myb-stm32mp257x-1GB.dtb \myir/myb-stm32mp257x-2GB.dtb \myir/zero-robot-stm32mp257x-2GB.dtb \myir/myb-stm32mp257x-2GB-ethswitch.dtb \myir/myb-stm32mp257x-1GB-ethswitch.dtb \	"
STM32MP_DT_FILES_EMMC   += "myb-stm32mp257x-1GB"
STM32MP_DT_FILES_EMMC   += "myb-stm32mp257x-2GB"
STM32MP_DT_FILES_EMMC   += "zero-robot-stm32mp257x-2GB"
STM32MP_DT_FILES_SDCARD += "myb-stm32mp257x-1GB"
STM32MP_DT_FILES_SDCARD += "myb-stm32mp257x-2GB"
STM32MP_DT_FILES_SDCARD += "zero-robot-stm32mp257x-2GB"STM32MP_DT_FILES_EMMC   += "stm32mp257f-ev1"
STM32MP_DT_FILES_SDCARD += "stm32mp257f-ev1"EXTERNAL_DEVICETREE_SDCARD = "zero-robot-stm32mp257x-2GB-ca35tdcid-ostl"
EXTERNAL_DEVICETREE_SDCARD =+ "zero-robot-stm32mp257x-2GB-ca35tdcid-ostl-m33-examples"
EXTERNAL_DEVICETREE_SDCARD = "myb-stm32mp257x-2GB-ca35tdcid-ostl"
EXTERNAL_DEVICETREE_SDCARD =+ "myb-stm32mp257x-2GB-ca35tdcid-ostl-m33-examples"
EXTERNAL_DEVICETREE_SDCARD =+ "stm32mp257f-ev1-ca35tdcid-ostl"
EXTERNAL_DEVICETREE_SDCARD =+ "stm32mp257f-ev1-ca35tdcid-ostl-m33-examples"EXTERNAL_DEVICETREE_EMMC = "zero-robot-stm32mp257x-2GB-ca35tdcid-ostl"
EXTERNAL_DEVICETREE_EMMC =+ "zero-robot-stm32mp257x-2GB-ca35tdcid-ostl-m33-examples"
EXTERNAL_DEVICETREE_EMMC = "myb-stm32mp257x-2GB-ca35tdcid-ostl"
EXTERNAL_DEVICETREE_EMMC =+ "myb-stm32mp257x-2GB-ca35tdcid-ostl-m33-examples"
EXTERNAL_DEVICETREE_EMMC =+ "stm32mp257f-ev1-ca35tdcid-ostl"
EXTERNAL_DEVICETREE_EMMC =+ "stm32mp257f-ev1-ca35tdcid-ostl-m33-examples"

5.2 添加image recipe

有了machine的配置文件,再创建一个属于我们的image:

cd layers/meta-myir/meta-myir-openstlinux/recipes-st/images
cp myir-image-core.bb zero-robot-image-core.bb
cp myir-image-full.bb zero-robot-image-full.bb

大功告成,下面就是我们的编译和验证之旅啦

6. 完整编译烧录验证

6.1 编译

编译整体image:

DISTRO=openstlinux-weston MACHINE=zero-robot source layers/meta-myir/scripts/envsetup.sh
bitbake zero-robot-image-core

然后就是漫长的等待,注意这里可以修改build-openstlinuxweston-zero-robot/conf/local.conf里面的 DL_DIR 变量,指向上一次你下载的downloads文件夹的路径,避免重复下载组件,占用磁盘空间和编译耗时:

DL_DIR ?= "${TOPDIR}/../../downloads"

在这里插入图片描述
终于编译成功,可以在build-openstlinuxweston-zero-robot/tmp-glibc/deploy/images/zero-robot 下面看到所有的编译产物,并且也生成了flashlayout_zero-robot-image-core/optee/FlashLayout_emmc_zero-robot-stm32mp257x-2GB-optee.tsv文件:
在这里插入图片描述

6.2 烧录

接下来就是使用烧录工具将image烧录到emmc里拉,首先将开发板上的启动选择拨码开关设置到0000,然后USB OTG口连接到电脑,上位机软件选择配置如下:
在这里插入图片描述
点击Download开始烧录,等待片刻即可烧录完成,再将板子的拨码开关调整为0100启动。

6.3 启动

相关文章:

三、STM32MP257系列之定制Yocto Machine

文章目录 STM32MP257系列之定制的Yocto Machine1. TFA 定制2. OPTEE OS定制3. Uboot 定制3.1 创建 board3.2 创建 board的头文件3.3 创建 board的配置文件3.4 添加我们自己的dtb文件3.5 生成新patch打包到uboot recipe中3.6 修改yocto中的配置 4. Kernel 定制4.1 定制设备树 5.…...

小程序信息收集(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…...

使用 Docker 搭建 Drogon 框架

使用 Docker 搭建 Drogon 框架 Drogon 是一个基于 C 的高性能 Web 框架&#xff0c;支持异步 I/O 和协程。使用 Docker 可以快速搭建 Drogon 开发环境&#xff0c;避免依赖冲突和配置问题。 以下是使用 Docker 搭建 Drogon 框架的详细步骤&#xff1a; 1. 准备工作 安装 Doc…...

【Linux报告】实训一:GNME桌面环境的设置及应用

实训一&#xff1a;GNME桌面环境的设置及应用 【练习1】在图形模式和文本模式下登录Linux系统。 1、开启Linux虚拟机。 答&#xff1a;打开此虚拟机如图所示 2、观察屏幕上显示的启动信息。 3、当系统启动到图形界面时&#xff0c;用普通用户身份登录。 答&#xff1a;如图…...

活动预告 |【Part1】Microsoft Azure 在线技术公开课:基础知识

课程介绍 参加“Azure 在线技术公开课&#xff1a;基础知识”活动&#xff0c;培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动&#xff0c;扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 活…...

vulnhub靶场【Hogwarts】之bellatrix

前言 靶机&#xff1a;hotwarts-dobby&#xff0c;ip地址为192.168.1.69 攻击&#xff1a;kali&#xff0c;ip地址为192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24扫描发现主机 信息收集 使用nmap扫描端…...

移动 APP 设计规范参考

一、界面设计规范 布局原则&#xff1a; 内容优先&#xff1a;以内容为核心进行布局&#xff0c;突出用户需要的信息&#xff0c;简化页面导航&#xff0c;提升屏幕空间利用率.一致性&#xff1a;保持界面元素风格一致&#xff0c;包括颜色、字体、图标等&#xff0c;使用户在…...

HarmonyOS:@Require装饰器:校验构造传参

一、前言 Require是校验Prop、State、Provide、BuilderParam和普通变量(无状态装饰器修饰的变量)是否需要构造传参的一个装饰器。 说明 从API version 11开始对Prop/BuilderParam进行校验。 从API version 11开始&#xff0c;该装饰器支持在元服务中使用。 从API version 12开…...

github提交不上去,网络超时问题解决

问题出现的原因&#xff1a; DNS服务器数据不同步&#xff0c;github的服务器发送迁移&#xff0c;在本地缓存的ip地址现在无效了。 解决方案&#xff1a; 1&#xff09;点击这里&#xff0c;查询github.com最新的ip地址 2.0&#xff09;编辑linux系统地址缓存文件&#x…...

国产数据库OceanBase从入门到放弃教程

1. 介绍 是由蚂蚁集团&#xff08;Ant Group&#xff0c;原蚂蚁金服&#xff09;自主研发的分布式关系型数据库。它旨在解决海量数据存储和高并发访问的问题&#xff0c;特别适合金融级应用场景&#xff0c;如支付宝等对数据一致性、可靠性和性能有极高要求的服务。以下是关于…...

风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;91.4&#xff05;准确识别率&#xff0c;18912张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载&#xff1a; &#xff59;&#xff4f;&#xff4c;&#xff4f; &#xff56;&#…...

Rabbitmq追问2

分析rabbitmq 默认使用姿势是什么 direct fanout还是什么 public void convertAndSend(String exchange, String routingKey, Object object, CorrelationData correlationData) throws AmqpException { this.send(exchange, routingKey, this.convertMessageIfNecessary(obje…...

郑州时空-TMS运输管理系统 GetDataBase 信息泄露漏洞复现

0x01 产品简介 郑州时空-TMS运输管理系统是一款专为物流运输企业设计的综合性管理软件,旨在提高运输效率、降低运输成本,并实现供应链的协同运作。系统基于现代计算机技术和物流管理方法,结合了郑州时空公司的专业经验和技术优势,为物流运输企业提供了一套高效、智能的运输…...

如何使用React,透传各类组件能力/属性?

在23年的时候&#xff0c;我主要使用的框架还是Vue&#xff0c;当时写了一篇“如何二次封装一个Vue3组件库&#xff1f;”的文章&#xff0c;里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后&#xff0c;我发现这种扩展组件能力的方式有一个专门的术语&am…...

汇编点灯练习

要求&#xff1a; 1、轮流将LED1、LED2、LED3及蜂鸣器点亮 2、基于STM32MP157AAA&#xff0c;阅读原理图和STM32MP157芯片手册 3、ARM汇编指令点灯 1、运行效果 汇编点灯 2、通过查询原理图和芯片手册&#xff0c;得到以下结论&#xff1a; 3、汇编源码 .text .global _start…...

数据结构与算法之动态规划: LeetCode 213. 打家劫舍 II (Ts版)

打家劫舍 II https://leetcode.cn/problems/house-robber-ii/description/ 描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的同时&#…...

Git工具

安装教程 详细安装教程 基本命令...

SpringBoot3.3.3+shardingsphere-jdbc5.5.0读写分离、自定义生成主键策略

最近在开发项目搭建框架时&#xff0c;考虑后期支付模块的订单数据量可能会比较大&#xff0c;于是使用现在主流的shardingsphere的读写分离、水平分表来解决后期数据量大影响查询效率的问题。 项目技术栈&#xff1a;jdk17Springboot3.3.3shardingsphere-jdbc5.5.0mybatis-pl…...

开发运维基本功:无需复杂配置快速实现本地Nginx的公网远程访问

文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 现在生活和工作中的各种设备都变得越来越智能&#xff0c;而数据存储的需求也随之剧增。想象一下&#xff1a;你正在外地出差&#xff0c…...

金融租赁系统助力企业转型与市场竞争力提升

内容概要 在现代商业环境中&#xff0c;金融租赁系统不仅是一个简单的工具&#xff0c;而是企业转型的重要推动力。通过优化业务流程&#xff0c;提升自动化水平&#xff0c;它帮助企业在复杂的市场中找到自己的立足之地。想象一下&#xff0c;一个企业在使用传统方法时&#…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...