Hi Wilbur, wilbur.chan wrote: > mips64 , xlr732 > > I've added a test command in uboot, say, > U_BOOT_CMD(test_globa,...do_test_global) ,which is in cmd_command.c > > And in cmd_command.c, there is also a global string array ,say ,char* > p = "test"; > > In do_test_global, I used pointer to access elements of array p like this: > > char c = *(char*)p; > > it seemd that , the code above caused uboot dead and print nothing ,I > guess that,maybe there was a memory access violation. > > Any suggestions on how could this happended? Thank you in advance
Just a guess, but I suspect your are getting bitten by the manual pointer relocation issue. Your char *p is pointing into flash, but you are dereferencing the pointer after relocation to RAM, running out of RAM with a different memory map than power-on-reset (initialization has completed). I suspect your flash image is no longer where it was on release of reset and thus dereferencing *p now tries to read an invalid memory location, causing your "hang." If you really need the pointers, you need to manually relocate them. See ./include/asm-mips/global_data.h and the function void board_init_r (gd_t *id, ulong dest_addr) in lib_mips/board.c. The bottom line is that you probably need to add gd->reloc_off to your compiled-in pointers: *(p + gd->reloc_off) [snip] gvb _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot