在移植uboot时编译一切正常,但uboot启动中加载自己写的网卡驱动出现问题,一直在打印raise:Signal #8 caught
google 百度了一番,也有很多人遇到了这个问题,大家都说出了解决问题的办法,
就是自己编写的驱动中有出现除以0的误操作,就会一直打印raise:Signal #8 caught
将除操作改为位移操作,或者避免除数为0,就可以解决这个问题。
那为什么有除以0的操作就会引发raise: Signal #8 caught ? 来分析一番!
遇到错误打印,首先要找到打印来源于哪个函数,在uboot源码中grep一把,找到该打印的来源,在arch/arm/lib/eabi_compat.c中,如下:
int raise (int signum)
{
/* Even if printf() is available, it's large. Punt it for SPL builds */
#if !defined(CONFIG_SPL_BUILD)
printf("raise: Signal # %d caught\n", signum);
#endif
return 0;
}
eabi_compat.c是为符合eabi接口的工具链提供一些通用的函数。
看到raise函数的实现,感觉参数signum好像是代表信号的意思(C语言中变量名是多么重要啊!),想起在网络编程中有一个函数raise是用来自身进程发信号。
那么这里一直打印signal #8 caught&#