• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > Powerpc構架系統內核和內核模塊調試

    Powerpc構架系統內核和內核模塊調試

    作者: 時間:2012-07-25 來源:網絡 收藏

    說明:

    本文引用地址:http://www.czjhyjcfj.com/article/148724.htm

    此文檔的目標為freescale MPC8349E-mITX,對其他采用powerPC,MIPS,ARM的芯片的亦具有參考意義。 此文檔中為了簡化,采用目標中的UBOOT初始化目標板,并通過UBOOT或者BDI2000加載到目標板的RAM中。

    1. BDI2000配置:

    下面是MPC8349E-mITX的BDI2000配置文件,

    ; BDI-2000 CONfiguraTIon file for the MPC8349E-mITX

    ; Tip: If after a reset, the BDI-2000 fails to halt at 0x100,

    ; you may need to power-down the bOArd for a few seconds.

    [INIT]

    ; we use UBOOT to initialize the board

    [TARGET]

    CPUTYPE 8349

    JTAGCLOCK 1

    ;STARTUP RESET

    STARTUP RUN

    BREAKMODE HARD

    STEPMODE HWBP

    BOOTADDR 0x00000100

    ;If you're getting Writing to workspace failed errors during flash operations,

    ;then try uncommenting this line instead. This moves the FLASH window to

    ;high memory, leaving low memory available for DDR.

    RCW 0xb060a000 0x04040000 ;Set the HRCW to boot the image at 0xFE000000

    MMU XLAT ;0xc0000000

    PTBASE 0xf0 ;

    [HOST]

    IP 192.168.7.90

    FILE $u-boot.bin

    LOAD MANUAL

    PROMPT 8349E-mITX-GP>

    DUMP itx-dump.bin

    [Flash]

    CHIPTYPE AM29BX16

    CHIPSIZE 0x800000

    BUSWIDTH 16

    ;WORKSPACE 0x1000

    FORMAT BIN 0xfe000000

    ;flash_image.bin is an image file of an entire 8MB flash region.

    ;Flash this file at 0xfe0000000 to restore all of flash.

    ;ERASE 0xFE000000 0x10000 127 ; 127 sectors @ 64KB each

    ;ERASE 0xFE7F0000 0x2000 8 ; 8 sectors @ 8KB each

    ;FILE $flash_image.bin

    ;Use these lines if you just want to flash U-Boot

    ERASE 0xfe000000 0x10000? 4; Erase 384KB, each sector is 64KB

    FILE? mpc8349e/u-boot131-mitx-gp.bin

    [REGS]

    FILE $reg8349e.def

    以上配置文件的【HOST】段的IP要改為主機IP,關鍵的字段MMU XLAT 和PTBASE 是POWERPC和MIPS經常需要設置的,關于PTBASE的具體設置,超出本文范圍,詳細情況請參考BDI2000的手冊

    2.修改和配置

    為了能夠內核,需要在內核中的Makefile中增加如下選項:

    CFLAGS 增加C代碼調試選項-g –ggdb

    AFLAGS 增加匯編代碼調試選項:-Wa,-L -gdwarf-2

    去掉CFLAGS編譯選項中-fomit-frAME-pointer

    GCC的-fomit-frame-pointer選項是優化函數棧回溯(stack backtrace)的,我們調試的時候需要提供函數回溯能力,所以我們要去掉這個選項,當然,有的系統系統不受它的影響,或者說它不起作用,為了統一,我們統一去掉它。

    相對個案來說,我是做如下改動的:

    --- Makefile 2008-07-08 03:07:38.000000000 +0800

    +++ Makefile.debug 2008-07-08 03:06:04.000000000 +0800

    -CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)

    +ifdef CONFIG_DEBUG_INFO

    +

    + CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE) -g -ggdb

    -CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs

    + CFLAGS := $(CPPFLAGS) -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs

    -fno-strict-aliasing -fno-common

    -AFLAGS := -D__ASSEMBLY__

    + AFLAGS := -D__ASSEMBLY__ -Wa,-L -gdwarf-2

    +else

    + CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)

    + CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs

    + -fno-strict-aliasing -fno-common

    + AFLAGS := -D__ASSEMBLY__

    +

    +endif

    @@ -491,27 +500,33 @@

    # Defaults vmlinux but it is usually overridden in the arch makefile

    all: vmlinux

    -ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE

    -CFLAGS += -Os

    -else

    -CFLAGS += -O2

    -endif

    include $(srctree)/arch/$(ARCH)/Makefile

    -ifdef CONFIG_FRAME_POINTER

    -CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)

    -else

    -CFLAGS += -fomit-frame-pointer

    -endif

    ifdef CONFIG_UNWIND_INFO

    CFLAGS += -fasynchronous-unwind-tables

    endif

    -ifdef CONFIG_DEBUG_INFO

    -CFLAGS += -g

    -endif

    +#ifdef CONFIG_DEBUG_INFO

    +CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)

    +CFLAGS += -g -ggdb

    +CFLAGS += -O

    +#else

    +

    +# ifdef CONFIG_FRAME_POINTER

    + CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)

    +# else

    + CFLAGS += -fomit-frame-pointer

    +# endif

    +

    +# ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE

    + CFLAGS += -Os

    +# else

    + CFLAGS += -O2

    +# endif

    +

    +#endif

    通過以上修改后,系統的的調試信息簡單的通過CONFIG_DEBUG_INFO宏來控制了,那么CONFIG_DEBUG_INFO宏又是從哪里來的呢?它其實是從內核的配置文件.config里面來的。

    一般內核通過make menuconfig做配置的時候,都有

    Kernel hacking --->

    [*] Kernel debugging

    [*] Compile the kernel with debug info

    [*] Force gcc to inline functions marked 'inline' (2.6比較新的內核有這一項)


    上一頁 1 2 3 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 肇庆市| 巴彦淖尔市| 建水县| 饶阳县| 泸西县| 将乐县| 望江县| 黑水县| 贞丰县| 安岳县| 洛隆县| 九寨沟县| 资源县| 景谷| 荥经县| 郑州市| 白朗县| 乐东| 岢岚县| 拉萨市| 延安市| 中方县| 祥云县| 和田县| 盈江县| 富顺县| 佛冈县| 教育| 奎屯市| 吉木乃县| 松潘县| 砀山县| 东乡| 宜黄县| 石柱| 通榆县| 惠来县| 凤山县| 策勒县| 洱源县| 梁河县|