您好!
我们有一个存储在 NOR 存储器中的 SBL、它工作正常。 SBL 的大小约为210kB。 当调试另一个问题时、我尝试通过添加一些虚拟数据来增大 SBL 的大小、以便二进制文件超过256KB。 一旦我超过此值、配置 Ammu 时、执行就会停止。 只要 SBL 的大小低于256KB 就没有问题。
导致问题的实际呼叫就是这样。 是否有任何建议导致 SBL 大小增加的原因? 根据文档、图像尺寸可高达504kB。
/*中等页面转换 * RBL 映射的页面第0页:p.a. 0x40300000至 V.A.0x00300000 * SBL 重新映射第一个中等页面,因此通过 RBL 清除第一页映射 */ pageConfig.ammuPageType = Ammu_page_type_medium; pageConfig.ammuPageNum = 1U; pageConfig.RegVal = 0U ;pageConfig.regphysicalAddress=0U;pageConfig.PagephysicalAddress=0U;pageConfig.PagephysicalAddress=0U;page. AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig);
此代码取自 tda3xx/src/sbl/ti/boot/sbl_auto/sbl_utils/src/tda3xx/sbL_utils_tda3xx.c、函数为 void SBLUutilsConfigIPU1DefaultAMMU (void)
额外信息。 我们在 XTDA3SXXBDABFQ1上运行、链接器文件如下所示。
/** *\file lnk_tda3xx_M4_NOR.cmd * \brief 此文件包含辅助 *引导加载程序(SBL)在 tda3xx SoC 的 NOR 引导模式下使用的系统内存映射。 * *\版权所有(C) 2014德州仪器(TI)公司- * http://www.ti.com/ */ -stack 0x1000 //软件栈大小*/ -heap 0x1000 //堆区域大小*/ /*指定系统内存映射*/ 内存 { IRAM_MEM:org = 0x00000000 len = 0x4000 // IRAM * / OCMCRAM1_0: org = 0x00300000 len = 0x00000100 // OCMC RAM 映射 到0x40300000 */ OCMCRAM1_1:org = 0x00300100 len = 0x00000100 // OCMC RAM 映射 到0x40300100 */ OCMCRAM1_2:org = 0x40300200 len = 0x00000100 // OCMC RAM *= 0x0030000000100 */ OCMCRAM1_2:org = 0x40300* OMCRAM1_RAM = 0x40000300*= 0x400003001: org = 0x00300400 len = 0x0007FC00 // OCMC RAM 映射 到0x40300300 */ NOT_0:org = 0x08000000 len = 0x00000200 // NOR 内存寄存器1 - NOR Init 代码*/ NOT_1:org = 0x08000200 len = 0x00000100 // NOR 内存寄存器2 - IPU Core1 Init *: org = 0x08000300 len = 0x03FFFD00 /* NOR Memory Region3 - Common */ } //*指定段分配到内存*/ SECTIONS { .intvecs:load > NOT_2 .intc_text:load > NOR_2 .SBL_init:load > NOR_0 .ipu1_init:load > NOR_1 .init:load:NOT_1 .init: load > nor_2 .text:load > nor_2 /* code */ .data:load = nor_2,run = OCMCRAM1_3 load_start (dataLoadStart) load_end (dataLoadEnd) run_start (dataRunStart) .const:load > nor_2 /*全局常量*/ .cinit:load > bss_2:load load > OCMCRAM1_3 //未初始化或零初始化*// *全局和静态变量*/ run_start (bssStart) run_end (bssEnd) .stack:load > OCMCRAM1_3 /*软件系统堆栈*/ run_start (stackStart) run_end (stackEnd) .plt:load > ocMCRAM1_2: >OCMDR_2 .img .load:>OCM_2 LOAD > OCMCRAM1_4 .tesoc_img:LOAD > OCMCRAM1_3 }
导致崩溃的整个函数。 如果已注释出有故障的呼叫、则该呼叫之后还有其他导致错误的呼叫。
void SBLUtilsConfigIPU1DefaultAMMU (void) { ammuPageConfig_t pageConfig ={0U}; uint32_t INDEX; //大页面转换 * RBL 映射的页面:第0页:p.a. 0x08000000至 VA. 0x08000000 * SBL 重新映射剩余大页面、因此按 VRL 清除页面 映 射*// pageallocalu.pageConfig = 0U.page.PageAddress = 0U.page.PageConfig = 0U.PageConfig = rgallyagure.PageConfig = 0U.PageAddress 对于(索引= 1U;索引< Ammu_NUM_LARGE_PAGES;索引++) { pageConfig.ammuPageNum =索引; AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); } //第一个大页面映射:p.a. 0x40000000U V.A 0x40000000U */ pageConfig.ammuPageType = Ammu_page_type_large; pageConfig.amuPageNum = 1U; policyConfig.RegVal = sbagle_amma_amagle_am1u_amagle_amddr_am1_agle_amagle_am1u_amagle1 ;page1 amddr_am_amagle_amagle_amagle_amagle_amagle_am1u_amagle_amagle_amagle_am1u_agle1;page1 amagle_am_ AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第二大页面映射:p.a. 0x80000000U V.A 0x80000000U */ page Config.ammuPageType = Ammu_page_type_large; pageConfig.ammuPageNum = 2U; policyConfig.RegVal = SBML_arge_sepage2 ;amagle_amagle_amagle_amddr_ap_ap_amagle_amagle_amagle_amagle_amagle.xx = 2;page2 amagle_amagle_amagle_amagle_amddr_am_am_amagle_ap_amagle_ap_amagle_ap_amagle_ap_amagle AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第三大页面映射:p.a. 0x80000000U V.A 0xA0000000U */ pageConfig.ammuPageType = Ammu_page_type_large; pageConfig.ammuPageNum = 3U; policyConfig.RegVal = sbagram_amagle_am3mu_amddr_am_agle_amagle_am3_amagle_amagle_amagle_am3mu_axx ;page_amagle_amddr_am3_am_am_am_amagle_ap_am_amagle_ap_amagle_axx = 3_am_amagle_am_am_amu_ AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //中等页面转换 *由 RBL 映射的页面第0页:p.a. 0x40300000至 V.A.0x00300000 * SBL 重新映射第一个媒体页面,因此按 RBL 清除第一页映射 */ pageConfig.ammuPageType = amagicalPage0U_PageConfig = amage.PageNum;page.PageConfig=page=page.Page0U.Page.PageNum = Page.Page.Page.PageNum =页面;Page.Page.Page.Page.Page.Page.PageNum =.Page.Page.Page.PageNum = AMMUConfigPage (SOC_IPU1_UNICACMED_MMU_base、&pageConfig); //第一个媒体页面映射:p.a. 0x55020000U V.A 0x000000U */ page Config.ammuPageType = Ammu_page_type_medium; pageConfig.amuPageNum = 1U; pageConfig.policyRegVal = SBL_amudu_1u_amdma_1_amddr_am1_ag_am1u_amagram_am1u_amag1u_ma_ma_amddr_1;page1 am1_amagu_ap_am1u_amdma_am1u_agu_ma_am1u_agu_am1u_ma_amdma_am1u_agu. AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //小页转换 *设计映射的页面第一页:p.a. 0x55080000至 V.A. 0x40000000 *更改此页的策略以映射16 KB 而不是4 KB * SBL 在第一个媒体页面中重新映射 IPU RAM。 清除 ROM 和 RAM 映射* 由 RBL 完成 * pageConfig.ammuPageType = Ammu_page_type_small; pageConfig.policyRegVal = 0U; pageConfig.physicalAddress = 0U; pageConfig.logicalAddress = 0U; for (index = 0U;index < Ammu_NUM_SMAL_PAGES;index++) { if (1U!=索引) { pageConfig.ammuPageNum =索引; AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); } } //第0个小页映射:p.a. 0x43300000U VA. 0x63300000U */ pageConfig.amumuPageType = Ammu_page_type_small; pageConfig.policyRegVal = SBL_utils_TDA3XX_Ammu_small_PAGE0_policy;pageConfig.ammu_http_utils_ma_tddr_ma_ma_ma_agure.ap_a0_amagram_agram_agram_agram_ma_ma_ma_address0 ;pageConfig_ap_am_amagram_ap_ap_ma_ma_ma_ap_amagure_a0_ma_amagram_ma_ap_ AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第一个小页映射:p.a. 0x55080000U VA. 0x40000000U */ page Config.ammuPageType = Ammu_page_type_small; pageConfig.policyRegVal = SBL_utils_TDA3XX_amagle_amagle_amagle_1 ;page1 = Ammu_amagle_amagle_1;pageConfig = amagle_amagle_amagle_amagle_amagle_1;page1;page1 = amagle_agle_am_amagle_amagle_agle_agle_agle_agle_amagle_agle_amagle1 AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第二个小页映射:p.a. 0x43304000U VA. 0x63304000U */ pageConfig.ammuPageType = Ammu_page_type_small; pageConfig.regVal = SBL_utils_TDA3XX_Ammu_Page2 ;sbagle_am_amagle_amagle_address_am2_amagle_amagle_amagle_amagle_amagle_amagle_amagle_amagle_amagle.xx;pageConfig = AmpageConfig.ap_ap_am_am_agle_agle_ap_ap_agle_agle_ap_agle_agle_am AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第三个小页映射:p.a. 0x42081000U VA. 0x62081000U */ page Config.ammuPageType = Ammu_page_type_small;pageConfig.reguls=SBL_utils_TDA3XX_amagle_am3mu_ategure_am_am_PageADDR_3mu_ampage_ampage_ampage3; pageConfig = Amul_ature_PageConfig_ature_ategure_Page_am_3_am_ampage_ampage_address_ampage_am_ampage_ampage3;page_ature_ategure_am_ampage3;page_ature_am_am_ AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第4个小页映射:p.a. 0x4208B000U VA. 0x6208B000U */ page Config.ammuPageType = Ammu_page_type_small; pageConfig Config.reguls=SBL_utils_TDA3XX_ammu_page4 ;page_amagle_amulation_am_amagle_4_amagle_mu_mu_amagle_amagle_amagle_mu_mu_mu_mu_4;page= amul_amagle_am_amagle_agle_amagle_amagle_mu_agle_mu_mu_mu_am AMMUConfigPage (SOC_IPU1_UNCH_MMU_base、&pageConfig); //第5个小页映射:p.a. 0x4208C000U VA. 0x6208C000U */ pageConfig.amMUPageType = AmADDR_PAGE_TYP_TYPE; pageConfig.PageRegVal = 0x4208C000_TDA3CU_TDAmu * ;page5 Amul_Amultrag_ADDR_ADDR_5_page5;page_Amulation_Ampage_ADDR_5_Ampage_ADDR_5_Ampage_5_Amulation_5;page_Ampage_Amulation_Ampage_Ampage_ADDR_address_mu_mu_mu_mu_mu_mu_page AMMUConfigPage (SOC_IPU1_UNCH_MMU_base、&pageConfig); //第6个小页映射:p.a. 0x4883A000U VA. 0x6883A000U */ pageConfig.AMMUPageType = AMADDR_PAGE_PAGE_MAP_SIMPLE_ADDRVAL = AM6_PAGE_AMADDR_PAGE_MEM_MEM_SIMPLE_ADDR_PLE_PAGE6_ADDR_PEST_PLEADDR_PAGE_ADDR_PAGE_ADDR_MINEST_PEST_PLET.xx = AM_ADDR_ADDR_PAGE_PAGE_ADDR_ADDR_PEST_PLE_ADDR_PAGE_EST_PEST_PLE_ADDR_ADDR_EST_PLET.xx = AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第七个小页映射:p.a. 0x420A0000U VA. 0x620A0000U */ page Config.ammuPageType = Ammu_page_type_small; pageConfig Config.RegVal = SBL_utils_TDA3XX_page_ammu_7_agle_amagle_amagle_amagle_7_amagle_amagle_amagle_amagle7 ;pageConfig = AM3mu_amagle_amagle_am_am_amagle_am_amagle_ap_agle_agle_agle_ap_amagle7;page_agle_ap_am_am_amagle AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); //第八个小页映射:p.a. 0x42086000U VA. 0x62086000U */ page Config.ammuPageType = Ammu_page_type_small;pageConfig.reguls=SBL_utils_TDA3XX_page8_ammu_agle_amagle_amagle_ADDR_8_am18_amagle_agle_am_amagle_amagle_agle_mu.xx; pageConfig.ADDR_agle_am_agle_am_am_agle_agle_am_agle_am_agle_agle_am_agle_am_agle_am_agle_am_am AMMUConfigPage (SOC_IPU1_UNICACHE_MMU_base、&pageConfig); }