同样首先找到这句话在程序中的位置,如下:
/lib_arm/eabi_compat.c
int raise (int signum)
{
printf("raise: Signal # %d caught\n", signum);
return 0;
}
再搜索这个函数的调用情况,可是怎么找不到对应的程序,不知道为什么?求解?
没能找到根本原因,后面我就定位在那个函数运行的时候打印了上述信息,通过分析跟踪得到如下函数:
inline int read_env(struct mmc *mmc, unsigned long size,
unsigned long offset, const void *buffer)
{
uint blk_start, blk_cnt, n;
blk_start = ALIGN(offset, mmc->read_bl_len) / mmc->read_bl_len;
//打印了一次
blk_cnt = ALIGN(size, mmc->read_bl_len) / mmc->read_bl_len;
//打印了一次
n = mmc->block_dev.block_read(mmc_env_devno, blk_start,
blk_cnt, (uchar *)buffer);
return (n == blk_cnt) ? 0 : -1;
}
通过查看其中的变量知道,mmc->read_bl_len = 0;分母不能为0,分析可能是分母为0的时候程序就发生了中断去打印了raise: Signal # 8 caught。但是怎么去打印的还是不得而知?
因为上述问题是我在添加spi nor flash初始化之后出现的,之后通过搜索在mmc结构体初始化的时候没有对结构体清0,导致其中的变量有问题,添加清零函数之后就没有问题了。
以上问题主要针对imx53 中对应的 mx3_loco程序。(uboot-2009.08)