android系统无法开始烧录,问题可能是IC不支持当前烧录的系统镜像,而IC对系统的支持是依靠IROM来判别的。因此我们需要让该系统支持这颗IC(前提,IC本身是支持此系统的)
首先,我们要看此代码是否支持此类型的IC,查看文件
include/infotm/cpuid.h
#define IROM_IDENTITY readl(IROM_BASE_PA + 0x48)
3
4 #define IX_CPUID_820_0 0x3c00b02c
5 #define IX_CPUID_820_1 0x3c00b030
6 #define IX_CPUID_X15 0x3c00aca0
7 #define IX_CPUID_X9 0x3c00ddb8
8 #define IX_CPUID_X9_NEW 0x3c00dda0
9 #define IX_CPUID_X15_NEW 0x3c00ddc8
查看是否有自己需要支持IC的宏定义。如果这里没有相关宏定义,则说明此代码无法支持这颗IC,无需继续了。
在支持的基础上,需要在编译时定义该宏,并给相应的打印提示,文件路径:infotm/drivers/pmu/batt_imapx800.c
宏定义 :
57 #define AP_IX_CPUID_820_0 0x3c00b02c
58 #define AP_IX_CPUID_820_1 0x3c00b030
59 #define AP_IX_CPUID_X15 0x3c00aca0
60 #define AP_IX_CPUID_X15_NEW 0x3c00ddc8
对应选择:
/* get cpu id */
251 batt_item.ap_version= readl(0x04000000 + 0x48);
252 if(batt_item.ap_version == AP_IX_CPUID_X15)
253 {
254 BATT_LOG("CPU IS IMAPX15 \n");
255 }
256 else if(batt_item.ap_version == AP_IX_CPUID_820_1)
257 {
258 BATT_LOG("CPU IS IMAPX820_1 \n");
259 }
260 else if(batt_item.ap_version == AP_IX_CPUID_820_0)
261 {
262 BATT_LOG("CPU IS IMAPX820_0 \n");
263 }
264 else if(batt_item.ap_version == AP_IX_CPUID_X15_NEW)
265 {
266 BATT_LOG("CPU IS IMAPX15_NEW \n");
267 }
268 {
269 BATT_LOG("CPU IS UNKNOWN \n");
270 }
271
272 BATT_LOG("batt_item_init() end \n");
以上问题OK以后,查看 u00/board/infotm/imapx/Makefile 看有没有生成对应的 .S文件,如果没有需要生成对应的.S文件,格式如下所示
82 $(obj)iex_2939.c:
83 @rm -f $@
84 $(src)gen-entry.sh 2939 $(src)labels $(SRCTREE)/iromasm/i2939.S > $@
85
86 $(obj)iex_2974.c:
87 @rm -f $@
88 $(src)gen-entry.sh 2974 $(src)labels $(SRCTREE)/iromasm/i2974.S > $@
89 $(obj)iex_4eadb12.c:
90 @rm -f $@
91 $(src)gen-entry.sh 4eadb12 $(src)labels $(SRCTREE)/iromasm/i4eadb12.S > $@
在nand_spl/board/infotm/imapx/boot_main.c 中判断选择对应的.S我文件
510 void boot_main(void)
511 {
512 int i;
513 int ret = 0, bootst;
514 uint32_t tmp = 0, flag =0;
515
516 // assign irom functions
517 if(IROM_IDENTITY == IX_CPUID_820_0)
518 irf = &irf_2885;
519 else if(IROM_IDENTITY == IX_CPUID_820_1)
520 irf = &irf_2939;
521 else if(IROM_IDENTITY == IX_CPUID_X15)
522 irf = &irf_2974;
523 else if(IROM_IDENTITY == IX_CPUID_X15_NEW)
524 irf = &irf_4eadb12;
525 #if defined(CONFIG_IMAPX_FPGATEST)
526 else if(IROM_IDENTITY == IX_CPUID_X9)
527 irf = &irf_cde7869;
528 #else
529 else if(IROM_IDENTITY == IX_CPUID_X9)
530 irf = &irf_c31c431;
531 else if(IROM_IDENTITY == IX_CPUID_X9_NEW){
532 irf = &irf_4eadb12;
533 flag = 1;
534 }
最后,最好可以跟之前其他代码支持的.s文件对比,看文件是否相同,如还是无法识别,可替换.s文件重新编译烧录。