歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> u-boot-2011.06在基於S3C2440開發板的移植之解決raise: Signal # 8 caught

u-boot-2011.06在基於S3C2440開發板的移植之解決raise: Signal # 8 caught

日期:2017/3/1 11:11:44   编辑:Linux編程

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

相關閱讀:

U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm

U-Boot-2011.06啟動流程分析 http://www.linuxidc.com/Linux/2011-07/39310.htm

u-boot-2011.06在基於s3c2440開發板的移植之編譯配置 http://www.linuxidc.com/Linux/2011-10/45455.htm

u-boot-2011.06在基於s3c2440開發板的移植之NorFlash啟動 http://www.linuxidc.com/Linux/2011-10/45456.htm

u-boot-2011.06在基於S3C2440開發板的移植之解決raise: Signal # 8 caught http://www.linuxidc.com/Linux/2011-10/454554.htm

u-boot-2011.06在基於s3c2440開發板的移植之支持NandFlash讀寫 http://www.linuxidc.com/Linux/2011-10/45457.htm

u-boot-2011.06在基於s3c2440開發板的移植之硬件ECC http://www.linuxidc.com/Linux/2011-10/454558.htm

其實把這個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了。

Copyright © Linux教程網 All Rights Reserved