u-boot(nvt_ns02302)

u-boot(nvt_ns02302)固件更新解析

nvt_fw_update

* firm_upd_firm,USB ethernet UART烧写?

* flash启动,不升级。

* 接TF卡,loader中检查固件,并设置LDCF_UPDATE_FW标志?

TF

FW.bin

firm_upd_firm

LdCtrl2

存在

0

0x1 LDCF_UPDATE_FW

不存在

0

0x0

不接

0

0x8 LDCF_BOOT_FLASH

FW_UPDATE

board/novatek/nvt-ns02302-a64/ns02302evb.c

CONFIG_NVT_IVOT_SOC_FW_UPDATE_SUPPORT=y

BOOT_FUNC

arch/arm/include/asm/nvt-common/nvt_common.h

116 /*Bininfo boot info. */
117 #define COMM_UBOOT_BOOT_FUNC_BOOT_UPDFIRM   1
118 #define COMM_UBOOT_BOOT_FUNC_BOOT_UPD_FRM_USB   2
119 #define COMM_UBOOT_BOOT_FUNC_BOOT_UPD_FRM_ETH   3
120 #define COMM_UBOOT_BOOT_FUNC_BOOT_FORMAT_ROOTFS 4
121 #define COMM_UBOOT_BOOT_FUNC_BOOT_RECOVERY_SYS  5
122 #define COMM_UBOOT_BOOT_FUNC_BOOT_REASON_MASK   0xff << 0
123 #define COMM_UBOOT_BOOT_FUNC_BOOT_DONE      1 << 8
124 #define COMM_UBOOT_BOOT_FUNC_BOOT_NG        2 << 8
125 #define COMM_UBOOT_BOOT_FUNC_BOOT_DONE_MASK 0xff << 8
126 #define COMM_UBOOT_BOOT_FUNC_LOAD_DSP_MASK   0xff << 16
127 #define COMM_UBOOT_BOOT_FUNC_LOAD_DSP_DONE      1 << 16
128 #define COMM_UBOOT_BOOT_FUNC_LOAD_DSP_NG        2 << 16

Include/modelext/shm_info.h

 loader中BOOT_REASON定义。

 79 //BOOT_REASON
 80 #define BOOT_REASON_NORMAL   0 // normal or from sd
 81 #define BOOT_REASON_FWUPDFW  1 // Firmware update Firmware
 82 #define BOOT_REASON_FROM_USB 2 // Update from USB
 83 #define BOOT_REASON_FROM_ETH 3 // Update from ethernet
 84 #define BOOT_REASON_FORMAT_ROOTFS 4 // Format rootfs because rootfs broken is detected
 85 #define BOOT_REASON_RECOVERY_SYS    5 // System recovery from eMMC
 86 #define BOOT_REASON_FROM_UART 6 // Update from uart

LibExt/LIBExt_src/Ctrl_Flow/bl_func.c 

只搜索到BOOT_REASON_FROM_UART、BOOT_REASON_FROM_USB、BOOT_REASON_NORMAL、BOOT_REASON_FROM_ETH。

misc_init_r

nvt_handle_fw_auto

根据boot_reason进行不同处理:USB、ETH烧写,TF卡启动、FORMAT_ROOTFS、RECOVERY_SYS、TF卡升级(flash或eMMC启动)。

358 #ifdef CONFIG_NVT_IVOT_SOC_FW_UPDATE_SUPPORT
359 static int nvt_handle_fw_auto(void)
360 {
361     int ret = 0;
362     unsigned long boot_reason = nvt_readl((ulong)nvt_shminfo_comm_uboot_boot_func) & COMM_UBOOT_BOOT_FUNC_BOOT_REASON_MASK;
363
364     if ((boot_reason == COMM_UBOOT_BOOT_FUNC_BOOT_UPD_FRM_USB) || \
365                 (boot_reason == COMM_UBOOT_BOOT_FUNC_BOOT_UPD_FRM_ETH)){
366         // Update by USB/ETH: firmware will be loaded by loader.
367         ret = nvt_handle_update_fw_by_usb_eth();
368         if (ret < 0)
369             return ret;
370     } else if (nvt_detect_fw_tbin()) {
371         ret = nvt_handle_fw_tbin();
372         if (ret < 0)
373             return ret;
374     } else if (boot_reason == COMM_UBOOT_BOOT_FUNC_BOOT_FORMAT_ROOTFS){
375         printf("%s: COMM_UBOOT_BOOT_FUNC_BOOT_FORMAT_ROOTFS is not supported\n", __func__);
376         return -1;
377     } else if (boot_reason == COMM_UBOOT_BOOT_FUNC_BOOT_RECOVERY_SYS){
378         // Recovery system if loader send event to do system recovery. (EMMC boot only)
379         ret = nvt_handle_recovery_sys();
380         if (ret < 0)
381             return ret;
382     } else {
383         ret = nvt_handle_fw_abin();
384         if (ret < 0)
385             return ret;
386     }
387
388     return 0;
389 }
390 #endif

nvt_handle_update_fw_by_usb_eth

USB、ETH烧写,nvt_fw_update(true),loader已经把固件加载到内存。

nvt_detect_fw_tbin

从RAM、SD卡启动、异常情况,从SD卡加载xxxT.bin固件运行。

* T.bin Boot from Ram,!="LD_NVT",Boot from SD card

* A.bin Boot from flash or emmc

163 int nvt_detect_fw_tbin(void)
164 {
165     SHMINFO *p_shminfo;
166 #ifdef CONFIG_NVT_IVOT_SOC_BOOT_FROM_RAM
167     nvt_dbg(IND, "Boot from Ram\n");
168     return 1;
169 #endif
170
171     p_shminfo = (SHMINFO *)nvt_memory_cfg[MEMTYPE_SHMEM].addr;
172     if (strncmp(p_shminfo->boot.LdInfo_1, "LD_NVT", 6) != 0) {
173         return -1;
174     } else {
175         if (p_shminfo->boot.LdCtrl2 & LDCF_BOOT_CARD) {
176             /* T.bin */
177             nvt_dbg(IND, "Boot from SD card\n");
178             return 1;
179         } else {
180             /* A.bin */
181             nvt_dbg(IND, "Boot from flash or emmc\n");
182             return 0;
183         }
184     }
185 }

 ns02302_ldr/Include/modelext/shm_info.h

 45 /**
 46      Loader information
 47
 48      MUST 28 WORDS
 49 */
 50 typedef struct _BOOTINFO {
 51     char LdInfo_1[16];  ///< LD-NAME(16) ------ w by Ld
 52     UINT32 LdCtrl;      ///< Fw flag (4) ----------- r by Ld
 53     ///<        BIT 0.enable part-load (0=full load,1=part load)
 54     UINT32 LdCtrl2;     ///< Ld flag (4) ----------- w by Ld
 55     ///<        BIT 0.UPDATE_FW (0=no,1=yes)
 56     ///<        BIT 1.UPDATE_LOADER (0=no,1=yes)
 57     ///<        BIT 2.BOOT_CARD (0=no,1=yes)
 58     ///<        BIT 3.BOOT_FLASH (0=no,1=yes)
 59     ///<        BIT 4.UPDATE_CAL (0=no,1=yes)
 60     ///<        BIT 8.UPDATE_FW_DONE (0=no,1=yes)
 61     //<         BIT 9.BOOT FROM S3 STATE (0=no,1=yes)
 62     UINT32 LdLoadSize;  ///< Ld load size (4) ------ w by Ld (NOTE: this value must be block size align)
 63     UINT32 LdLoadTime;  ///< Ld exec time(us) (4) -- w by Ld
 64     UINT32 LdResvSize;  ///< Ld size (by bytes, reserved size in partition) (4) ------ w by Ld
 65     UINT32 FWResvSize;  ///< FW reserved size (4) ------ w by Ld
 66     UINT16 LdPackage;   ///< IC package expected by Ld (0xFF: ES, 0: 660, 3: 663, 5: 665, etc...)
 67     UINT16 LdStorage;   ///< Internal storage expected by Ld (0: unkown, 1: nand, 2: spi nand, 3: spi nor)
 68     UINT32 fdt_addr;
 69     UINT32 Resv[16];     ///< (4*5) ------------ reserved for project Ld
 70 } BOOTINFO;

nvt_handle_fw_tbin

TF卡读取固件(NVT_BIN_NAME_TYPE_RUNFW)运行?

board/novatek/nvt-ns02302-a64/ns02302evb.c

258 #ifdef CONFIG_NVT_IVOT_SOC_FW_UPDATE_SUPPORT
259 static int nvt_handle_fw_tbin(void)
260 {
261     int ret = 0;
262     char cmdline[1024] = {0};
263     char buf[1024] = {0};
264
265     ret = nvt_fw_load_tbin();
266     if (ret < 0) {
267         switch (ret) {
268         case ERR_NVT_UPDATE_OPENFAILED:
269             printf("Open SD fail:%s No SD device? (%s) %s\r\n", ANSI_COLOR_YELLOW, get_nvt_bin_name(NVT_BIN_NAME_TYPE_RUNFW), ANSI_COLOR_RESET);
270             break;
271         case ERR_NVT_UPDATE_NO_NEED:
272         case ERR_NVT_UPDATE_READ_FAILED:
273             printf("%sRead SD fail (%s) %s\r\n", ANSI_COLOR_RED, get_nvt_bin_name(NVT_BIN_NAME_TYPE_RUNFW), ANSI_COLOR_RESET);
274             return -1;
275             break;
276         default:
277             break;
278         }
279     } else
280         printf("%sLoad successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET);
281
282     ret = nvt_fdt_init(false);
283     if (ret < 0) {
284         printf("modelext init fail\n");
285         return ret;
286     }
287
288     /*
289      * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting
290      */
291     sprintf(buf,"%s ",env_get("bootargs"));
292     strcat(cmdline, buf);
293     ret = nvt_part_config((char *)cmdline, NULL);
294     if (ret < 0)
295         return ret;
296
297     env_set("bootargs",cmdline);
298
299     return 0;
300 }
301 #endif
nvt_fw_load_tbin

board/novatek/common/nvt_ivot_fw_update_utils.c 

135 int nvt_fw_load_tbin(void)
136 {
137     loff_t size = 0;
138     int ret = 0;
139
140     if (nvt_fs_set_blk_dev())
141         return ERR_NVT_UPDATE_OPENFAILED;
142     else {
143         if (!fs_exists(get_nvt_bin_name(NVT_BIN_NAME_TYPE_RUNFW))) {
144             return ERR_NVT_UPDATE_NO_NEED;
145         }
146     }
147
148     if (nvt_fs_set_blk_dev())
149         return ERR_NVT_UPDATE_OPENFAILED;
150     else {
151         ret = fs_read(get_nvt_bin_name(NVT_BIN_NAME_TYPE_RUNFW), (ulong)nvt_memory_cfg[MEMTYPE_ALL_IN_ONE].addr, 0, 0, &size);
152         if (size <= 0 || ret < 0) {
153             nvt_dbg(ERR, "Read %s at 0x%lx failed ret=%lld\n", get_nvt_bin_name(NVT_BIN_NAME_TYPE_RUNFW), nvt_memory_cfg[MEMTYPE_ALL_IN_ONE].addr, si    ze);
154             return ERR_NVT_UPDATE_READ_FAILED;
155         } else {
156             nvt_dbg(IND, "Read %s at 0x%lx successfully, size=%lld\n", get_nvt_bin_name(NVT_BIN_NAME_TYPE_RUNFW), nvt_memory_cfg[MEMTYPE_ALL_IN_ONE].    addr, size);
157         }
158     }
159
160     return 0;
161 }
 get_nvt_bin_name
169 typedef enum
170 {
171     NVT_BIN_NAME_TYPE_FW = 1,
172     NVT_BIN_NAME_TYPE_RUNFW,
173     NVT_BIN_NAME_TYPE_RECOVERY_FW,
174     NVT_BIN_NAME_TYPE_MODELEXT,
175 } NVT_BIN_NAME_TYPE;

从设备树/nvt_info节点获取BIN_NAME属性的值作为前缀,不同类型组成不同的名字。

TYPEname
FWxxxxxxxx.bin
RUNFWxxxxxxxT.binSD卡启动
RECOVERY_FWxxxxxxxR.bin
MODELEXTxxxxxxxx.fdt.bin设备树

nvt-info.dtsi

  5 / {
  6     nvt_info {                      /* Get from ModelConfig.txt */
  7         BIN_NAME = "FW98539A";
  8         BIN_NAME_T = "FW98539T";
354 /*
355  * get from bin info.
356  * select:
357  *      0: FW_NAME
358  *      1: RUNFW_NAME
359  *      2: MODELEXT_NAME
360  */
361 char *get_nvt_bin_name(NVT_BIN_NAME_TYPE type)
362 {
363     int  nodeoffset, len = 0;
364     const void *nodep;      /* property node pointer */
365
366     nodeoffset = fdt_path_offset((const void*)nvt_fdt_buffer, "/nvt_info");
367
368     if (nodeoffset < 0) {
369         printf("failed to fdt_path_offset() for /nvt_info, er = %d\n", nodeoffset);
370         return NULL;
371     }
372
373     nodep = fdt_getprop((const void *)nvt_fdt_buffer, nodeoffset, "BIN_NAME", &len);
374     // check before calling strcpy
375     if (nodep == NULL) {
376         return NULL;
377     }
378
379     if (nvt_bin_name == NULL) {
380         nvt_bin_name = calloc(sizeof(char),15);
381         if (!nvt_bin_name) {
382             printf( "%s: allocation failure \n", __FUNCTION__);
383             return NULL;
384         }
385         strcpy(nvt_bin_name, nodep);
386         strcat(nvt_bin_name, ".bin");
387     }
388
389     if ( nvt_bin_name_t == NULL) {
390         nvt_bin_name_t = calloc(sizeof(char),15);
391         if (!nvt_bin_name_t) {
392             printf( "%s: allocation failure \n", __FUNCTION__);
393             free(nvt_bin_name);
394             return NULL;
395         }
396         strcpy(nvt_bin_name_t, nodep);
397         nvt_bin_name_t[strlen(nvt_bin_name_t) - 1] = '\0';
398         strcat(nvt_bin_name_t, "T.bin");
399     }
400
401     if ( nvt_bin_name_r == NULL) {
402         nvt_bin_name_r = calloc(sizeof(char),15);
403         if (!nvt_bin_name_r) {
404             printf( "%s: allocation failure \n", __FUNCTION__);
405             free(nvt_bin_name);
406             free(nvt_bin_name_t);
407             return NULL;
408         }
409         strcpy(nvt_bin_name_r, nodep);
410         nvt_bin_name_r[strlen(nvt_bin_name_r) - 1] = '\0';
411         strcat(nvt_bin_name_r, "R.bin");
412     }
413
414     if ( nvt_bin_name_fdt == NULL) {
415         nvt_bin_name_fdt = calloc(sizeof(char),15);
416         if (!nvt_bin_name_fdt) {
417             printf( "%s: allocation failure \n", __FUNCTION__);
418             free(nvt_bin_name);
419             free(nvt_bin_name_t);
420             free(nvt_bin_name_r);
421             return NULL;
422         }
423         strcpy(nvt_bin_name_fdt, nodep);
424         strcat(nvt_bin_name_fdt, ".fdt.bin");
425     }
426
427     if (type == NVT_BIN_NAME_TYPE_FW) {
428         return nvt_bin_name;
429     } else if (type == NVT_BIN_NAME_TYPE_RUNFW) {
430         return nvt_bin_name_t;
431     } else if (type == NVT_BIN_NAME_TYPE_RECOVERY_FW) {
432         return nvt_bin_name_r;
433     } else {
434         return nvt_bin_name_fdt;
435     }
436 }

nvt_handle_recovery_sys

nvt_process_sys_recovery从eMMC第3个分区(FAT文件系统)读取固件进行升级。

nvt_handle_fw_abin

TF卡升级nvt_fw_update(false),从TF卡(FAT文件系统)加载固件。

nvt_fw_update

nvt_fs_set_blk_dev

先尝试TF卡第一个分区FAT文件系统,再尝试TF卡不带分区FAT文件系统。

461 int nvt_fs_set_blk_dev(void)
462 {
463     #if 0
464     if (fs_set_blk_dev("mmc", "0:1", FS_TYPE_FAT))
465         if (fs_set_blk_dev("mmc", "0:1", FS_TYPE_EXFAT))
466             if (fs_set_blk_dev("mmc", "0:0", FS_TYPE_FAT))
467                 if (fs_set_blk_dev("mmc", "0:0", FS_TYPE_EXFAT)){
468                             printf("MMC interface configure failed\n");
469                             return -1;
470                 }
471     #else
472     if (fs_set_blk_dev("mmc", "0:1", FS_TYPE_FAT))
473             if (fs_set_blk_dev("mmc", "0:0", FS_TYPE_FAT)) {
474                             printf("MMC interface configure failed\n");
475                             return -1;
476                 }
477     #endif
478
479     return 0;
480 }

fs_size获取固件大小,fs_read读固件(NVT_BIN_NAME_TYPE_FW)。nvt_process_all_in_one进行升级,失败会继续尝试,总共3次。

board/novatek/common

   708 nvt_ivot_common.c
  1822 nvt_ivot_fw_update.c
   878 nvt_ivot_fw_update_utils.c
   529 nvt_ivot_pack.c
  2013 nvt_ivot_soc_utils.c

nvt_ivot_common.c

nvt_ivot_fw_update.c

nvt_flash_write

nvt_update_partitions

nvt_read_partitions

nvt_update_fs_partition

nvt_read_fs_partition

MemCheck_CalcCheckSum16Bit

nvt_chk_last_ebr

nvt_chk_app

nvt_chk_loader

nvt_chk_modelext

nvt_chk_rtos

nvt_chk_atf

nvt_chk_teeos

nvt_chk_ai

nvt_chk_uboot

nvt_chk_linux

nvt_chk_rootfs

nvt_chk_all_in_one_valid

nvt_on_partition_enum_sanity

nvt_switch_boot_patition

nvt_on_partition_enum_update

nvt_on_partition_enum_mtd_readback

nvt_getfdt_emb_addr_size

nvt_checkfdt_part_is_match

nvt_process_all_in_one

nvtpack_verify

nvt_process_sys_recovery

nvt_fw_update

nvt_process_all_in_one

nvt_ivot_fw_update_utils.c

nvt_chk_mtd_fdt_is_null

nvt_fw_load_tbin

nvt_detect_fw_tbin

LD_NVT         -1
LDCF_BOOT_CARD 1 T.bin Boot from SD card
               0 A.bin Boot from flash or emmc

get_nvt_bin_name

nvt_check_is_fw_update_fw

438 int nvt_check_is_fw_update_fw(void)
439 {
440     unsigned long      boot_reason;
441
442     boot_reason = nvt_readl((ulong)nvt_shminfo_comm_uboot_boot_func) & COMM_UBOOT_BOOT_FUNC_BOOT_REASON_MASK;
443
444     return (boot_reason == COMM_UBOOT_BOOT_FUNC_BOOT_UPDFIRM);
445 }

nvt_check_is_fomat_rootfs

447 int nvt_check_is_fomat_rootfs(void)
448 {
449     unsigned long      boot_reason;
450     static int         is_format = -1;
451
452     if(is_format != -1)
453         return is_format;
454
455     boot_reason = nvt_readl((ulong)nvt_shminfo_comm_uboot_boot_func) & COMM_UBOOT_BOOT_FUNC_BOOT_REASON_MASK;
456     is_format = ((boot_reason == COMM_UBOOT_BOOT_FUNC_BOOT_FORMAT_ROOTFS) ? 1 : 0);
457
458     return is_format;
459 }

nvt_ivot_pack.c

nvtpack_er

nvtpack_calc_nvt_sum

nvtpack_verify

 52 // {B5CB64AE-05DD-46FA-B906-0C62D22958D6}
 53 static const GUID GUID_RES =
 54 { 0xb5cb64ae, 0x05dd, 0x46fa, { 0xb9, 0x06, 0x0c, 0x62, 0xd2, 0x29, 0x58, 0xd6 } };
 55
 56 // {8827BE90-36CD-4FC2-A987-73A8484E84B1}
 57 static const GUID GUID_FW =
 58 { 0x8827be90, 0x36cd, 0x4fc2, { 0xa9, 0x87, 0x73, 0xa8, 0x48, 0x4e, 0x84, 0xb1 } };
 59
 60 // {D6012E07-10BC-4F91-B28A-352F82261A50}
 61 static const GUID GUID_FW2 =
 62 { 0xd6012e07, 0x10bc, 0x4f91, { 0xb2, 0x8a, 0x35, 0x2f, 0x82, 0x26, 0x1a, 0x50 } };

 GUID比较,计算校验和

 95 _NVTPACK_EXTERN_C NVTPACK_ER nvtpack_verify(NVTPACK_MEM *p_mem, NVTPACK_VERIFY_OUTPUT *p_output)
 96 {
 97     NVTPACK_MEM chk_mem = {0};
 98
 99     memset(p_output, 0, sizeof(*p_output));
100
101     if(IsEqualGUID(&GUID_FW2, (GUID *)p_mem->p_data)) {
102         if(nvtpack_calc_nvt_sum(p_mem) != 0) {
103             return nvtpack_er(NVTPACK_ER_CHECK_SUM);
104         }
105         p_output->ver = NVTPACK_VER_16072017;
106         p_output->partition_cnt = ((NVTPACK_FW_HDR2 *)p_mem->p_data)->TotalRes;
107         return nvtpack_er(NVTPACK_ER_SUCCESS);
108     }
109
110     return nvtpack_er(NVTPACK_ER_UNKNOWN_FORMAT);
111 }

nvt_ivot_pack.h

固件头128字节,每个分区头12字节,PartitionID 1 (modelext must always put in partition[1]) nvt-evb.bin。

 17 #define NVTPACK_CHKSUM_HDR_VERSION       0x16040719U
 18 #define NVTPACK_FW_HDR2_VERSION   0x16071515U
 19
 20 typedef enum _NVTPACK_ER {
 21     NVTPACK_ER_SUCCESS = 0,
 22     NVTPACK_ER_FAILED = -1,
 23     NVTPACK_ER_UNKNOWN_FORMAT = -2,
 24     NVTPACK_ER_CHECK_SUM = -3,
 25     NVTPACK_ER_NOT_FOUND = -4,
 26     NVTPACK_ER_USER_BREAK = -5,
 27     NVTPACK_ER_PARAM = -6,
 28     NVTPACK_ER_MEM_NOT_ENOUGH = -7,
 29     NVTPACK_ER_RTOS_SIZE_ALIGN4 = -8, ///< rtos size must align by 4
 30     NVTPACK_ER_INVALID_WHOLE_SIZE = -9, ///< after nvtpack, whole size must align by 4
 31     NVTPACK_ER_SRC_NAME_BLANK = -10, ///< resource's SrcName cannot be NULL or blank
 32     NVTPACK_ER_SRC_NAME_EXCEED = -11, ///< resource's SrcName cannot exceed 12 bytes
 33     NVTPACK_ER_SRC_NAME_INVALID = -12, ///< resource's SrcName include invalid character
 34     NVTPACK_ER_SRC_NAME_ALIKE = -13, ///< there resource's SrcName are alike.
 35 } NVTPACK_ER;
 36
 37 typedef enum _NVTPACK_VER {
 38     NVTPACK_VER_UNKNOWN,   ///< UNKNOWN
 39     NVTPACK_VER_13012816,      ///< NT9666X, NT9850X
 40     NVTPACK_VER_16072017,      ///< NT9668X
 41 } NVTPACK_VER;
 42
 43 #if !defined(_WIN32)
 44 typedef struct _GUID {
 45     unsigned int   Data1;
 46     unsigned short Data2;
 47     unsigned short Data3;
 48     unsigned char  Data4[8];
 49 } GUID;
 50 #endif
 51
 52 typedef struct _NVTPACK_RES_HDR {
 53     GUID         guid;          ///< {B5CB64AE-05DD-46FA-B906-0C62D22958D6}
 54     unsigned int TotalSize;
 55     unsigned int CheckSum;
 56     unsigned int ContentSize;
 57     char         SrcName[16];   ///< original packed bin file name
 58     char         DstName[16];   ///< target file name
 59 } NVTPACK_RES_HDR;
 60
 61 typedef struct _NVTPACK_FW_HDR {
 62     GUID         guid;          ///< {8827BE90-36CD-4FC2-A987-73A8484E84B1}
 63     unsigned int TotalSize;     ///< sizeof(NVTPACK_FW_HDR) + n*sizeof(NVTPACK_PARTITION_HDR)
 64     unsigned int CheckSum;      ///< check sum of sizeof(NVTPACK_FW_HDR) + n*sizeof(NVTPACK_PARTITION_HDR)
 65     unsigned int TotalRes;      ///< total partitions
 66 } NVTPACK_FW_HDR;
 67
 68 typedef struct _NVTPACK_FW_HDR2 {
 69     GUID         guid;          ///< {D6012E07-10BC-4F91-B28A-352F82261A50}
 70     unsigned int uiVersion;     ///< NVTPACK_FW_HDR2_VERSION
 71     unsigned int uiHdrSize;     ///< sizeof(NVTPACK_FW_HDR2);
 72     unsigned int TotalRes;      ///< total resource counts
 73     unsigned int TotalSize;     ///< whole bin size
 74     unsigned int uiChkMethod;   ///< 0: CheckSum
 75     unsigned int uiChkValue;    ///< check sum value or crc value within NVTPACK_FW_HDR2
 76     unsigned int uiUserData[4]; ///< user defined data that may be used in future
 77     unsigned int uiReversed[18];///< align to 128 bytes
 78 } NVTPACK_FW_HDR2;
 79
 80 typedef struct _NVTPACK_PARTITION_HDR {
 81     unsigned int Offset;
 82     unsigned int Size;
 83     unsigned int PartitionID;
 84 } NVTPACK_PARTITION_HDR;

arch/arm/include/asm/nvt-common/modelext/emb_partition_info.h

 32 enum {
 33     EMBTYPE_UNKNOWN   = 0x00,
 34     EMBTYPE_LOADER    = 0x01,  /* loader must always put in partition[0] */
 35     EMBTYPE_FDT       = 0x02,  /* modelext must always put in partition[1] */
 36     EMBTYPE_OBSOLETE1 = 0x03,
 37     EMBTYPE_OBSOLETE2 = 0x04,
 38     EMBTYPE_UBOOT     = 0x05,
 39     EMBTYPE_LINUX     = 0x06,
 40     EMBTYPE_DSP       = 0x07,
 41     EMBTYPE_PSTORE    = 0x08,
 42     EMBTYPE_FAT       = 0x09,
 43     EMBTYPE_EXFAT     = 0x0A,
 44     EMBTYPE_ROOTFS    = 0x0B,
 45     EMBTYPE_RAMFS     = 0x0C,
 46     EMBTYPE_UENV      = 0x0D, /* u-boot environment data */
 47     EMBTYPE_MBR       = 0x0E, /* for emmc partition, mbr always put in partition[0] instead of loader */
 48     EMBTYPE_ROOTFSL   = 0x0F, /* for emmc logical partition */
 49     EMBTYPE_RTOS      = 0x10, /* freertos */
 50     EMBTYPE_APP       = 0x11, /* for APP , like IQ configs */
 51     EMBTYPE_TEEOS     = 0x12, /* for secure os*/
 52     EMBTYPE_AI        = 0x13, /* for fastboot-ai*/
 53     EMBTYPE_ATF       = 0x14, /* for ATF */
 54     EMBTYPE_BANK      = 0x15, /* for dual rtos, extra partition called bank */
 55     EMBTYPE_MCU       = 0x16, /* MCU firmware, such as 8051, andes */
 56     EMBTYPE_SIZE,
 57 };

 board/novatek/common/nvt_ivot_fw_update_utils.c分区转换表。

 42 EMB_PARTITION_FDT_TRANSLATE_TABLE emb_part_fdt_map[EMBTYPE_TOTAL_SIZE] = {
 43     {"partition_mbr", EMBTYPE_MBR},
 44     {"partition_loader", EMBTYPE_LOADER},
 45     {"partition_fdt", EMBTYPE_FDT},
 46     {"partition_fdt.app", EMBTYPE_FDT},  // fastboot application.bin (fdt format)
 47     {"partition_fdt.fast", EMBTYPE_FDT}, // fastboot nvt-fastboot.bin (fdt format)
 48     {"partition_teeos", EMBTYPE_TEEOS},
 49     {"partition_uboot", EMBTYPE_UBOOT},
 50     {"partition_uenv", EMBTYPE_UENV},
 51     {"partition_kernel", EMBTYPE_LINUX},
 52     {"partition_rootfs", EMBTYPE_ROOTFS},
 53     {"partition_rootfsl", EMBTYPE_ROOTFSL},
 54     {"partition_usr", EMBTYPE_USER},
 55     {"partition_usrraw", EMBTYPE_USERRAW},
 56     {"partition_rtos", EMBTYPE_RTOS},
 57     {"partition_rtos_s", EMBTYPE_RTOS},
 58     {"partition_app", EMBTYPE_APP},
 59     {"partition_ai", EMBTYPE_AI},
 60     {"partition_atf", EMBTYPE_ATF},
 61     {"partition_bank", EMBTYPE_BANK},
 62     {"partition_loader.aov", EMBTYPE_LOADER}, // 2nd loader for always on video
 63     {"partition_mcu", EMBTYPE_MCU}, // mcu firmware
 64 };

nvt_ivot_soc_utils.c

nvt_chk_key

nvt_chk_key_on_uboot

nvt_chk_signature_on_uboot

nvt_chk_signature

nvt_decrypt_aes_on_uboot

nvt_decrypt_aes

nvt_part_config

nvt_runfw_bin_chk_valid

nvt_on_partition_enum_copy_to_dest

gz_uncompress

nvt_runfw_bin_unpack_to_dest

uimage_gen_dcrc

uimage_gen_hcrc

uimage_gen_fake_header

is_gzip_image

1456 inline static int is_gzip_image(unsigned long image)
1457 {
1458     return (((NVTPACK_BFC_HDR *)image)->uiFourCC ==
1459             MAKEFOURCC('B', 'C', 'L', '1'));
1460 }

nvt_ker_img_ungzip_linux

nvt_ramdisk_img_ungzip_linux

nvt_boot_linux_bin_auto

nvt_boot_rootfs_bin_auto

nvt_boot_fw_init_detect

nvt_set_bootargs_by_dts

do_nvt_boot_cmd

ns02302_ldr

bl_mainFlow

LibExt/LIBExt_src/Ctrl_Flow/bl_func.c

  93 static UINT8 *LOADER_START_STR   = {(UINT8 *)"\r\nLoader Start ..."};

3362     prj_main();

3376 #if defined(ROM_GetCurrBS)
3377     if (ROM_GetCurrBS() == BOOT_SOURCE_UART) {
3378         debug_msg("Boot from UART ...\r\n");
3379 #if UART_UPDATE
3380         bl_uart();//never returned.
3381 #else
3382         bl_displayErrMsg("loader must be STORAGEEXT = Uart\r\n");
3383 #endif
3384     }
3385
3386     if ((ROM_GetCurrBS() == BOOT_SOURCE_USB)||(ROM_GetCurrBS() == BOOT_SOURCE_USB_FULL)) {
3387         debug_msg("Boot from USB ...\r\n");
3388 #if USB_WRITELOADER
3389         bl_usb(); //never returned.
3390 #else
3391         bl_displayErrMsg("loader must be STORAGEEXT = Usb\r\n");
3392 #endif
3393     }
3394 #endif

debug_msg

 20 extern void debug_set_console(CONSOLE_OBJ *p_obj);
 21 extern CONSOLE_OBJ *debug_get_console(void);
 22 extern void debug_err(char *str);
 23 extern void debug_err_var(char *str, int var);
 24 extern void debug_msg(char *str) __attribute__ ((section (".part1")));
 25 extern void debug_msg_var(char *str, int var) __attribute__ ((section (".part1")));
 26 extern void debug_dump_addr(UINT32 addr, UINT32 size);
 27 extern int printf(char const *fmt, ...);

Project/Model/Loader539_Data/Release/ObjectLds/Debug/debug.o

ARC/Lib/Release/Debug.a

debug_put_string

fw_update_by_cache

patch

 

[2025-12-01 18:58:18] Reading '/home/fuyu1/code/nvt9853x/BSP/u-boot/u-boot.bin'... [2025-12-01 18:58:18] File size = 423072 [2025-12-01 18:58:18] [2025-12-01 18:58:18] ==Display binary file info== Begin [2025-12-01 18:58:18] Model Name: ub02302 [2025-12-01 18:58:18] VersionNumber: FFFFFFFF [2025-12-01 18:58:18] ReleaseDate: 20251201 [2025-12-01 18:58:18] ==Display binary file info== End [2025-12-01 18:58:18] [2025-12-01 18:58:18] Total binary size after padding: 423072 [2025-12-01 18:58:18] [2025-12-01 18:58:18] ##ui32BinDataSumValue: 0x5C06C336 [2025-12-01 18:58:18] CheckSum: 0x3CCA [2025-12-01 18:58:18] [2025-12-01 18:58:18] Writing '/home/fuyu1/code/nvt9853x/BSP/u-boot/u-boot.bin'... [2025-12-01 18:58:18] Write size = 423072 [2025-12-01 18:58:18] Save binary OK. [2025-12-01 18:58:18] bfc.exe: 2018-04-5 [2025-12-01 18:58:18] full load version [2025-12-01 18:58:18] compress /home/fuyu1/code/nvt9853x/BSP/u-boot/u-boot.bin to /home/fuyu1/code/nvt9853x/BSP/u-boot/u-boot.lz.bin... [2025-12-01 18:58:18] Input file: 423072 bytes [2025-12-01 18:58:18] Compressed data: 260778 bytes (61.6%) [2025-12-01 18:58:18] Full compress, new file size = outsize + 16bytes = 260794 [2025-12-01 18:58:18] Calculate and write back checksum... [2025-12-01 18:58:18] Checksum = 0xb604 [2025-12-01 18:58:18] bfc.exe: 2018-04-5 [2025-12-01 18:58:18] full load version [2025-12-01 18:58:18] compress /home/fuyu1/code/nvt9853x/BSP/u-boot/u-boot.bin to /home/fuyu1/code/nvt9853x/BSP/u-boot/u-boot.lzma.bin... [2025-12-01 18:58:18] Input file: 423072 bytes [2025-12-01 18:58:18] Compressed data: 148947 bytes (35.2%) [2025-12-01 18:58:18] Full compress, new file size = outsize + 16bytes = 148963 [2025-12-01 18:58:18] Calculate and write back checksum... [2025-12-01 18:58:18] Checksum = 0xb271 [2025-12-01 18:58:18] ##### Build device driver test ##### [2025-12-01 18:58:18] sample: Build start [2025-12-01 18:58:18] make[1]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample' [2025-12-01 18:58:18] >>>>>>>>>> processing folder pq_emu_rtsp/ [2025-12-01 18:58:18] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/pq_emu_rtsp' [2025-12-01 18:58:18] Compiling pq_emu_rtsp.c [2025-12-01 18:58:18] Compiling aiisp.c [2025-12-01 18:58:18] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/pq_emu_rtsp' [2025-12-01 18:58:18] Done! [2025-12-01 18:58:18] [2025-12-01 18:58:18] >>>>>>>>>> processing folder hd_video_record_with_vsp_smart2/ [2025-12-01 18:58:18] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2' [2025-12-01 18:58:18] Makefile:81: warning: overriding recipe for target 'all' [2025-12-01 18:58:18] Makefile:49: warning: ignoring old recipe for target 'all' [2025-12-01 18:58:18] ====================================================================== [2025-12-01 18:58:18] [2025-12-01 18:58:18] Skip 'hd_video_record_with_vsp_smart2'. [2025-12-01 18:58:18] Delete [2025-12-01 18:58:18] '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2/SKIP_BUILDING' [2025-12-01 18:58:18] to build 'hd_video_record_with_vsp_smart2'. [2025-12-01 18:58:18] [2025-12-01 18:58:18] ====================================================================== [2025-12-01 18:58:18] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2' [2025-12-01 18:58:18] Done! [2025-12-01 18:58:18] [2025-12-01 18:58:18] >>>>>>>>>> processing folder aov1/ [2025-12-01 18:58:18] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/aov1' [2025-12-01 18:58:18] Compiling main.c [2025-12-01 18:58:18] Compiling aov1_ctrl.c [2025-12-01 18:58:19] Compiling alg_md.c [2025-12-01 18:58:19] Compiling ai3_pvd.c [2025-12-01 18:58:19] Compiling aov1_filesave.c [2025-12-01 18:58:19] Creating aov1... [2025-12-01 18:58:19] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/aov1' [2025-12-01 18:58:19] Done! [2025-12-01 18:58:19] [2025-12-01 18:58:19] >>>>>>>>>> processing folder fdt_test/ [2025-12-01 18:58:19] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/fdt_test' [2025-12-01 18:58:19] Compiling fdt_test.c [2025-12-01 18:58:19] Creating fdt_test... [2025-12-01 18:58:19] cpp -nostdinc -I include -undef -x assembler-with-cpp application.dts > application.dts.tmp \ [2025-12-01 18:58:19] && dtc -O dtb -b 0 -o application.dtb application.dts.tmp [2025-12-01 18:58:19] rm application.dts.tmp [2025-12-01 18:58:19] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/fdt_test' [2025-12-01 18:58:19] Done! [2025-12-01 18:58:19] [2025-12-01 18:58:19] >>>>>>>>>> processing folder pq_video_rtsp/ [2025-12-01 18:58:19] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/pq_video_rtsp' [2025-12-01 18:58:19] Compiling pq_video_rtsp.c [2025-12-01 18:58:19] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/pq_video_rtsp' [2025-12-01 18:58:19] Done! [2025-12-01 18:58:19] [2025-12-01 18:58:19] >>>>>>>>>> processing folder nvtrtspd_dbg/ [2025-12-01 18:58:19] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_dbg' [2025-12-01 18:58:19] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c nvtrtspd.c -o nvtrtspd.o [2025-12-01 18:58:19] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -o nvtrtspd_dbg nvtrtspd.o -L/home/fuyu1/code/nvt9853x/code/lib/output -L/home/fuyu1/code/nvt9853x/code/hdal/output -lstdc++ -lpthread -lm -lrt -lnvtlive555 -lhdal [2025-12-01 18:58:19] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-nm -n nvtrtspd_dbg > nvtrtspd_dbg.sym [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-strip nvtrtspd_dbg [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-objcopy -R .comment -R .note.ABI-tag -R .gnu.version nvtrtspd_dbg [2025-12-01 18:58:20] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_dbg' [2025-12-01 18:58:20] Done! [2025-12-01 18:58:20] [2025-12-01 18:58:20] >>>>>>>>>> processing folder nvtrtspd/ [2025-12-01 18:58:20] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd' [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c nvtrtspd.c -o nvtrtspd.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c video_record.c -o video_record.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -o nvtrtspd nvtrtspd.o video_record.o -L/home/fuyu1/code/nvt9853x/code/lib/output -L/home/fuyu1/code/nvt9853x/code/hdal/output -lstdc++ -lpthread -lm -lrt -lnvtlive555 -lhdal [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-nm -n nvtrtspd > nvtrtspd.sym [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-strip nvtrtspd [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-objcopy -R .comment -R .note.ABI-tag -R .gnu.version nvtrtspd [2025-12-01 18:58:20] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd' [2025-12-01 18:58:20] Done! [2025-12-01 18:58:20] [2025-12-01 18:58:20] >>>>>>>>>> processing folder hd_video_record_dis/ [2025-12-01 18:58:20] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_dis' [2025-12-01 18:58:20] Compiling video_record_dis.c [2025-12-01 18:58:20] Creating hd_video_record_dis... [2025-12-01 18:58:20] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_dis' [2025-12-01 18:58:20] Done! [2025-12-01 18:58:20] [2025-12-01 18:58:20] >>>>>>>>>> processing folder vos_test/ [2025-12-01 18:58:20] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/vos_test' [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/lib/include -I. -fPIC -ffunction-sections -fdata-sections -g -I/home/fuyu1/code/nvt9853x/code/vos/include -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c test_vos.c -o test_vos.o [2025-12-01 18:58:20] In file included from test_vos.c:4: [2025-12-01 18:58:20] test_vos.c: In function file_test: [2025-12-01 18:58:20] test_vos.c:766:66: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] [2025-12-01 18:58:20] 766 | DBG_DUMP("vos_file_open read fd = 0x%X, read_buf 0x%X\r\n", fd, (unsigned int)read_buf); [2025-12-01 18:58:20] | ^ [2025-12-01 18:58:20] /home/fuyu1/code/nvt9853x/code/vos/include/kwrap/debug.h:224:59: note: in definition of macro DBG_DUMP [2025-12-01 18:58:20] 224 | #define DBG_DUMP(fmt, args...) vk_pr_warn(fmt, ##args) [2025-12-01 18:58:20] | ^~~~ [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -o test_vos test_vos.o -L/home/fuyu1/code/nvt9853x/code/lib -L/home/fuyu1/code/nvt9853x/code/vos/output -lvos [2025-12-01 18:58:20] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/vos_test' [2025-12-01 18:58:20] Done! [2025-12-01 18:58:20] [2025-12-01 18:58:20] >>>>>>>>>> processing folder hd_video_record_with_vsp_smart2_aiisp/ [2025-12-01 18:58:20] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2_aiisp' [2025-12-01 18:58:20] skip 'hd_video_record_with_vsp_smart2_aiisp' before make install opencv lib [2025-12-01 18:58:20] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2_aiisp' [2025-12-01 18:58:20] Done! [2025-12-01 18:58:20] [2025-12-01 18:58:20] >>>>>>>>>> processing folder nvtrtspd_ipc/ [2025-12-01 18:58:20] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_ipc' [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -D_NETWORK_ON_CPU1_ -c nvtrtspd.c -o nvtrtspd.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -D_NETWORK_ON_CPU1_ -c video_record.c -o video_record.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -D_NETWORK_ON_CPU1_ -c detection.c -o detection.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -D_NETWORK_ON_CPU1_ -c nalu_header.c -o nalu_header.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -o nvtrtspd_ipc nvtrtspd.o video_record.o detection.o nalu_header.o -L/home/fuyu1/code/nvt9853x/code/lib/output -L/home/fuyu1/code/nvt9853x/code/hdal/output -lstdc++ -lpthread -lm -lrt -lnvtlive555 -lhdal [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-nm -n nvtrtspd_ipc > nvtrtspd_ipc.sym [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-strip nvtrtspd_ipc [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-objcopy -R .comment -R .note.ABI-tag -R .gnu.version nvtrtspd_ipc [2025-12-01 18:58:20] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_ipc' [2025-12-01 18:58:20] Done! [2025-12-01 18:58:20] [2025-12-01 18:58:20] >>>>>>>>>> processing folder hd_video_record_eis/ [2025-12-01 18:58:20] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_eis' [2025-12-01 18:58:20] Compiling video_record_eis.c [2025-12-01 18:58:20] Creating hd_video_record_eis... [2025-12-01 18:58:20] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_eis' [2025-12-01 18:58:20] Done! [2025-12-01 18:58:20] [2025-12-01 18:58:20] >>>>>>>>>> processing folder nvtrtspd_aisr/ [2025-12-01 18:58:20] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_aisr' [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c nvtrtspd.c -o nvtrtspd.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c video_record.c -o video_record.o [2025-12-01 18:58:20] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c ai_cpu_post_accuracy.c -o ai_cpu_post_accuracy.o [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c ai3_net.c -o ai3_net.o [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c thermal_lib.c -o thermal_lib.o [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -o nvtrtspd_aisr nvtrtspd.o video_record.o ai_cpu_post_accuracy.o ai3_net.o thermal_lib.o -L/home/fuyu1/code/nvt9853x/code/lib/output -L/home/fuyu1/code/nvt9853x/code/hdal/output -lstdc++ -lpthread -lm -lrt -lnvtlive555 -lhdal -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/output -lvendor_isp -lprebuilt_isp -lvendor_media -L/home/fuyu1/code/nvt9853x/code/vos/output -lvos -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai2/source -lvendor_ai3 -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai2/source_pub -lvendor_ai3_pub -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/output -lvendor_media -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/prebuilt/lib/glibc -lprebuilt_ai [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-nm -n nvtrtspd_aisr > nvtrtspd_aisr.sym [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-strip nvtrtspd_aisr [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-objcopy -R .comment -R .note.ABI-tag -R .gnu.version nvtrtspd_aisr [2025-12-01 18:58:21] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_aisr' [2025-12-01 18:58:21] Done! [2025-12-01 18:58:21] [2025-12-01 18:58:21] >>>>>>>>>> processing folder lds_test/ [2025-12-01 18:58:21] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/lds_test' [2025-12-01 18:58:21] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/lds_test' [2025-12-01 18:58:21] Done! [2025-12-01 18:58:21] [2025-12-01 18:58:21] >>>>>>>>>> processing folder plug_pq_emu/ [2025-12-01 18:58:21] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/plug_pq_emu' [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/vendor_ai_cpu -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/vendor_ai_dsp -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -D_BOARD_DRAM_SIZE_=0x80000000 -D_CHIP_NT98538_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c plug_pq_emu.c -o plug_pq_emu.o [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/vendor_ai_cpu -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/vendor_ai_dsp -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -D_BOARD_DRAM_SIZE_=0x80000000 -D_CHIP_NT98538_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c ai.c -o ai.o [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -I/home/fuyu1/code/nvt9853x/code/lib/include -I/home/fuyu1/code/nvt9853x/code/hdal/include -I/home/fuyu1/code/nvt9853x/code/vos/drivers/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/isp/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/media/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/vendor_ai_cpu -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub/vendor_ai_dsp -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_driver/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/include -I/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/drivers/k_flow/source/kflow_ai_net -I. -O2 -fPIC -ffunction-sections -fdata-sections -march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 -D_BSP_NS02302_ -D_NVT_IPC_SDK_ -D__LINUX520 -D__LINUX -D_NETWORK_ON_CPU1_ -D_BOARD_DRAM_SIZE_=0x80000000 -D_CHIP_NT98538_ -Wall -Wundef -Wsign-compare -Wno-missing-braces -Wstrict-prototypes -c isp.c -o isp.o [2025-12-01 18:58:21] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-g++ -c -o aiisp_pq.o aiisp_pq.cpp [2025-12-01 18:58:22] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-gcc -o plug_pq_emu plug_pq_emu.o ai.o isp.o aiisp_pq.o -L/home/fuyu1/code/nvt9853x/code/lib/output -L/home/fuyu1/code/nvt9853x/code/hdal/output -lstdc++ -lpthread -lm -lrt -lhdal -lvendor_isp -lvendor_media -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/output -L/home/fuyu1/code/nvt9853x/code/vos/output -lvos -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source -lvendor_ai3 -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai3/source_pub -lvendor_ai3_pub -L/home/fuyu1/code/nvt9853x/code/hdal/vendor/ai/source/prebuilt/lib/glibc -lprebuilt_ai [2025-12-01 18:58:22] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-nm -n plug_pq_emu > plug_pq_emu.sym [2025-12-01 18:58:22] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-strip plug_pq_emu [2025-12-01 18:58:22] /opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/bin/aarch64-ca53-linux-gnu-objcopy -R .comment -R .note.ABI-tag -R .gnu.version plug_pq_emu [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/plug_pq_emu' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] make[1]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample' [2025-12-01 18:58:22] sample: Build finish [2025-12-01 18:58:22] Makefile:81: warning: overriding recipe for target 'all' [2025-12-01 18:58:22] Makefile:49: warning: ignoring old recipe for target 'all' [2025-12-01 18:58:22] In file included from test_vos.c:4: [2025-12-01 18:58:22] test_vos.c: In function file_test: [2025-12-01 18:58:22] test_vos.c:766:66: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] [2025-12-01 18:58:22] 766 | DBG_DUMP("vos_file_open read fd = 0x%X, read_buf 0x%X\r\n", fd, (unsigned int)read_buf); [2025-12-01 18:58:22] | ^ [2025-12-01 18:58:22] /home/fuyu1/code/nvt9853x/code/vos/include/kwrap/debug.h:224:59: note: in definition of macro DBG_DUMP [2025-12-01 18:58:22] 224 | #define DBG_DUMP(fmt, args...) vk_pr_warn(fmt, ##args) [2025-12-01 18:58:22] | ^~~~ [2025-12-01 18:58:22] sample: Build start [2025-12-01 18:58:22] make[1]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample' [2025-12-01 18:58:22] >>>>>>>>>> processing folder pq_emu_rtsp/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/pq_emu_rtsp' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'pq_emu_rtsp' -> '/home/fuyu1/code/nvt9853x/code/application/output/pq_emu_rtsp' [2025-12-01 18:58:22] 'pq_emu_rtsp' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/bin/pq_emu_rtsp' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/pq_emu_rtsp' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder hd_video_record_with_vsp_smart2/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2' [2025-12-01 18:58:22] Makefile:81: warning: overriding recipe for target 'all' [2025-12-01 18:58:22] Makefile:49: warning: ignoring old recipe for target 'all' [2025-12-01 18:58:22] make-4.1[2]: Nothing to be done for 'install'. [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder aov1/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/aov1' [2025-12-01 18:58:22] 'aov1' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/bin/aov1' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/aov1' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder fdt_test/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/fdt_test' [2025-12-01 18:58:22] 'fdt_test' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/bin/fdt_test' [2025-12-01 18:58:22] 'application.dtb' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/etc/application.dtb' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/fdt_test' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder pq_video_rtsp/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/pq_video_rtsp' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'pq_video_rtsp' -> '/home/fuyu1/code/nvt9853x/code/application/output/pq_video_rtsp' [2025-12-01 18:58:22] 'pq_video_rtsp' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/bin/pq_video_rtsp' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/pq_video_rtsp' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder nvtrtspd_dbg/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_dbg' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'nvtrtspd_dbg' -> '/home/fuyu1/code/nvt9853x/code/application/output/nvtrtspd_dbg' [2025-12-01 18:58:22] 'nvtrtspd_dbg' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/bin/nvtrtspd_dbg' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_dbg' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder nvtrtspd/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'nvtrtspd' -> '/home/fuyu1/code/nvt9853x/code/application/output/nvtrtspd' [2025-12-01 18:58:22] 'nvtrtspd' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/bin/nvtrtspd' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder hd_video_record_dis/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_dis' [2025-12-01 18:58:22] 'hd_video_record_dis' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/bin/hd_video_record_dis' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_dis' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder vos_test/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/vos_test' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'test_vos' -> '/home/fuyu1/code/nvt9853x/code/application/output/test_vos' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/vos_test' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder hd_video_record_with_vsp_smart2_aiisp/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2_aiisp' [2025-12-01 18:58:22] skip 'hd_video_record_with_vsp_smart2_aiisp' before make install opencv lib [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_with_vsp_smart2_aiisp' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder nvtrtspd_ipc/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_ipc' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'nvtrtspd_ipc' -> '/home/fuyu1/code/nvt9853x/code/application/output/nvtrtspd_ipc' [2025-12-01 18:58:22] 'nvtrtspd_ipc' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/bin/nvtrtspd_ipc' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_ipc' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder hd_video_record_eis/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_eis' [2025-12-01 18:58:22] 'hd_video_record_eis' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/bin/hd_video_record_eis' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/hd_video_record_eis' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder nvtrtspd_aisr/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_aisr' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'nvtrtspd_aisr' -> '/home/fuyu1/code/nvt9853x/code/application/output/nvtrtspd_aisr' [2025-12-01 18:58:22] 'nvtrtspd_aisr' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/bin/nvtrtspd_aisr' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/nvtrtspd_aisr' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder lds_test/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/lds_test' [2025-12-01 18:58:22] 'lds_test' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/bin/lds_test' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/lds_test' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] >>>>>>>>>> processing folder plug_pq_emu/ install [2025-12-01 18:58:22] make-4.1[2]: Entering directory '/home/fuyu1/code/nvt9853x/code/sample/plug_pq_emu' [2025-12-01 18:58:22] >>>>>>>>>>>>>>>>>>> install >>>>>>>>>>>>>>>>>>> [2025-12-01 18:58:22] 'plug_pq_emu' -> '/home/fuyu1/code/nvt9853x/code/application/output/plug_pq_emu' [2025-12-01 18:58:22] 'plug_pq_emu' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/bin/plug_pq_emu' [2025-12-01 18:58:22] make-4.1[2]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample/plug_pq_emu' [2025-12-01 18:58:22] Done! [2025-12-01 18:58:22] [2025-12-01 18:58:22] make[1]: Leaving directory '/home/fuyu1/code/nvt9853x/code/sample' [2025-12-01 18:58:22] sample: Build finish [2025-12-01 18:58:22] Makefile:81: warning: overriding recipe for target 'all' [2025-12-01 18:58:22] Makefile:49: warning: ignoring old recipe for target 'all' [2025-12-01 18:58:22] In file included from test_vos.c:4: [2025-12-01 18:58:22] test_vos.c: In function file_test: [2025-12-01 18:58:22] test_vos.c:766:66: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] [2025-12-01 18:58:22] 766 | DBG_DUMP("vos_file_open read fd = 0x%X, read_buf 0x%X\r\n", fd, (unsigned int)read_buf); [2025-12-01 18:58:22] | ^ [2025-12-01 18:58:22] /home/fuyu1/code/nvt9853x/code/vos/include/kwrap/debug.h:224:59: note: in definition of macro DBG_DUMP [2025-12-01 18:58:22] 224 | #define DBG_DUMP(fmt, args...) vk_pr_warn(fmt, ##args) [2025-12-01 18:58:22] | ^~~~ [2025-12-01 18:58:22] Makefile:81: warning: overriding recipe for target 'all' [2025-12-01 18:58:22] Makefile:49: warning: ignoring old recipe for target 'all' [2025-12-01 18:58:22] ##### run postprocessing script ##### [2025-12-01 18:58:22] ##### Build rootfs ##### [2025-12-01 18:58:22] rootfs: Build start [2025-12-01 18:58:22] make[1]: Entering directory '/home/fuyu1/code/nvt9853x/BSP/root-fs' [2025-12-01 18:58:22] Rootfs are generating..... [2025-12-01 18:58:22] copyso search bin path (/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs) ==> bin sbin usr/bin usr/sbin usr/local/bin usr/local/sbin var/www var/www/onvif var/www/cgi-bin [2025-12-01 18:58:22] bin [2025-12-01 18:58:22] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/libm.so.6' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/libm.so.6' [2025-12-01 18:58:22] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/libresolv.so.2' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/libresolv.so.2' [2025-12-01 18:58:22] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/libc.so.6' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/libc.so.6' [2025-12-01 18:58:22] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/usr/lib/libstdc++.so.6' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libstdc++.so.6' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libnvtlive555.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libnvtlive555.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/output/libhdal.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libhdal.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libvendor_isp.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libvendor_isp.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_isp.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_isp.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libvendor_media.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libvendor_media.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/vos/output/libvos.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libvos.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libvendor_ai3.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libvendor_ai3.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libvendor_ai3_pub.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libvendor_ai3_pub.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_ai.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_ai.so' [2025-12-01 18:58:23] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/libgcc_s.so.1' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/libgcc_s.so.1' [2025-12-01 18:58:23] sbin [2025-12-01 18:58:23] usr/bin [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_limit_fdet.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_limit_fdet.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_pvdcnn.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_pvdcnn.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_fdcnn.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_fdcnn.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_modules_lib.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_modules_lib.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_samples_ipc_lib.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_samples_ipc_lib.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_sw_tracker.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_sw_tracker.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libvendor_cv.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libvendor_cv.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libprebuilt_cv.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libprebuilt_cv.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libfdt.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libfdt.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libnvtdis.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libnvtdis.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/hdal/vendor/output/libvendor_eis.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libvendor_eis.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libbsmux.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libbsmux.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libavfile.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libavfile.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libFileSys.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libFileSys.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libFsLinux.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libFsLinux.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libfileout.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libfileout.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libutility.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libutility.so' [2025-12-01 18:58:23] '/home/fuyu1/code/nvt9853x/code/lib/output/libtse.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libtse.so' [2025-12-01 18:58:23] usr/sbin [2025-12-01 18:58:24] usr/local/bin [2025-12-01 18:58:24] var/www [2025-12-01 18:58:24] var/www/cgi-bin [2025-12-01 18:58:24] lib [2025-12-01 18:58:24] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/ld-linux-aarch64.so.1' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/ld-linux-aarch64.so.1' [2025-12-01 18:58:24] necessary [2025-12-01 18:58:24] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/libnss_db.so.2' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/libnss_db.so.2' [2025-12-01 18:58:24] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/libnss_files.so.2' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/libnss_files.so.2' [2025-12-01 18:58:24] '/opt/arm/aarch64-ca53-linux-gnueabihf-10.4.0/usr/aarch64-ca53-linux-gnu/sysroot/lib/libnss_dns.so.2' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/libnss_dns.so.2' [2025-12-01 18:58:24] '/home/fuyu1/code/nvt9853x/code/lib/output/libnvtlibc.so' -> '/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/usr/lib/libnvtlibc.so' [2025-12-01 18:58:24] /home/fuyu1/code/nvt9853x/build/nvt-tools/gen_modules_dep_bb /home/fuyu1/code/nvt9853x/BSP/root-fs/lib/modules/5.10.168 [2025-12-01 18:58:24] create output file:/home/fuyu1/code/nvt9853x/BSP/root-fs/rootfs/lib/modules/5.10.168/modules.dep.bb [2025-12-01 18:58:25] ready to parsing ko [2025-12-01 18:58:25] finish!! [2025-12-01 18:58:25] To do rootfs/etc/profile_prjcfg is generating ..... [2025-12-01 18:58:25] Makefile:301: recipe for target 'all' failed [2025-12-01 18:58:26] make[1]: Leaving directory '/home/fuyu1/code/nvt9853x/BSP/root-fs' [2025-12-01 18:58:26] make[1]: *** [all] Error 1 [2025-12-01 18:58:26] rootfs: Build finish [2025-12-01 18:58:26] make[1]: *** [all] Error 1 [2025-12-01 18:58:26] Makefile:546: recipe for target 'rootfs' failed [2025-12-01 18:58:26] make: *** [rootfs] Error 2 [2025-12-01 18:58:26] fuyu1@ubuntu:~/code/nvt9853x$
12-02
AR lib_board/built-in.o CC lib_uip/lib_uip.o lib_uip/lib_uip.c: In function 'HttpdHandler': lib_uip/lib_uip.c:56:4: warning: implicit declaration of function 'NetSendHttpd'; did you mean 'NetLoopHttpd'? [-Wimplicit-function-declaration] 56 | NetSendHttpd(uip_buf, uip_len); | ^~~~~~~~~~~~ | NetLoopHttpd lib_uip/lib_uip.c: In function 'NetLoopHttpd': lib_uip/lib_uip.c:197:15: warning: implicit declaration of function 'timer_get_boot_us'; did you mean 'timer_get_us'? [-Wimplicit-function-declaration] 197 | us_start = timer_get_boot_us(); | ^~~~~~~~~~~~~~~~~ | timer_get_us CC lib_uip/uip_drv.o CC lib_uip/uip/uip.o lib_uip/uip/uip.c:113:19: warning: function declaration isn't a prototype [-Wstrict-prototypes] 113 | static inline int request_tcp_cache_appdata_idx() | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib_uip/uip/uip.c:132:6: warning: function declaration isn't a prototype [-Wstrict-prototypes] 132 | void release_all_tcp_cache_appdata_idx() | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CC lib_uip/uip/uip_arp.o CC lib_uip/uip/timer.o CC lib_uip/uip/uip-split.o lib_uip/uip/uip-split.c: In function 'uip_split_output': lib_uip/uip/uip-split.c:91:5: warning: implicit declaration of function 'tcpip_output' [-Wimplicit-function-declaration] 91 | tcpip_output(); | ^~~~~~~~~~~~ CC lib_uip/apps/uip_apps.o CC lib_uip/apps/httpd/httpd.o CC lib_uip/apps/httpd/fs.o In file included from lib_uip/apps/httpd/fs.c:54: lib_uip/apps/httpd/webs/fsdata.c:826:31: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] 826 | struct fsdata_file *FS_ROOT = file_style_css; | ^~~~~~~~~~~~~~ CC lib_uip/apps/upgrade/http_upgrade_dynamic.o lib_uip/apps/upgrade/http_upgrade_dynamic.c: In function 'checkFirmwareRSA2048': lib_uip/apps/upgrade/http_upgrade_dynamic.c:1180:14: warning: passing argument 1 of 'sha256_calc' from incompatible pointer type [-Wincompatible-pointer-types] 1180 | sha256_calc(uHeader, info->size, sha256_hash); | ^~~~~~~ | | | UPGRADE_HEADER * {aka struct _UPGRADE_HEADER_DYM *} In file included from lib_uip/apps/upgrade/http_upgrade_dynamic.c:23: lib_verify/sha256.h:22:32: note: expected 'unsigned char *' but argument is of type 'UPGRADE_HEADER *' {aka 'struct _UPGRADE_HEADER_DYM *'} 22 | int sha256_calc(unsigned char *in, int len, unsigned char *out); | ~~~~~~~~~~~~~~~^~ At top level: lib_uip/apps/upgrade/http_upgrade_dynamic.c:130:13: warning: 'uip_cache_disable' defined but not used [-Wunused-function] 130 | static void uip_cache_disable(void) | ^~~~~~~~~~~~~~~~~ lib_uip/apps/upgrade/http_upgrade_dynamic.c:125:13: warning: 'uip_cache_enable' defined but not used [-Wunused-function] 125 | static void uip_cache_enable(void) | ^~~~~~~~~~~~~~~~ AR lib_uip/built-in.o CC lib_verify/bigNumber.o CC lib_verify/md5.o lib_verify/md5.c:60:1: warning: function declaration isn't a prototype [-Wstrict-prototypes] 60 | static void Transform (); | ^~~~~~ lib_verify/md5.c:106: warning: "UL" redefined 106 | #define UL(x) x##U | In file included from include/linux/sizes.h:11, from include/configs/nvt-ns02302-evb-a64.h:13, from include/config.h:4, from ./arch/arm/include/asm/string.h:4, from include/linux/string.h:21, from lib_verify/md5.c:36: include/linux/const.h:31: note: this is the location of the previous definition 31 | #define UL(x) (_UL(x)) | lib_verify/md5.c:212:13: warning: function declaration isn't a prototype [-Wstrict-prototypes] 212 | static void Transform (buf, in) | ^~~~~~~~~ CC lib_verify/rsaVerify.o lib_verify/rsaVerify.c: In function 'bytes_out': lib_verify/rsaVerify.c:315:2: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration] 315 | printf("\n\t[%s] size: %d 0x%04x\n\t0x%04x | ", info, len, len, 0); | ^~~~~~ lib_verify/rsaVerify.c:11:1: note: 'printf' is defined in header '<stdio.h>'; did you forget to '#include <stdio.h>'? 10 | #include "sha256.h" +++ |+#include <stdio.h> 11 | lib_verify/rsaVerify.c: In function 'mgf1_mask': lib_verify/rsaVerify.c:356:6: warning: unused variable 'out_l' [-Wunused-variable] 356 | int out_l = dlen; | ^~~~~ lib_verify/rsaVerify.c: In function 'rsa_verify_pss': lib_verify/rsaVerify.c:492:11: warning: initialization of 'int (*)(void *)' from incompatible pointer type 'int (*)(sha256_context *)' [-Wincompatible-pointer-types] 492 | .init = sha256_starts, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:492:11: note: (near initialization for 'hash_algo.init') lib_verify/rsaVerify.c:493:13: warning: initialization of 'int (*)(void *)' from incompatible pointer type 'int (*)(sha256_context *)' [-Wincompatible-pointer-types] 493 | .starts = sha256_starts, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:493:13: note: (near initialization for 'hash_algo.starts') lib_verify/rsaVerify.c:494:13: warning: initialization of 'int (*)(void *, unsigned char *, int)' from incompatible pointer type 'int (*)(sha256_context *, uint8_t *, uint32_t)' {aka 'int (*)(sha256_context *, unsigned char *, unsigned int)'} [-Wincompatible-pointer-types] 494 | .update = sha256_update, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:494:13: note: (near initialization for 'hash_algo.update') lib_verify/rsaVerify.c:495:12: warning: initialization of 'int (*)(void *, unsigned char *)' from incompatible pointer type 'int (*)(sha256_context *, uint8_t *)' {aka 'int (*)(sha256_context *, unsigned char *)'} [-Wincompatible-pointer-types] 495 | .final = sha256_finish, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:495:12: note: (near initialization for 'hash_algo.final') lib_verify/rsaVerify.c:498:16: warning: unused variable 'mask' [-Wunused-variable] 498 | unsigned char mask[256] = {0}; | ^~~~ lib_verify/rsaVerify.c: In function 'bytes_out': lib_verify/rsaVerify.c:331:1: warning: control reaches end of non-void function [-Wreturn-type] 331 | } | ^ CC lib_verify/shaAndSha512.o CC lib_verify/sha256.o AR lib_verify/built-in.o CC net/arp.o CC net/bootp.o CC net/eth-uclass.o CC net/eth_common.o CC net/net.o net/net.c:1636:6: warning: function declaration isn't a prototype [-Wstrict-prototypes] 1636 | void NetInitGlobalHttpd() | ^~~~~~~~~~~~~~~~~~ net/net.c:1676:5: warning: function declaration isn't a prototype [-Wstrict-prototypes] 1676 | int NetInitLocalHttpd() | ^~~~~~~~~~~~~~~~~ CC net/nfs.o CC net/ping.o CC net/tftp.o AR net/built-in.o LDS u-boot.lds LD u-boot OBJCOPY u-boot.srec OBJCOPY u-boot-nodtb.bin RELOC u-boot-nodtb.bin COPY u-boot.bin xz: u-boot.bin.xz: File already has `.xz' suffix, skipping Reading 'u-boot.bin'... File size = 699208 ==Display binary file info== Begin Model Name: ub02302 VersionNumber: FFFFFFFF ReleaseDate: 20250922 ==Display binary file info== End Total binary size after padding: 699208 ##ui32BinDataSumValue: 0x072AFF86 CheckSum: 0x007A Writing 'u-boot.bin'... Write size = 699208 Save binary OK. bfc.exe: 2018-04-5 full load version compress u-boot.bin to u-boot.lz.bin... Input file: 699208 bytes Compressed data: 441647 bytes (63.2%) Full compress, new file size = outsize + 16bytes = 441663 Calculate and write back checksum... Checksum = 0x2684 SYM u-boot.sym CFGCHK u-boot.cfg make[4]: Leaving directory '/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot' (mkdir -p /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/../output_bin; cp -fpR /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/u-boot.xz.img.bin /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/../output_bin/ubi1_bootloader.bin); (cd /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot; source /home/x/nm/platform/nvmp/target/linux/nvt9853x/env_setup.sh /home/x/nm/platform/nvmp/../sdk/soc/nvt9853x/glibc-toolchain-10.4.0 /home/x/nm/platform/nvmp/product_config/s385dpsv1/dts/Linux/cfg_538_IPC_NAND_EVB && make -C ./general_bin_nvt9853x partition=dynamicNand_config DTS_SRC_L=/home/x/nm/platform/nvmp/product_config/s385dpsv1/dts/Linux/cfg_538_IPC_NAND_EVB) make[4]: Entering directory '/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x' 18+0 records in 18+0 records out 73728 bytes (74 kB, 72 KiB) copied, 0.00347511 s, 21.2 MB/s 10+1 records in 11+0 records out 45056 bytes (45 kB, 44 KiB) copied, 0.000306631 s, 147 MB/s copy dts include file... CUR_DIR=/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/.., DTS_DIR=/home/x/nm/platform/nvmp/product_config/s385dpsv1/dts/Linux/cfg_538_IPC_NAND_EVB make[5]: Entering directory '/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/configs' verify /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/../general_bin_nvt9853x/configs/cfg_gen/nvt-evb.dtb skip ep_nvt_memory_cfgs check. make[5]: Leaving directory '/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/configs' dtb size 133985 less than 1048576 32+1 records in 33+0 records out 135168 bytes (135 kB, 132 KiB) copied, 0.000125112 s, 1.1 GB/s 107+1 records in 108+0 records out 442368 bytes (442 kB, 432 KiB) copied, 0.000196792 s, 2.2 GB/s make[4]: Leaving directory '/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x' touch /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/.built make V=ss -j1 clean-staging make[4]: Entering directory '/home/x/nm/platform/nvmp/tp_package/bootloader' /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:84: warning: overriding recipe for target '/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic.txt' /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:84: warning: ignoring old recipe for target '/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic.txt' /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:113: warning: overriding recipe for target '/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic_ubi.txt' /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:113: warning: ignoring old recipe for target '/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic_ubi.txt' rm -f /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.bootloader_installed make[4]: Leaving directory '/home/x/nm/platform/nvmp/tp_package/bootloader' rm -rf /home/x/nm/platform/nvmp/tmp/stage-bootloader mkdir -p /home/x/nm/platform/nvmp/tmp/stage-bootloader/host /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/packages /home/x/nm/platform/nvmp/staging_dir/host/packages find /home/x/nm/platform/nvmp/tmp/stage-bootloader -name '*.la' | xargs -r rm -f; (mkdir -p /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile; cp -fpR /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/../output_bin/* /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile/); (mkdir -p /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile; cp -fpR /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/../output_bin/* /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile/); if [ -d /home/x/nm/platform/nvmp/tmp/stage-bootloader ]; then (cd /home/x/nm/platform/nvmp/tmp/stage-bootloader; find ./ > /home/x/nm/platform/nvmp/tmp/stage-bootloader.files); SHELL= /home/x/nm/platform/nvmp/staging_dir/host/bin/flock /home/x/nm/platform/nvmp/tmp/.staging-dir.flock -c ' mv /home/x/nm/platform/nvmp/tmp/stage-bootloader.files /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/packages/bootloader.list && cp -fpR /home/x/nm/platform/nvmp/tmp/stage-bootloader/* /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/; '; fi rm -rf /home/x/nm/platform/nvmp/tmp/stage-bootloader touch /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.bootloader_installed make[3]: Leaving directory '/home/x/nm/platform/nvmp/tp_package/bootloader' make[2]: Leaving directory '/home/x/nm/platform/nvmp' package/Makefile:101: recipe for target '/home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.package_compile' failed make[1]: *** [/home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.package_compile] Error 2 make[1]: Leaving directory '/home/x/nm/platform/nvmp' /home/x/nm/platform/nvmp/include/toplevel.mk:203: recipe for target 'world' failed make: *** [world] Error 2
09-23
<think>嗯,用户让我详细解析这个nvt_vsp_push_in函数。首先,我需要理解这个函数的功能和各个部分的作用。用户之前已经讨论过nvt_vsp_open,现在继续分析推送视频帧的函数,说明他可能在开发视频处理相关应用,遇到了问题或者需要理解代码逻辑。 用户提到自己是编程菜鸟,所以需要详细解释,可能需要用简单易懂的语言,避免专业术语过多。我需要分解函数的每个部分,解释变量、条件判断、函数调用的作用,以及整个流程。 首先看函数签名,返回HD_RESULT,参数包括句柄、索引和视频帧结构体。函数开始检查参数是否为空,这是基本的错误处理。然后获取主流行上下文,检查状态是否允许操作,这部分和之前的nvt_vsp_open类似,确保模块已启用。 接下来初始化video_frm的字段,比如count设为0,reserved数组填充特定值,ddr_id位移操作。这里可能需要解释位操作和FOURCC的用途,以及为什么需要设置这些值。用户可能对内存布局或协议不太清楚,需要简单说明。 然后是SMART_STITCH宏的条件编译部分。如果启用拼接功能,会处理子流的LUT(查找表)数据,填充到reserved数组中。这里可能需要解释拼接功能是什么,LUT的作用,以及为什么需要从子流上下文中获取。用户可能对图像处理中的拼接技术不了解,需要简要说明。 最后调用hd_videoproc_push_in_buf推送帧数据,返回结果。需要解释这个底层函数的作用,可能涉及缓冲区管理或硬件交互。 用户可能还不太明白为什么需要这些互斥锁、状态检查,或者错误处理机制。需要将这些概念用比喻或简单例子说明,比如检查状态就像确保门已打开才能通过,错误处理防止程序崩溃等。 另外,用户可能对指针操作和结构体嵌套访问不熟悉,比如vsp_ctx->vsp_stream数组的使用,需要详细说明如何通过句柄访问不同流的上下文。 总结来说,我需要分步骤解析函数,解释每个部分的功能,涉及的结构体和函数,以及整体流程,同时用简单语言帮助用户理解复杂的代码逻辑和硬件交互部分。</think>### 函数 `nvt_vsp_push_in` 的详细解析 该函数的核心作用是 **将视频帧数据推送到VSP(Video Signal Processor)硬件进行处理**,具体流程如下: --- #### **1. 函数签名与参数** ```c HD_RESULT nvt_vsp_push_in(const NVT_VSP_HANDLE handle, UINT32 idx, HD_VIDEO_FRAME *video_frm) ``` - **参数说明**: - `handle`:VSP模块的句柄(标识符),指向 `NVT_VSP_CTX` 结构体。 - `idx`:帧索引,用于标识当前帧在缓冲区中的位置。 - `video_frm`:指向视频帧数据的指针(`HD_VIDEO_FRAME` 结构体)。 --- #### **2. 参数合法性检查** ```c if ((NVT_VSP_HANDLE)NULL == handle || NULL == video_frm) { return HD_ERR_PARAM; } ``` - **作用**:检查输入参数是否有效。 - 如果 `handle` 或 `video_frm` 为空指针,返回错误码 `HD_ERR_PARAM`。 - **意义**:防止空指针访问导致程序崩溃。 --- #### **3. 获取主流行上下文** ```c NVT_VSP_STREAM_CTX *mainstream_ctx = &vsp_ctx->vsp_stream[NVT_VSP_MAIN_STREAM]; ``` - **作用**:从 `vsp_ctx`(VSP全局上下文)中获取主流行(Main Stream)的配置信息。 - **结构体关联**: - `vsp_ctx->vsp_stream` 是一个数组,存储主流行和子流的配置。 - `NVT_VSP_MAIN_STREAM` 是主流行在数组中的索引(通常为0)。 --- #### **4. 状态检查** ```c if (!vsp_ctx->state_flag.is_vsp_enable) { return HD_ERR_NOT_ALLOW; } ``` - **作用**:检查VSP模块是否已启用。 - 如果 `is_vsp_enable` 为 `false`,表示VSP未初始化或已关闭,返回错误码 `HD_ERR_NOT_ALLOW`。 - **意义**:确保只有在VSP处于启用状态时才能推送帧数据。 --- #### **5. 视频帧初始化** ```c video_frm->count = 0; video_frm->reserved[0] = MAKEFOURCC('V', 'S', 'P', 'E'); video_frm->ddr_id |= (idx << HD_VIDEO_MULTI_FRAME_SHIFT); ``` - **作用**: 1. `video_frm->count = 0;` 重置帧计数器,用于统计处理次数。 2. `reserved[0] = MAKEFOURCC('V','S','P','E');` 在保留字段中写入标识符 `VSP_E`,用于调试或协议校验。 3. `ddr_id |= (idx << HD_VIDEO_MULTI_FRAME_SHIFT);` 将帧索引 `idx` 编码到 `ddr_id` 的高位,用于多帧缓冲区管理。 --- #### **6. 智能拼接(SMART_STITCH)处理** ```c #if (SMART_STITCH) if (mainstream_ctx->proc_smart_path) { if (vsp_ctx->vsp_stream_nr > 1) { for (UINT32 i = 1; i < vsp_ctx->vsp_stream_nr; i++) { substream_ctx = &vsp_ctx->vsp_stream[i]; video_frm->reserved[2] = nvt_stitch_sample_get_left_lut2d(substream_ctx->stitch_hdl, idx); video_frm->reserved[3] = nvt_stitch_sample_get_right_lut2d(substream_ctx->stitch_hdl, idx); } } video_frm->reserved[4] = nvt_stitch_sample_conv_lut_sel(VPE_ISP_2DLUT_SZ_65X65); video_frm->reserved[5] = nvt_stitch_sample_get_left_lut2d(mainstream_ctx->stitch_hdl, idx); video_frm->reserved[6] = nvt_stitch_sample_get_right_lut2d(mainstream_ctx->stitch_hdl, idx); } #else (VOID) substream_ctx; #endif ``` - **作用**:如果启用了智能拼接功能(`SMART_STITCH`),则填充视频帧的拼接相关参数。 - **关键操作**: 1. 获取子流的拼接参数(如左右LUT查找表地址)。 2. 设置主流行和子流的LUT选择参数。 - **函数说明**: - `nvt_stitch_sample_get_left_lut2d/handle, idx)`:获取LUT表地址。 - `nvt_stitch_sample_conv_lut_sel(size)`:选择LUT表的大小(如65x65)。 - **意义**:为多摄像头拼接提供几何校正参数。 --- #### **7. 推送帧数据到VSP硬件** ```c ret = hd_videoproc_push_in_buf(mainstream_ctx->proc_path, video_frm, NULL, 0); if (HD_OK != ret) { return ret; } ``` - **作用**:调用底层函数 `hd_videoproc_push_in_buf` 将视频帧推送到VSP硬件。 - `mainstream_ctx->proc_path`:主流行路径的句柄。 - `video_frm`:视频帧数据。 - `NULL, 0`:扩展参数(未使用)。 - **意义**:将帧数据交给硬件进行缩放、编码或拼接处理。 --- #### **8. 返回值** - 如果推送成功,返回 `HD_OK`。 - 如果失败(如硬件忙或参数错误),返回错误码(如 `HD_ERR_NOT_ALLOW`)。 --- ### **总结流程** 1. **参数检查** → 2. **状态验证** → 3. **帧初始化** → 4. **拼接参数填充**(可选) → 5. **推送帧到硬件** ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值