u-boot-2011.06 raise: Signal # 8 錯誤修正

 轉自趙春江:http://blog.csdn.net/zhaocj/article/details/6667758

在上一篇文章中提到,在開發板上電後,會出現“raise: Signal # 8 caught”。這雖然不影響系統的正常運行,但也是一個不小的bug,也許會影響以後u-boot-2011.06的移植,因此我們有必要把這個bug去除掉。

 

其實把這個bug去掉也很簡單,就是把time.c(在arch/arm/arm920t/s3c24x0目錄下)這個文件中的四個全局變量用gd這個數據結構中的4個相關成員代替就可以了,具體的就是:

timer_load_val用gd->timer_rate_hz替代;

timer_clk用gd->tbl替代;

timestamp用gd->timer_reset_value替代;

lastdec用gd->lastinc替代。

下面我們就列出time.c這個文件具體需要修改的地方:

去掉第38行和第39行關於timer_load_val和timer_clk這兩個變量的聲明,並加上下面代碼:

38:DECLARE_GLOBAL_DATA_PTR;

去掉第49行和第50行關於timestamp和lastdec這兩個變量的聲明;

去掉第60行至第68行語句(if (timer_load_val == 0)的判斷內容),改爲:

60:gd->timer_rate_hz = get_PCLK() /(2*16*100);

61:gd->tbl = get_PCLK() / (2 * 16);

剩下需要修改的內容就是具體的變量替換,其中每條語句前面的行號爲源文件的行號:

70:gd->lastinc = gd->timer_rate_hz;

71:writel(gd->timer_rate_hz,&timers->tcntb4);

78:gd->timer_reset_value = 0;

99:gd->timer_reset_value = t;

108:tmo *= (gd->timer_rate_hz * 100);

118:gd->lastinc = READ_TIMER();

119:gd->timer_reset_value = 0;

126:return tmr / (gd->tbl / CONFIG_SYS_HZ);

137:tmo *= (gd->timer_rate_hz * 100);

140:tmo = usec * (gd->timer_rate_hz * 100);

160:if (gd->lastinc >= now) {

162:gd->timer_reset_value += gd->lastinc -now;

165:gd->timer_reset_value += gd->lastinc + gd->timer_rate_hz- now;

167:gd->lastinc = now;

169:return gd->timer_reset_value;

181:tbclk = gd->timer_rate_hz * 100;

通過上述的修改,我們再上電啓動後,就不會再有raise: Signal # 8 caught了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章