NVRAM相关

1. Modem NVRAM四个分区

nvdata手机运行过程中,使用(读写)的NVRAM(除了存在protect_f和protect_s中的NVRAM)都是该分区的nvram文件。存储着普通NVRAM数据、 IMEI、barcode、Calibration数据等。对应的modem path是Z:\NVRAM。NVRAM目录下有CALIBRAT、NVD_DATA、NVD_CORE和NVD_IMEI四个目录,后续第三点会对这四个目录进行介绍。

protect_1protect_2 一般我们也称为protect_f和protect_s分区,protect_s是对protect_f中部分NVRAM的复制。主要存储着SIM Lock数据。具有NVRAM_CATEGORY_IMPORTANT_L4属性的NVRAM LID会存在protect_f分区(这个叫A file),如果还具有NVRAM_ATTR_MULTIPLE属性(锁卡LID都有MULTIPLE属性),会存一个B文件到protect_s中。正常情况下protect_f中的A文件和protect_s中的B文件是相同的,因为写的时候都会去写两只nvram文件。

(同时这两个分区的两只文件是互为备份的[即如果A file损坏,可以使用B file的来还原、 B file损坏,使用A file来还原;

 但如果两只文件都被被异常破坏或者删除, nvram将让modem assert).

nvram一般我们也称为binregion分区,是一个备份分区,备份具有NVRAM_CATEGORY_IMPORTANT和NVRAM_CATEGORY_CALIBRAT属性的NVRAM LID,备份的也就是CALIBRAT和NVD_IMEI两个目录,具体有IMEI、 barcode、Calibration数据和4G RF driver参数这些NVRAM。备份可以由META Tool触发 ,ATE校准完会自动触发备份,SN Writer tool写完号后也会自动触发备份。


[1]普通NVRAM是指NVRAM_CATEGORY_USER属性的NVRAM

[2]Android O1开始(包括Android O1)AP这边的路径有变化,Modem这边没有变。参考如下:

Before Android O1(Not Included Android  O1)

After Android O1( Included Android  O1)

After Android P(included Android P)

/data/nvram/md/NVRAM/

/vendor/nvdata/md/NVRAM/

/mnt/vendor/nvdata/md/NVRAM

/protect_f/md/

/vendor/protect_f/md/

/mnt/vendor/protect_f/md/

/protect_s/md/

/vendor/protect_s/md/

/mnt/vendor/protect_s/md/

[3]93Modem开始除了之前的四个目录,多了BACKUP目录。目前该目录下面没有nvram文件,手机运行时也不会使用该目录下的文件,详细可以参考FAQ09435 1.2中的NVRAM_ATTR_ RESERVE_BACKWARD属性。

[4]严格来说,IMPORTANT目录,只有在WR8.W1231.DC.WG.MP上还是存着SIM Lock,从WR8.W1244.DNR.WG.MP开始的Smart Phone版本都将SIM Lock存到protect_fprotect_s中了。

[5]不过从92Modem(92Modem的含义请参考最后[参考]中的第1)开始有将部分4G RF Driver修改为NVRAM_CATEGORY_USER属性,并添加了NVRAM_ATTR_SW_VERNO_RESET属性 (93Modem修改NVRAM_ATTR_SW_VERNO_RESETNVRAM_ATTR_OTA_RESET)


MT67XX_Android_scatter.txt文件记录着各分区的信息,SP Flash Tool下载时,选择的scatter file就是这个文件。如搜索nvdata,protect1,protect2,nvram,可以查看各个分区的起始地址和大小。像分析问题时需要readback出备份binregion分区时,就要去该文件确认起始地址和大小。
 

 2. 升级方式对各个NVRAM分区的影响

Format All+Download

会擦除所有分区,所有NVRAM LID都会用code中的默认值重新生成。全擦后只有触发备份过,binregion中才会有备份内容,否则binregion是空的(Flash默认的全0 or 全f)。

Firmware Upgrade Factory Reset(恢复出厂设置)

只会擦除nvdata分区,开机时AP会将binregion中备份的CALIBRAT和NVD_IMEI两个目录还原到nvdata分区。具体NVRAM LID是IMEI、 barcode、Calibration数据和4G RF driver参数。

protect_f和protect_s分区不会被擦除,所以SIM Lock保持不变。

其他NVRAM LID恢复为code中的默认值。

如果binregion是空的,那么IMEI、 barcode、Calibration数据和4G RF driver参数也会用code中的默认值重新生成。

Download OnlyOTASD upgrade Push modem

不会擦除任何分区。这种升级方式下,如果有修改code中的default值,那么需要将相应NVRAM LID的VERNO+1,才会生效,即将会利用code中的默认值重新生成新文件。

  注意:这里所说的所有分区和任何分区均指Modem NVRAM的四个分区:nvdata分区、 protect_f分区、protect_s分区和binregion分区。

3. NVRAM LID数据结构

 

NVRAM LID table就是由一个个具体NVRAM LID的结构构成。包括9项参数:LID,total_records,size, default_value,category,attr, fileprefix, fileverno,description。

这里以NVRAM_EF_EL1_BAND_INDICATOR_LID为例进行详细介绍,如上图所示。

NVRAM_EF_EL1_BAND_INDICATOR_LID, LID,NVRAM LID枚举名

NVRAM_EF_EL1_BAND_INDICATOR_TOTAL,total_records,当前NVRAM LID的record总个数

NVRAM_EF_EL1_BAND_INDICATOR_SIZE, size,每个record的size

NVRAM_DEFAULT_FUNC(nvram_get_eL1_default_value_to_write),default_value,默认值来源

NVRAM_CATEGORY_CALIBRAT | NVRAM_CATEGORY_FUNC_DEFAULT,category,具有的category属性

NVRAM_ATTR_MULTIPLE,attr,attribute属性

“EL2T”,fileprefix[4+1],文件名前缀,构成文件名前缀,必须四位,且是0000~ZZZZ,且必须整个工程唯一

VER(NVRAM_EF_EL1_BAND_INDICATOR_LID),fileverno[3+1],文件版本号,构成文件名后缀,必须三位,且是000~999,实际对应的是NVRAM_EF_EL1_BAND_INDICATOR_LID_VERNO

description,目前对于Smart Phone平台来说都是NULL,没有使用,是Feature Phone遗留下来的

 

4.NVRAM LIDcategory属性和attribute属性

         NVRAM LID的category属性和attribute属性的含义可以参考FAQ09435。

        下面对NVRAM目录下的CALIBRAT、NVD_DATA、NVD_CORE和NVD_IMEI四个目录进行介绍:

具有NVRAM_CATEGORY_USER属性的NVRAM,会存到/data/nvram/md/NVRAM/NVD_DATA/目录。里面存的是普通NVRAM,2G RF driver NVRAM,3G RF driver NVRAM。(从92Modem开始有将部分4G RF driver NVRAM从CALIBRAT属性修改为USER属性,也就是从CALIBRAT目录移到了NVD_DATA目录)

具有NVRAM_CATEGORY_INTERNAL属性的NVRAM,会存到/data/nvram/md/NVRAM/NVD_CORE/目录。里面只存了NVRAM_EF_SYS_LID这只NVRAM,由于具有NVRAM_ATTR_MULTIPLE属性,该目录下有A,B两只文件。

具有NVRAM_CATEGORY_CALIBRAT属性的NVRAM,会存到/data/nvram/md/NVRAM/CALIBRAT/目录。里面存了barcode,calibration NVRAM,部分4G RF driver NVRAM。

具有NVRAM_CATEGORY_IMPORTANT属性的NVRAM,会存到/data/nvram/md/NVRAM/NVD_IMEI/目录。80/90/91Modem里面只存了NVRAM_EF_IMEI_IMEISV_LID(IMEI)这只NVRAM。 92Modem添加了NVRAM_EF_NVRAM_LOCK_LID(IMEI Lock)这只NVRAM。

具有NVRAM_CATEGORY_IMPORTANT_L4属性的NVRAM,会存到/protect_f/md/目录,如果该NVRAM具有NVRAM_ATTR_MULTIPLE属性(锁卡LID都有MULTIPLE属性),会有相应的B文件存在/protect_s/md/目录。里面大都是存了NVRAM_EF_SML_LID、NVRAM_EF_SIM_LOCK_LID等锁卡相关的LID. 

        Build modem生成的/build/.../nvram_auto_gen目录下的~nvram_lid_information.log和~nvram_lid_size.log文件,可以查看每支NVRAM LID真实的category和attribute。分析nvram问题经常需要提供这两只文件协助分析。

 [一般出现nvram相关问题,CR提供log时,都请默认提供这两只文件,尤其是OTA modem时出现的nvram相关问题,请提供OTA前后modem build生成的这两个文件]

~nvram_lid_information.log包括如下7项信息:

LID:                 LID的枚举值

LID(String):   LID的名字

Filename:      文件名前缀

Verno:            NVRAM LID相应的VERNO号

Description:  目前对于Smart Phone平台来说都是NULL

Category:      具有的CATEGORY属性,参考FAQ09435可以计算得到相应的CATEGORY属性

Attribute:      具有的ATTR属性,参考FAQ09435可以计算得到相应的ATTR属性

 

~nvram_lid_size.log包括如下3项信息:

LID:                LID的枚举值

size:               整个nvram文件大小

LID(String):   LID的名字

5. 修改NVRAM默认值,如何生效

  根据2. 升级方式对各个NVRAM分区的影响:

因为Format All+Download会擦除所有分区,所以修改任何NVRAM的默认值,然后 Format All+Download升级,均可生效。

因为Firmware Upgrade 只会擦除nvdata分区,所以修改普通NVRAM(NVRAM_CATEGORY_USER属性的NVRAM)的默认值,然后Firmware Upgrade升级,可以生效。但是修改具有备份的NVRAM(IMEI、 barcode、Calibration数据和4G RF driver)或者存在protect_f/protect_s分区的SIM Lock的默认值,是不会生效的。如修改备份的4G RF driver NVRAM LID的默认值,Firmware Upgrade升级不生效 :

这是因为备份的4G RF driver NVRAM LID具有NVRAM_CATEGORY_CALIBRAT属性,在binregion中有备份,当Firmware Upgrade升级擦除nvdata分区后,开机后会从binregion中还原回来。

针对这种情况,想要修改默认值生效,Firmware Upgrade升级也是需要将相应的NVRAM LID VERNO+1。

因为Download OnlyOTASD upgrade Push modem不会擦除任何分区,所以如果有修改code中的default值,想升级后生效,那么需要将相应NVRAM LID的VERNO+1,才会生效,这样将会利用code中的默认值重新生成新nvram文件。

原理:在flash上存储的NVRAM 对应的文件名是由文件名前缀,中间连接符和文件名后缀构成。文件名后缀就是NVRAM LID对应的VERNO。那么代码中将对应的NVRAM LID VERNO+1后,去flash上面读写这只文件的时候,就会发现不存在,那么就会用code中的默认值重新生成新文件[1]。

假设修改的是NVRAM_EF_IMS_PROFILE_LID这只NVRAM的默认值,它的文件名前缀MT79,升级前的NVRAM_EF_IMS_PROFILE_LID_VERNO号是000,修改默认值后将NVRAM_EF_IMS_PROFILE_LID_VERNO修改为001,那么Download Only升级前/data/nvram/md/NVRAM/NVD_DATA/目录中就有MT79_000这只文件。升级后,当读写到这只NVRAM的时候,是按MT79_001去NVD_DATA目录找这只文件,发现没有就会用代码中的默认值重新生成新文件MT79_001。

        [1]注意:并不是所有的NVRAM LID都可以通过VERNO+1的方式来升级:

        (1)像锁卡类具有NVRAM_CATEGORY_IMPORTANT_L4 category的NVRAM LID不建议通过VERNO+1方式升级。

                NVRAM_EF_SML_LID(SIM Lock)锁卡相关LID, 在93 modem后, 因默认锁卡LID有FAULT_ASSERT属性,强行升级会导致modem assert.

    所以建议是一旦产品MP(上市)之后,不建议再使用verno+1升级改锁卡相关LID的struct大小等(除非是必须,再找MTK 协助)。

        (2)校准NVRAM LID和Barcode(NVRAM_EF_BARCODE_NUM_LID)和IMEI LID也不能通过VENRO+1的方式升级,否则校准参数/Barcode/IMEI就丢失了,不过一般也不会有这类需求。

        (3)部分RF NVRAM LID也不能通过VERNO+1的方式升级,目前明确的有CA组合和RF support band不行,如有修改必须全擦升级。其他的需要请RF同仁根据具体情况进行具体分析。(91Modem可以参考DCC上面的MT6176 LTE RF Customization NVRAM LID  OTA information (for Customer).pdf)

6. NVRAM默认值和对应VENRO的定义位置

  请参考FAQ19509

7. 如何客制化NVRAM LID

        (1)97 modem请参考DCC上的CS6297-GAA4B-UMD-V1.0EN_Platform_System_Storage_and_Filesystem_NVRAM_User_Manual.docx的第7章

        (2)80/90/91/92Modem请参考DCC上的Modem_NVRAM_to_Customer(Smart_Phone).docx文档的Page16~Page22页。

        (3)93Modem请参考DCC上的CS0021-GAA5A-UMD-V1.1EN_Platform_System_Storage_and_Filesystem_Modem_NVRAM_User_Manual.docx文档的7.1.2章节

8. 如何在AP端读写Modem NVRAM

        AP端去读写Modem NVRAM,可以通过AP端向modem发送AT Command,而modem端需要客制化一条AT Command,同时在command handler中调用接口进行读写nvram。

        步骤如下:

        (1)AP端向Modem透传AT命令,AP端具体做法可以参考FAQ19648【如何发送AT命令】。

        (2)Modem端对AT命令进行客制化,具体可以参考FAQ17997【[AT Command]Smart Phone如何客制化AT command】。

        (3)command handler内部通过调用nvram_external_read_data/nvram_external_write_data来读写。

        kal_bool nvram_external_read_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size);

        kal_bool nvram_external_write_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size);

        注意:从91Modem开始读写IMEI和SIM Lock只能使用nvram_external_secure_read_data/nvram_external_secure_write_data接口,不能使用nvram_external_read_data/nvram_external_write_data。

        nvram_errno_enum nvram_external_secure_read_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size, void* reserved_ptr);

        nvram_errno_enum nvram_external_secure_write_data(nvram_lid_enum LID, kal_uint16 rec_index, kal_uint8 *buffer, kal_uint32 buffer_size, void* reserved_ptr);

9. 检查两个不同modem版本的modem NVRAM是否可以采用OTA/Download Only/Firmware Upgrade升级

  请参考FAQ17640

10. NVRAM SMART OTA feature

1)smart OTA feature 设计目的

当前某个LID 支援verno+1,此时user 修改default value或者修改nvram structure后,对应的user 或者研发人员忘记把对应的LID verno+1导致相应的default value没有生效而引入的smart OTA feature. 即smart OTA 是NVRAM 设计的一层防呆机制, 在user 忘记verno+1时, NVRAM 来防呆弥补,使得LID default value or LID structure change可以继续更新

2)哪些NVRAM LID 支援NVRAM smart OTA?

非NVRAM_CATEGORY_SECUPACK/NVRAM_CATEGORY_CUSTPACK/NVRAM_CATEGORY_FUNC_DEFAULT 的user category LID

3) Feature 原理

每次改deault value后, modem build flow 中的nvram autogen 流程会把符合条件的LID default value对应的checksum 保存到一个file中,
第一次modem 启动后nvram flow会把相关LID的default value or structure的checksum value写入到相应的LID的nvram file header 中
后续每次更新都会将nvram autogen产生的LID default value or structure checksum与nvram file header中的checksum对比,如值有变化,则reset更新

4) feature相关的option 控制(默认都有打开)

__NVRAM_STRUCTURE_CHANGE_RESET__ (structure change option) and
__NVRAM_DEFVAL_CHANGE_RESET__ (default value change option)
makefile 中控制着两个宏的开关feature为NVRAM_OTA_SMART_RESET
NVRAM_OTA_SMART_RESET = TRUE 即为开启(默认状态)
NVRAM_OTA_SMART_RESET = FALSE 为关闭;

Attention: 此feature 是NVRAM 层级的防呆机制, NVRAM升级默认值相关还是推荐使用verno+1!

11. 如何使用NVRAM dump file log来排查一些抓取不到modem log的问题

通常有些场景下,抓取不到mdlog,无法分析modem相关问题
如:刷google镜像后, 抓取不了mdlog,问题无法分析。
因modem init比较早的阶段(比如nvram_init阶段,modem未完成初始化, modem log 未ready),
此时不好分析这段时间的软件行为, 增加了debug查找问题的难度。
这里介绍Gen97(如MT6873/MT6853/MT6885) 和Gen97之前(MT6739/MT6762/MT6765/MT6769) 通过NVRAM trace log debug 方法

1) Gen97平台(打开默认的nvram trace log,然后添加debug log):
Step 1
Connect the device via ADB
Switch to X:\ directory folder via shell command
▪cd /mnt/vendor/protect_f/md/
Create the trace configuration file
▪“rm –rf md_nv_config.txt”
▪“touch md_nv_config.txt”
Set the setting value via the echo command
▪ echo -n 45> md_nv_config.txt
然后重启手机,重新开机后使用adb pull /mnt/vendor/nvdata/md 下的所有文件
此时目录(/mnt/vendor/nvdata/md)下要有nvram_trace_log.log文件, 此log 文件即为debug log file. 里面存储着NVRAM 的debug log
Step 2:
使用NVRAM trace API:
在怀疑的地方添加debug log(如: NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,"your debug log");),
添加好后,重新build并下载modem load, 开机后使用按照上述步骤
adb pull 出对应的file ,到nvram_trace_log.log里面去查找添加的debug log,进而排查问题;
Very Important
本方法只用来临时debug 调试,debug 完毕后, 进入/mnt/vendor/protect_f/md/ 目录下, 删除file(md_nv_config.txt) "rm –rf md_nv_config.txt"

2) Gen97之前的平台NVRAM dump file log添加方法
请参考FAQ21813

[参考]

1.Modem Generation, Modem Branch and Platform 对应关系

 

2.MTK Online DCC中的NVRAM参考学习文档

(1)Modem_NVRAM_to_Customer(Smart_Phone).pptx (For 80/90/91Modem)

(2)Modem_NVRAM_to_Customer(Smart_Phone).docx (For 80/90/91Modem, the same as(1))

(3)Modem_NVRAM_to_Customer(Smart_Phone)_92_Modem.docx (For 92Modem)

(4)CS0021-GAA5A-UMD-V1.1EN_Platform_System_Storage_and_Filesystem_Modem_NVRAM_User_Manual.docx (For 93Modem)

------------------------------------------------------------------------------------------------------------------------------

修改默认值如何生效

1. 首先要了解升级方式对各个NVRAM分区的影响

Format All+Download

会擦除所有分区,所有NVRAM LID都会用code中的默认值重新生成。全擦后只有触发备份过,binregion中才会有备份内容,否则binregion是空的(Flash默认的全0 or 全f)。

Firmware Upgrade Factory Reset(恢复出厂设置)

只会擦除nvdata分区,开机时AP会将binregion中备份的CALIBRAT和NVD_IMEI两个目录还原到nvdata分区。具体NVRAM LID是IMEI、 barcode、Calibration数据和4G RF driver参数。

protect_f和protect_s分区不会被擦除,所以SIM Lock保持不变。

其他NVRAM LID恢复为code中的默认值。

如果binregion是空的,那么IMEI、 barcode、Calibration数据和4G RF driver参数也会用code中的默认值重新生成。

Download OnlyOTASD upgrade Push modem

不会擦除任何分区。这种升级方式下,如果有修改code中的default值,那么需要将相应NVRAM LID的VERNO+1,才会生效,即将会利用code中的默认值重新生成新文件。

  注意1:这里所说的所有分区和任何分区均指Modem NVRAM的四个分区:nvdata分区、 protect_f分区、protect_s分区和binregion分区。

  注意2:NVRAM默认值和对应VENRO的定义位置请参考FAQ19509

2. 修改NVRAM默认值,如何生效

因为Format All+Download会擦除所有分区,所以修改任何NVRAM的默认值,然后 Format All+Download升级,均可生效。

因为Firmware Upgrade 只会擦除nvdata分区,所以修改普通NVRAM(NVRAM_CATEGORY_USER属性的NVRAM)的默认值,然后Firmware Upgrade升级,可以生效。但是修改具有备份的NVRAM(IMEI、 barcode、Calibration数据和4G RF driver)或者存在protect_f/protect_s分区的SIM Lock的默认值,是不会生效的。如修改备份的4G RF driver NVRAM LID的默认值,Firmware Upgrade升级不生效 :

这是因为备份的4G RF driver NVRAM LID具有NVRAM_CATEGORY_CALIBRAT属性,在binregion中有备份,当Firmware Upgrade升级擦除nvdata分区后,开机后会从binregion中还原回来。

针对这种情况,想要修改默认值生效,Firmware Upgrade升级也是需要将相应的NVRAM LID VERNO+1。

因为Download OnlyOTASD upgrade Push modem不会擦除任何分区,所以如果有修改code中的default值,想升级后生效,那么需要将相应NVRAM LID的VERNO+1,才会生效,这样将会利用code中的默认值重新生成新nvram文件。

原理:在flash上存储的NVRAM 对应的文件名是由文件名前缀,中间连接符和文件名后缀构成。文件名后缀就是NVRAM LID对应的VERNO。那么代码中将对应的NVRAM LID VERNO+1后,去flash上面读写这只文件的时候,就会发现不存在,那么就会用code中的默认值重新生成新文件[1]。

假设修改的是NVRAM_EF_IMS_PROFILE_LID这只NVRAM的默认值,它的文件名前缀MT79,升级前的NVRAM_EF_IMS_PROFILE_LID_VERNO号是000,修改默认值后将NVRAM_EF_IMS_PROFILE_LID_VERNO修改为001,那么Download Only升级前/data/nvram/md/NVRAM/NVD_DATA/目录中就有MT79_000这只文件。升级后,当读写到这只NVRAM的时候,是按MT79_001去NVD_DATA目录找这只文件,发现没有就会用代码中的默认值重新生成新文件MT79_001。

        [1]注意:并不是所有的NVRAM LID都可以通过VERNO+1的方式来升级:

        (1)像锁卡类具有NVRAM_CATEGORY_IMPORTANT_L4 category的NVRAM LID不建议通过VERNO+1方式升级。

        NVRAM_EF_SML_LID(SIM Lock)锁卡相关LID, 在93 modem后, 因默认锁卡LID有FAULT_ASSERT属性,强行升级会导致modem assert.

        所以建议是一旦产品MP(上市)之后,不建议再使用verno+1升级改锁卡相关LID的struct大小等(除非是必须,再找MTK 协助)。

        (2)校准NVRAM LID和Barcode(NVRAM_EF_BARCODE_NUM_LID)和IMEI LID也不能通过VENRO+1的方式升级,否则校准参数/Barcode/IMEI就丢失了,不过一般也不会有这类需求。

        (3)部分RF NVRAM LID也不能通过VERNO+1的方式升级,目前明确的有CA组合和RF support band不行,如有修改必须全擦升级。其他的需要请RF同仁根据具体情况进行具体分析。(91Modem可以参考DCC上面的MT6176 LTE RF Customization NVRAM LID  OTA information (for Customer).pdf)

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

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

相关文章

Goby 漏洞发布| Apache OFBiz webtools/control/xmlrpc 远程代码执行漏洞(CVE-2023-49070)

漏洞名称: Apache OFBiz webtools/control/xmlrpc 远程代码执行漏洞(CVE-2023-49070) English Name:Apache OFBiz webtools/control/xmlrpc Remote Code Execution Vulnerability (CVE-2023-49070) CVSS core: 9.8 影响资产数&…

2023新优化应用:RIME-CNN-LSTM-Attention超前24步多变量回归预测算法

程序平台:适用于MATLAB 2023版及以上版本。 霜冰优化算法是2023年发表于SCI、中科院二区Top期刊《Neurocomputing》上的新优化算法,现如今还未有RIME优化算法应用文献哦。RIME主要对霜冰的形成过程进行模拟,将其巧妙地应用于算法搜索领域。 …

外网的maven项目转移到内网操作的步骤

1、新起一个仓库路径testRep,idea 引用的maven里的setting.xml里仓库配置修改成刚才建的路径,目的把需要的jar全部下载到那个文件夹里 2、项目打压缩包,刚才仓库文件夹打压缩包,并复制到内网电脑 3、内网电脑idea引入项目 4、修改…

【离散数学】——期末刷题题库(等价关系与划分)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

Spring Boot HTTP 400 错误的日志信息在哪里查看 ?

HTTP 400 一般来说是入参的某些字段的格式不对 Spring Boot项目启动后默认是不会把相应的日志打印在控制台的 需要在logback.xml里面做相关的配置才会打印出来 具体配置如下 <configuration><appender name"stdout" class"ch.qos.logback.core.Con…

C# OpenVINO 模型信息查看工具

目录 效果 支持模型 项目 代码 下载 C# OpenVINO 模型信息查看工具 效果 支持模型 ONNX format (*.onnx) PDPD (*.pdmodel) TF (*.pb) TFLite (*.tflite) 项目 代码 using Sdcb.OpenVINO; using System; using System.Collections.Generic; using System.Text; using…

数据结构与算法(五)回溯算法(Java)

目录 一、简介1.1 定义1.2 特性1.3 结点知识补充1.4 剪枝函数1.5 使用场景1.6 解空间1.7 实现模板 二、经典示例2.1 0-1 背包问题2.2 N皇后问题 一、简介 1.1 定义 回溯法&#xff08;back tracking&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条…

Linux环境下的MySQL安装

文章目录 前提说明1.卸载内置环境2.检查系统安装包3.卸载这些默认安装包4.获取MySQL官方yum源5.安装MySQLyum源&#xff0c;对比前后yum源6.查看yum源是否生效7.安装MySQL服务8.查看相对应的配置文件9.启动服务10.查看启动服务11.登录方法一12.登录方法二13.登录方法三14.设置开…

两种做法——判断是否是二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/description/?envTypestudy-plan-v2&envIdtop-interview-150 方法一&#xff1a;中序遍历 考虑只有两个节点和一个结点的情况&#xff0c;可以头尾各加一个最大最小值&#xff0c;不用特判了&#xff0c;也可…

谷达冠楠:现在做抖音电商到底怎么样

随着互联网的发展&#xff0c;电商行业也在不断地壮大。而近年来&#xff0c;抖音作为一款短视频社交平台&#xff0c;也逐渐成为了电商的新兴渠道。那么&#xff0c;现在做抖音电商到底怎么样呢? 首先&#xff0c;抖音拥有庞大的用户群体。根据数据显示&#xff0c;抖音的日活…

C++中单引号‘‘和双引号““的区别

操作系统&#xff1a;Windows 10 IDE&#xff1a;CLion 单引号&#xff1a;表示一个字符&#xff0c;例如 a 双引号""&#xff1a;表示一个字符串&#xff0c;例如 "a" 在C中&#xff0c;使用双引号可以方便地创建字符串&#xff0c;而使用单引号可以方便…

Python语言基础知识(一)

文章目录 1、Python内置对象介绍2、标识符与变量3、数据类型—数字4、数据类型—字符串与字节串5、数据类型—列表、元组、字典、集合6、运算符和表达式7、运算符和表达式—算术运算符8、运算符和表达式—关系运算符9.1、运算符和表达式— 成员测试运算符in9.2、运算符和表达式…

领先英伟达的GPU1.6倍性能,AMD发布最强AI芯片Instinct MI300

AMD发布最强AI芯片 Instinct MI300X AI 加速器和 Instinct MI300A 数据中心 APU&#xff0c;声称比 Nvidia 的竞争 GPU 领先 1.6 倍。与 Nvidia 竞争产品相比&#xff0c;在以下几个关键方面展示了显著优势&#xff1a;配置方面 内存容量&#xff1a;MI300X&#xff1a;拥有 1…

Linux---进程管理

本章主要介绍RHEL8中如何管理并查看进程。 了解进程并查看系统中存放的进程了解进程的信号进程优先级设置 进程介绍 在 Windows中打开任务管理器就可以查看到系统中的所有进程&#xff0c;如图下图所示。 这里列出了系统中所有的进程&#xff0c;不过也可以使用命令行工具来…

leetcode刷题:611.有效三角形的个数(双指针实现)

题目地址&#xff1a;有效三角形的个数 解决此题时&#xff0c;首先需要知道的是如何判断三个数字是否能够构成三角形。 我们知道&#xff0c;三角形任意两边之和都大于第三边。所以判断三个数字是否能构成三角形需要进行三次比较&#xff08;最基础的思路&#xff09; 方法一…

高精度加法,减法,乘法,除法(上)(C语言)

前言 加&#xff0c;减&#xff0c;乘&#xff0c;除这些运算我们自然信手捏来&#xff0c;就拿加法来说&#xff0c;我们要用c语言编程算ab的和&#xff0c;只需让sum ab即可&#xff0c;可是这是局限的&#xff0c;我们都知道int的表示的最大值为2147483647&#xff08;32位…

kepler.gl部署在线说明文档

1 概述 1.1 介绍 1、Kepler.gl 是一个强大的开源地理空间分析工具&#xff0c;用于大规模数据集的可视化。它由 Uber 的数据可视化团队开发&#xff0c;并且是基于 Web 技术构建的。Kepler.gl 涉及到以下几个主要技术领域&#xff1a; WebGL: Kepler.gl 通过 WebGL 进行渲染…

WVP-RPO开源项目搭建实践

0.拉取代码 GitHub - 648540858/wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联&#xff0c;支持rtsp/rtmp等视频流转发到国标平台&…

解锁全球潜力:IT外包解决跨国企业海外分支的IT需求

在全球化的浪潮中&#xff0c;跨国企业为了拓展业务辐射面&#xff0c;经常在世界各地设立海外分支。然而&#xff0c;这些分支机构面临着独特的挑战&#xff0c;其中包括解决复杂的IT需求。为了更高效地应对这些挑战&#xff0c;越来越多的企业正在转向IT外包&#xff0c;以便…

sqlserver已经启动了允许远程连接,但局域网内无法访问

sqlserver已经启动了允许远程连接&#xff0c;但局域网内无法访问。 可以确认一下sqlserver browser是不是没有启动。 修改启动模式为自动试一试。