微知-Mellanox网卡如何导出firmware中的config文件以及文件中有些什么?(ini配置文件,8个区)

news2024/12/24 2:32:51

背景

Mellanox网卡早期版本以及Engineer simple的DPU支持导出配置文件,该配置文件就是用来告诉firmware的行为。但不是mlxconfig真正设置的文件(mlxconfig -d xxx -e -q应该就是把这个文件读取出来,并且有3个文件,包括默认的,当前的,下次启动的) 。而是生成fw镜像文件使用的配置。理解这个配置文件的作用是能够更底层的辅助理解高性能网卡底底层实现架构

命令

flint -d 06:00.0 dc

说明:
在这里插入图片描述
在这里插入图片描述

效果:
在这里插入图片描述

实战数据

可以看到分了很多域段,根据格式看是使用INI配置文件格式,并且看里面的 iniprep tool,应该是一个ini prepare的工具,打印包括了[]区分的节[SectionName] ,键值对key=value,以及注释; This is a commen以及另外一种注释方式# This is also a comment
节包括了8个节:

cfg
image_info
mfg_info
device_info
boot_record
fw_boot_config
fw_main_config
hw_boot_config
hw_main_config

可以看到包括了:

  • psid的数据:psid = MT_0000000809,关于PSID是什么参考兄弟篇:https://blog.csdn.net/essencelite/article/details/138429032
  • name:就是型号 MBF2M345A-VENOT_ES_Ax
  • 以及psid的描述:NVIDIA BlueField-2 E-Series Eng. sample DPU; 200GbE single-port QSFP56; PCIe Gen4 x16; Secure Boot Disabled; Crypto Enabled; 16GB on-board DDR; 1GbE OOB management (这就是flint和mlxfw工具读取的数据

其他详细看举例:

fw_boot_config 节

  • 比如nv_config.global.pci.settings.num_pfs = 0x1, pf的数量
  • nv_config.global.emulation_nvme_conf.nvme_emu_enable是否开启nvme的emu

hw_boot_config 节

  • 比如 pcie_cfg.pcie_max_speed_supported = 0xf最大速度
[root@one rshim1]# flint -d 06:00.0 dc
;; Generated automatically by iniprep tool on Sun Feb 04 12:18:03 IST 2024 from ./Bluefield-2_MBF2M345A_1p_200g_eth_crypto_ES.prs;; FW version: 24.40.1000

;; Mellanox Technologies LTD


;;[PS_INFO]
;;Name = MBF2M345A-VENOT_ES_Ax
;;Description = NVIDIA BlueField-2 E-Series Eng. sample DPU; 200GbE single-port QSFP56; PCIe Gen4 x16; Secure Boot Disabled; Crypto Enabled; 16GB on-board DDR; 1GbE OOB management

[image_info]
;;;;; This section contains info which is shared by FW and burning tool

psid = MT_0000000809
name = MBF2M345A-VENOT_ES_Ax
description = NVIDIA BlueField-2 E-Series Eng. sample DPU; 200GbE single-port QSFP56; PCIe Gen4 x16; Secure Boot Disabled; Crypto Enabled; 16GB on-board DDR; 1GbE OOB management
prs_name = Bluefield-2_MBF2M345A_1p_200g_eth_crypto_ES.prs




[mfg_info]
guids.guids.num_allocated = 8
guids.macs.num_allocated  = 8
[device_info]

guids.guids.num_allocated = 8
guids.macs.num_allocated  = 8

[boot_record]
;;;;; 1. Boot record endianes: reserved1 is the fist Byte that should be written on the NVRAM (address 0);2. Each line is protected by parity bit (bit 31) the xor of the 32 read bits should be 1

arm.opn = MBF2M345A-VENOT_ES
arm.tile_cluster_disable = 0x00

[fw_boot_config]
;;;;; boot + iron fw config data
pcie_cfg_data.pci_cfg_space.cfg_hdr.device_id = 41686
pcie_cfg_data.pci_cfg_space.cfg_hdr.subsystem_id = 0x0085
multi_function.mac_for_bmc_required = 0
nv_config.global.pci.settings.num_pfs = 0x1
nv_config.global.pci.capabilities.max_num_pfs = 0x2
nv_config.global.pci.settings.log_vf_uar_bar_size = 0x0
nv_config.global.pci.settings.sriov_en = 1
nv_config.global.pci.settings.total_vfs = 8
nv_config.global.pci.settings.fpp_en = 1
nv_config.port[0].vpi.network_link_type_ib = 0x0
nv_config.port[0].vpi.network_link_type_eth = 0x1
nv_config.port[0].vpi.default_link_type_ib = 0x0
nv_config.port[0].vpi.default_link_type_eth = 0x1
multi_function.num_of_logical_ports = 1
nv_config.global.emulation_nvme_cap.nvme_emu_supported = 1
nv_config.global.emulation_nvme_cap.nvme_emu_max_num_pf = 2
nv_config.global.emulation_nvme_conf.nvme_emu_enable = 0
nv_config.global.emulation_nvme_conf.nvme_emu_num_pf = 1
nv_config.global.emulation_nvme_conf.nvme_emu_vendor_id = 0x15b3
nv_config.global.emulation_nvme_conf.nvme_emu_device_id = 0x6001

[fw_main_config]
management.bf_alarm_temp_thresh  = 0x57
management.bf_relax_temp_thresh = 0x50
;;;;; plastic fw config data
phy_fw_main_config.phy_shomron.port0_width = 2
leds.port_leds_gt_mode = 1
leds.leds_high_low_speed_support = 0
leds.led_control_supported_by_mux = 0
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed1Gb = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed10Gb = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed25Gb = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed40Gb = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed50Gb = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed50Gb_Pam4 = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed100Gb = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed100Gb_Pam4 = 0x1
phy_fw_main_config.phy_shomron.lcl[0].eth_speeds_supported.Speed200Gb = 0x1
host_management.ncsi_ini.num_channels_per_pkg = 1
host_management.ncsi_ini.supported_pkg_id = 0
host_management.ncsi_ini.rmii_en = 1
host_management.ncsi_ini.hw_arbitration_en = 0x1
host_management.ncsi_ini.num_of_bmc = 1
host_management.mctp_ini.smbus_enable = 0x4
host_management.mctp_ini.nic_slave_addr = 0x32
host_management.mctp_ini.nic_eid = 0
host_management.mctp_ini.pci_enable = 0x1
host_management.pldm_ini.pldm_supported_features.platform_event_message = 1
host_management.pldm_ini.pldm_supported_features.firmware_update = 1
host_management.pldm_ini.pldm_supported_features.redfish = 1
host_management.pldm_ini.pldm_sensor_rec_handle_en.rh_adapter_rde_pdr = 1
host_management.pldm_ini.pldm_sensor_rec_handle_en.rh_port_collection_rde_pdr = 1
host_management.pldm_ini.pldm_sensor_rec_handle_en.rh_dev_func_collection_rde_pdr = 1
host_management.pldm_ini.pldm_sensor_rec_handle_en.rh_port_rde_pdr = 1
host_management.pldm_ini.pldm_sensor_rec_handle_en.rh_dev_func_rde_pdr = 1

[hw_boot_config]
;;;;; boot and iron hw and board config data
pcie_cfg.pcie_max_width_supported  = 0x10
pcie_cfg.pcie_max_speed_supported = 0xf
pcie_cfg.pcie_tx_polarity = 0xFFFF
multi_host_en = 0
socket_direct_en = 0
pcie_cfg.receiver_detect_en = 1

;;;;; gpios
;;;;; gpio ARM_PCIE_ERROR
gpios.functions.gpio_func[248].mapping= 523
gpios.functions.gpio_func[248].reverse_polarity= 0
gpios.configurations.gpios[523].gpio_config_en= 1
gpios.configurations.gpios[523].mode= 1
gpios.configurations.gpios[523].pull_up= 0
gpios.configurations.gpios[523].pull_en= 0
gpios.configurations.gpios[523].functional_enable= 0

;;;;; gpio ARM_INT_REQ

gpios.functions.gpio_func[188].mapping= 520
gpios.functions.gpio_func[188].reverse_polarity= 0
gpios.configurations.gpios[520].gpio_config_en= 1
gpios.configurations.gpios[520].mode= 1
gpios.configurations.gpios[520].pull_up= 0
gpios.configurations.gpios[520].pull_en= 0
gpios.configurations.gpios[520].functional_enable= 0

;;;;; gpio ARM_INT_ACK

gpios.functions.gpio_func[189].mapping= 521
gpios.functions.gpio_func[189].reverse_polarity= 0
gpios.configurations.gpios[521].gpio_config_en= 1
gpios.configurations.gpios[521].mode= 1
gpios.configurations.gpios[521].pull_up= 0
gpios.configurations.gpios[521].pull_en= 0
gpios.configurations.gpios[521].functional_enable= 0

;;;;; gpio ARM_BOOT_PROGRESS

gpios.functions.gpio_func[190].mapping= 512
gpios.functions.gpio_func[190].reverse_polarity= 0
gpios.configurations.gpios[512].gpio_config_en= 1
gpios.configurations.gpios[512].mode= 1
gpios.configurations.gpios[512].pull_up= 0
gpios.configurations.gpios[512].pull_en= 0
gpios.configurations.gpios[512].functional_enable= 0
gpios.configurations.gpios[513].gpio_config_en= 1
gpios.configurations.gpios[513].mode= 1
gpios.configurations.gpios[513].pull_up= 0
gpios.configurations.gpios[513].pull_en= 0
gpios.configurations.gpios[513].functional_enable= 0
gpios.configurations.gpios[514].gpio_config_en= 1
gpios.configurations.gpios[514].mode= 1
gpios.configurations.gpios[514].pull_up= 0
gpios.configurations.gpios[514].pull_en= 0
gpios.configurations.gpios[514].functional_enable= 0
gpios.configurations.gpios[515].gpio_config_en= 1
gpios.configurations.gpios[515].mode= 1
gpios.configurations.gpios[515].pull_up= 0
gpios.configurations.gpios[515].pull_en= 0
gpios.configurations.gpios[515].functional_enable= 0
gpios.configurations.gpios[516].gpio_config_en= 1
gpios.configurations.gpios[516].mode= 1
gpios.configurations.gpios[516].pull_up= 0
gpios.configurations.gpios[516].pull_en= 0
gpios.configurations.gpios[516].functional_enable= 0
gpios.configurations.gpios[517].gpio_config_en= 1
gpios.configurations.gpios[517].mode= 1
gpios.configurations.gpios[517].pull_up= 0
gpios.configurations.gpios[517].pull_en= 0
gpios.configurations.gpios[517].functional_enable= 0
gpios.configurations.gpios[518].gpio_config_en= 1
gpios.configurations.gpios[518].mode= 1
gpios.configurations.gpios[518].pull_up= 0
gpios.configurations.gpios[518].pull_en= 0
gpios.configurations.gpios[518].functional_enable= 0
gpios.configurations.gpios[519].gpio_config_en= 1
gpios.configurations.gpios[519].mode= 1
gpios.configurations.gpios[519].pull_up= 0
gpios.configurations.gpios[519].pull_en= 0
gpios.configurations.gpios[519].functional_enable= 0

;;;;; gpio ARM_SHDN_REQ
gpios.functions.gpio_func[208].mapping= 522
gpios.functions.gpio_func[208].reverse_polarity= 0
gpios.configurations.gpios[522].gpio_config_en= 1
gpios.configurations.gpios[522].mode= 1
gpios.configurations.gpios[522].pull_up= 0
gpios.configurations.gpios[522].pull_en= 0
gpios.configurations.gpios[522].functional_enable= 0

;;;;; gpio ARM_THERMAL_STATE
gpios.functions.gpio_func[245].mapping= 532
gpios.functions.gpio_func[245].reverse_polarity= 0
gpios.configurations.gpios[532].gpio_config_en= 1
gpios.configurations.gpios[532].mode= 1
gpios.configurations.gpios[532].def_val= 1
gpios.configurations.gpios[532].pull_up= 0
gpios.configurations.gpios[532].pull_en= 0
gpios.configurations.gpios[532].functional_enable= 0

;;;;; gpio ARM_THERMAL_STATE_VALID
gpios.functions.gpio_func[246].mapping= 535
gpios.functions.gpio_func[246].reverse_polarity= 0
gpios.configurations.gpios[535].gpio_config_en= 1
gpios.configurations.gpios[535].mode= 1
gpios.configurations.gpios[535].def_val= 0
gpios.configurations.gpios[535].pull_up= 0
gpios.configurations.gpios[535].pull_en= 0
gpios.configurations.gpios[535].functional_enable= 0

;;;;; gpio PRSNT
gpios.functions.gpio_func[1].mapping= 38
gpios.functions.gpio_func[1].reverse_polarity= 1
gpios.configurations.gpios[38].gpio_config_en= 1
gpios.configurations.gpios[38].mode= 0
gpios.configurations.gpios[38].pull_up= 1
gpios.configurations.gpios[38].pull_en= 1
gpios.configurations.gpios[38].functional_enable= 0

;;;;; gpio INT
gpios.functions.gpio_func[2].mapping= 21
gpios.functions.gpio_func[2].reverse_polarity= 1
gpios.configurations.gpios[21].gpio_config_en= 1
gpios.configurations.gpios[21].mode= 0
gpios.configurations.gpios[21].pull_up= 1
gpios.configurations.gpios[21].pull_en= 1
gpios.configurations.gpios[21].functional_enable= 0

;;;;; gpio RESET
gpios.functions.gpio_func[3].mapping= 33
gpios.functions.gpio_func[3].reverse_polarity= 1
gpios.configurations.gpios[33].gpio_config_en= 1
gpios.configurations.gpios[33].mode= 1
gpios.configurations.gpios[33].def_val= 0
gpios.configurations.gpios[33].pull_up= 1
gpios.configurations.gpios[33].pull_en= 1
gpios.configurations.gpios[33].functional_enable= 0

;;;;; gpio FAN_PWM_CTRL
gpios.functions.gpio_func[20].mapping= 42
gpios.functions.gpio_func[20].reverse_polarity= 0
gpios.configurations.gpios[42].gpio_config_en= 1
gpios.configurations.gpios[42].mode= 1
gpios.configurations.gpios[42].def_val= 0
gpios.configurations.gpios[42].pull_up= 0
gpios.configurations.gpios[42].pull_en= 1
gpios.configurations.gpios[42].functional_enable= 2

;;;;; gpio PWR_EN_PORT0
gpios.functions.gpio_func[26].mapping= 41
gpios.functions.gpio_func[26].reverse_polarity= 0
gpios.configurations.gpios[41].gpio_config_en= 1
gpios.configurations.gpios[41].mode= 1
gpios.configurations.gpios[41].def_val= 0
gpios.configurations.gpios[41].pull_up= 0
gpios.configurations.gpios[41].pull_en= 1
gpios.configurations.gpios[41].functional_enable= 0

;;;;; gpio PHY_LED_PORT0
gpios.functions.gpio_func[32].mapping= 0
gpios.functions.gpio_func[32].reverse_polarity= 1
gpios.configurations.gpios[0].gpio_config_en= 1
gpios.configurations.gpios[0].mode= 2
gpios.configurations.gpios[0].def_val= 1
gpios.configurations.gpios[0].pull_up= 1
gpios.configurations.gpios[0].pull_en= 1
gpios.configurations.gpios[0].functional_enable= 0

;;;;; gpio LOGIC_LED_PORT0
gpios.functions.gpio_func[34].mapping= 1
gpios.functions.gpio_func[34].reverse_polarity= 1
gpios.configurations.gpios[1].gpio_config_en= 1
gpios.configurations.gpios[1].mode= 2
gpios.configurations.gpios[1].def_val= 1
gpios.configurations.gpios[1].pull_up= 1
gpios.configurations.gpios[1].pull_en= 1
gpios.configurations.gpios[1].functional_enable= 0

;;;;; gpio WAKE0
gpios.functions.gpio_func[37].mapping= 13
gpios.functions.gpio_func[37].reverse_polarity= 1
gpios.configurations.gpios[13].gpio_config_en= 1
gpios.configurations.gpios[13].mode= 1
gpios.configurations.gpios[13].def_val= 1
gpios.configurations.gpios[13].pull_up= 1
gpios.configurations.gpios[13].pull_en= 1
gpios.configurations.gpios[13].functional_enable= 0

;;;;; gpio SOCKET_DIRECT_MULTI-HOST_STRAPPING
gpios.functions.gpio_func[55].mapping= 37
gpios.functions.gpio_func[55].reverse_polarity= 1

;;;;; gpio PERST0_ON_ASIC
gpios.functions.gpio_func[86].mapping= 36
gpios.functions.gpio_func[86].reverse_polarity= 1
gpios.configurations.gpios[36].gpio_config_en= 1
gpios.configurations.gpios[36].mode= 0
gpios.configurations.gpios[36].pull_up= 0
gpios.configurations.gpios[36].pull_en= 1

;;;;; gpio FAN_TACHO
gpios.functions.gpio_func[100].mapping= 43

;;;;; gpio LOW_PWR_PORT0
gpios.functions.gpio_func[126].mapping= 32

;;;;; gpio PWR_GOOD_P0
gpios.functions.gpio_func[135].mapping= 40
gpios.functions.gpio_func[135].reverse_polarity= 0
gpios.configurations.gpios[40].gpio_config_en= 1
gpios.configurations.gpios[40].mode= 0
gpios.configurations.gpios[40].pull_up= 1
gpios.configurations.gpios[40].pull_en= 1
gpios.configurations.gpios[40].functional_enable= 0

[hw_main_config]
;;;;; plastic hw and board config data
boards_management.board_power_consumption_1p = 31800

;;;;; modules

;;;;; module 0
module.num[0].label_port= 1
module.num[0].type= 1
module.num[0].m2l.tx.lane[0].serdes= 7
module.num[0].m2l.rx.lane[0].serdes= 4
module.num[0].m2l.tx.lane[0].polarity= 1
module.num[0].m2l.rx.lane[0].polarity= 0
module.num[0].m2l.rx.lane[0].local_lane = 0
module.num[0].m2l.tx.lane[0].local_lane = 0
module.num[0].m2l.rx.lane[0].local_port = 0
module.num[0].m2l.tx.lane[0].local_port = 0
module.num[0].m2l.tx.lane[1].serdes= 6
module.num[0].m2l.rx.lane[1].serdes= 5
module.num[0].m2l.tx.lane[1].polarity= 0
module.num[0].m2l.rx.lane[1].polarity= 1
module.num[0].m2l.rx.lane[1].local_lane = 1
module.num[0].m2l.tx.lane[1].local_lane = 1
module.num[0].m2l.rx.lane[1].local_port = 0
module.num[0].m2l.tx.lane[1].local_port = 0
module.num[0].m2l.tx.lane[2].serdes= 5
module.num[0].m2l.rx.lane[2].serdes= 6
module.num[0].m2l.tx.lane[2].polarity= 0
module.num[0].m2l.rx.lane[2].polarity= 1
module.num[0].m2l.rx.lane[2].local_lane = 2
module.num[0].m2l.tx.lane[2].local_lane = 2
module.num[0].m2l.rx.lane[2].local_port = 0
module.num[0].m2l.tx.lane[2].local_port = 0
module.num[0].m2l.tx.lane[3].serdes= 4
module.num[0].m2l.rx.lane[3].serdes= 7
module.num[0].m2l.tx.lane[3].polarity= 1
module.num[0].m2l.rx.lane[3].polarity= 0
module.num[0].m2l.rx.lane[3].local_lane = 3
module.num[0].m2l.tx.lane[3].local_lane = 3
module.num[0].m2l.rx.lane[3].local_port = 0
module.num[0].m2l.tx.lane[3].local_port = 0
module.num[0].smbus_slv_indx= 1
module.num[0].module_power_level_supported = 7

;;;;; I2C Devices

;;;;; QSFP module 1
i2c_devices.i2c_device[1].slave_addr= 0x50
i2c_devices.i2c_device[1].gw_idx= 1
i2c_devices.i2c_device[1].type= 4

;;;;; VRD
i2c_devices.i2c_device[4].slave_addr= 0x69
i2c_devices.i2c_device[4].gw_idx= 4

;;;;; Viper I2C slave
i2c_devices.i2c_device[5].slave_addr= 0x48
i2c_devices.i2c_device[5].gw_idx= 0

;;;;; SMBUS(BMC)
i2c_devices.i2c_device[10].gw_idx= 2
i2c_devices.i2c_device[10].type= 12
i2c_devices.i2c_device[10].pec_en= 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

攻防世界2

forgot 发现是32位文件 fgets(s, 32, stdin)限制读入32位字符,无法利用 __isoc99_scanf("%s", v2) 典型的栈溢出 发现cat flag 覆盖v2-v3,覆盖为cat flag的函数地址 exp: from pwn import * context(oslinux,archamd64,log_lev…

芋道快速开发平台学习笔记

1.接口文档配置 基础知识:SpringDoc注解的使用,它是基于OpenAPI 3和Swagger 3的现代化解决方案,相较于旧版的Swagger2即SpringFox,SpringDoc提供了更简洁、更直观的注解方式。 详见springboot集成springdoc-openapi(模拟前端请求)_springdoc-openapi-ui-CSDN博客 doc文档配置…

c++面向对象三大特性——多态详解与虚函数,虚函数底层

目录 前言: 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1多态的构成条件 2.2 虚函数 2.3虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 3.2 接口继承和实现继承 4.多态的原理 4.1虚函数表 …

7.1-I2C的中断

I2C的中断与DMA 回顾 HAL_I2C_MASTER_Transmit(&hi2c1,ADRESS,PDate,Size,Time);HAL_I2C_MASTER_Receive(&hi2c1,ADRESS,PDate,Size,Time);通信具体过程如下: 在I2C的轮询模式中 发送时:CPU将以主机0x70 发送 从机 ACK 回复 主机0xAC发送 A…

⽂件的操作

1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化…

深圳大学-Java程序设计-必实验2 类的高级应用

实验目的与要求: 实验目的:熟悉面向对象编程中类的编写。 实验要求: (1).请自行选择2023年成都大运会或2023杭州亚运会。大型运动会通常包括众多比赛项目。请通过分析,抽象它们所共有的性质,定义一个关于比赛项目的抽…

点评项目-6-缓存更新策略、缓存穿透、雪崩

缓存更新策略 使用 redis 缓存记录的信息,有可能在数据库被信息被修改导致信息不一致,使用缓存更新来解决这个问题 缓存更新策略主要有三种: 1.内存淘汰(redis默认开启) 2.超时剔除(给key添加TTL时间) 3.主动更新(编写业务逻辑) 主动更新策…

网络通信与并发编程(一)网络通信、osi五层模型、tcp协议的三次握手与四次挥手

网络通信、osi五层模型、tcp协议的三次握手与四次挥手 文章目录 网络通信、osi五层模型、tcp协议的三次握手与四次挥手一、网络通信二、osi五层模型1.物理层2.数据链路层3.网络层4.传输层5.应用层 三、tcp协议的三次握手与四次挥手 一、网络通信 网络通信是指在网络中的两个或…

Java ==> 数组(入门)

文章目录 前言一、一维数组1.入门操作2.何为null?3.数组可以作为函数的参数4.数组可以作为函数的返回值 二、二维数组1.基础操作2.不规则的二维数组 总结 前言 在Java语言当中,数组是一种基本的数据结构,它存储了固定大小的同类型元素的集合…

告别卡顿!五款Windows录屏工具,让每一帧都清晰流畅

小伙伴们,是不是在寻找一款好用、实用的Windows录屏工具呢?别担心,这次我给大家带来了一款热门录屏工具的详细评测和使用感受,包括福昕录屏、转转录屏、爱拍录屏、OBS录屏和EV录屏。快来看看哪款最适合你吧! 一、福昕录…

反射的学习

1、什么是反射 反射允许对封装类的字段,方法和构造函数的信息进行编程访问。 也就是: 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 2、获取class对象 获取一个类的字节码文件对象: 方式1:Class.…

linux 环境运行 jenkins.war包,有可能会出现字体问题,jdk版本:11 jenkins 版本:2.420

jenkins的目录: /usr/jenkins 启动命令 java -Djava.awt.headlesstrue sudo timedatectl set-timezone Asia/Shanghai-Xmx1024m -jar jenkins.war --httpPort8090 任意目录启动: nohup java -Djava.awt.headlesstrue -Xms1024m -Xmx1024m -jar /usr/j…

基于opencv答题卡识别判卷

我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色:深度实…

Excel使用技巧:数据-》分列:处理log数据,把有用的信息提取出来;查找Ctrl+F,替换Ctrl+H;通配符

Excel的正确用法: Excel是个数据库,不要随意合并单元格。 数据输入的时候一定要按照行列输入,中间不要留空,不然就没有关联。 数据-》分列:处理log数据,把有用的信息提取出来。 按照向导一步一步操作。…

D36【python 接口自动化学习】- python基础之函数

day36 函数的定义 学习日期:20241013 学习目标:输入输出与文件操作﹣-49 函数定义:如何优雅地反复引用同一段代码? 学习笔记: 函数的用途 定义函数 调用函数 # 定义函数 def foo():print(foo)print(foo …

数据传送指令

文章目录 MOVXCHGPUSH和POPIN和OUTXLATLEA LDS LESLEALDSLES LAHF SAHFPUSHF POPF总结 MOV MOV dst, src ; dst <-- src可以进行8位或16位数据的传送源操作数可为立即数、寄存器、存储器操作数目的操作数不可为立即数&#xff0c;CS、IP寄存器两操作数必有一个寄…

Hi3244 应用指导

Hi3244 是一款DIP8封装高性能、多模式工作的原边控制功率开关。Hi3244内高精度的恒流、恒压控制机制结合完备的保护功能&#xff0c;使其适用于小功率离线式电源应用中。在恒压输出模式中&#xff0c;Hi3244 采用多模式工作方式&#xff0c;即调幅控制&#xff08;AM&#xff0…

LLM - 配置 ModelScope SWIFT 环境与 Qwen2-VL 模型推理 教程 (1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142827217 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 SWIFT …

AI 工具大比拼:ChatGPT 与豆包的魅力与未来展望

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

C++的类和动态内存分配(深拷贝与浅拷贝)并实现自己的string类

首先&#xff0c;我们先写一个并不完美的类&#xff1a; #include<iostream> #include<cstring> using namespace std;class Mystring{private:char *p;int len;static int num;friend ostream& operator<<(ostream& os, const Mystring& c);pu…