免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2198 | 回复: 0
打印 上一主题 下一主题

MINI2440开发笔记---搭建GCC+JLINK开发调试环境 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-12 15:42 |只看该作者 |倒序浏览

                                                                                a) 安装VMware   --- just do it.
b) 安装arm-elf-gcc toolset --- we can get it from:
http://www.gnuarm.com/
c) 安装JLINK软件 --- just get it from SEGGER website.
d) 实现2440 gdb 启动脚本:
   1) 参阅JLinkGDBServer文档,如下:

       
        文件:UM08005_JLinkGDBServer.pdf
        大小:509KB
        下载:
下载
       
   
  2) 此gdb启动脚本的主要任务是初始化内存控制器,禁止WatchDog,禁止中断。
     参考JLinkGDBServer文档后,经测试,以下代码可以正常工作:
  ##main function defined for initial the S3C2440 CPU.
  define reset_2440
    monitor endian little  ##little endian, should be the same as your application.
   
    ##copied from JLinkGDBServer Document.
    monitor reset            ##reset the S3C2440
    monitor reg cpsr = 0xd3  ##setup cpsr register.
    monitor speed auto       ##Link Speed.
   
    ##translated from VIVI S3C2440 version.
    #disable watchdog
    monitor MemU32 0x53000000 = 0
   
    #disalbe interrupt --- int-mask register
    monitor MemU32 0x4A000008 = 0xFFFFFFFF
   
    #disalbe interrupt --- int-sub-mask register
    monitor MemU32 0x4A00001C = 0x7FFF ## vivi set it as 0x7FF, why???
   
    #initialize system clocks --- locktime register
    monitor long 0x4C000000 = 0xFF000000
   
    #initialize system clocks --- clock-divn register
    monitor long 0x4C000014 = 0x5            #CLKDVIN_400_148
   
    #initialize system clocks --- mpll register
    monitor long 0x4C000004 = 0x7f021    #default clock
   
    #setup memory controller
    monitor MemU32 0x48000000 = 0x22111110    #conw
    monitor MemU32 0x48000004 = 0x00000700    #bank0
    monitor MemU32 0x48000008 = 0x00000700     #bank1
    monitor MemU32 0x4800000c = 0x00000700     #bank2
    monitor MemU32 0x48000010 = 0x00000700     #bank3
    monitor MemU32 0x48000014 = 0x00000700     #bank4
    monitor MemU32 0x48000018 = 0x00000700     #bank5
    monitor MemU32 0x4800001c = 0x00018009     #bank6
    monitor MemU32 0x48000020 = 0x00018009     #bank7
    monitor MemU32 0x48000024 = 0x008e04eb     #vREFRESH
    monitor MemU32 0x48000028 = 0xB2        #vBANKSIZE -- 128M/128M --- should
                                                       according to the physical
                                                       memory size? --- 0xB0 ??
    monitor MemU32 0x4800002c = 0x30        #vMRSRB6
    monitor MemU32 0x48000030 = 0x30        #vMRSRB7        
  end
  ##main function defined for connect to the TARGET.
  ##arg0 = IP address.
  ##arg1 = PORT number of JLINK gdb server.
  define connect_jei
    if $argc == 2
        target remote $arg0:$arg1
        reset_2440
    end
  end
3) 脚本做好以后,以下命令为怎样使用该脚本---假设该脚本名字为targets.cmd,编译出的程序文件为main.out
arm-elf-gdb -x targets.cmd -ex "connect_jei 192.168.1.168 2331" main.out

然后在gdb命令行中输入以下命令即可调试了:
load
b main
c
4) 实现2440 C语言启动基本配置,用汇编实现。
   在启动代码中,我们只需要设置SP,FP寄存器即可。
   代码如下:
   .global _start
   .extern main
   .text
   _start:
        mov  r11, #0x0           @@fp
        mov  sp,  #0x31000000    @@sp = 0x30000000+16M
        1:   bl   main           @@call main()
        b    1b                  @@loop forever.   
   .end
   
   同时需要实现的是Link脚本,如下:
   OUTPUT_ARCH(arm)
   ENTRY(_start)
   SECTIONS
   {
    . = 0x30000000;
    .text :
    {
        *(.text)
    }
    . = ALIGN(8192);
    .data :
    {
        *(.data)
    }
    .bss :
    {   
        *(.bss)
    }
   
    /* Stabs debugging sections. */
   
    .stab 0 : { *(.stab) }
    .stabstr 0 : { *(.stabstr) }
    .stab.excl 0 : { *(.stab.excl) }
    .stab.exclstr 0 : { *(.stab.exclstr) }
    .stab.index 0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) }
    .comment 0 : { *(.comment) }
    .debug_abbrev 0 : { *(.debug_abbrev) }
    .debug_info 0 : { *(.debug_info) }
    .debug_line 0 : { *(.debug_line) }
    .debug_pubnames 0 : { *(.debug_pubnames) }
    .debug_aranges 0 : { *(.debug_aranges) }
   }
   
   main.c 内容如下:
   int main(void)
   {
    int i = 0;
    while(1)
    {
        i++;
        
    }
    return 0;
   }
   makefile 如下:
AS = arm-elf-as
CC = arm-elf-gcc
LD = arm-elf-ld
ROM = arm-elf-objcopy
DAS = arm-elf-objdump
AFLG = -mcpu=arm920t -g -mlittle-endian
INSIGHT = arm-elf-insight
GDB     = arm-elf-gdb
all:
    $(AS) $(AFLG) init.S -o init.o
    $(CC) $(AFLG) -c main.c -o main.o
    $(LD) -g -EL -nostdlib -Bstatic -Tlink.lds init.o main.o -o main.out
    $(ROM) -O binary -R .comment -R .note -S main.out main.bin
    $(DAS) --architecture=arm -D main.out > dump.txt
debug:
    $(GDB) -x targets.cmd -ex "connect_jei $(TARGET) $(PORT)" main.out
insight:
    $(INSIGHT) -x targets.cmd -ex "connect_jei $(TARGET) $(PORT)" main.out
在使用make debug 以及make insight 之前,需要设中级TARGET以及PORT变量。
完整的开发源码包如下:

       
        文件:2440_gdb_test.rar
        大小:6KB
        下载:
下载
       
直接用命令行调用GDB调试的命令如下:
arm-elf-gdb -x targets.cmd -ex "connect_jei 192.168.1.168 2331" main.out
然后在gdb命令窗口中输入如下命令即可调试:
load
b _start
b main
c
               
               
               
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94507/showart_1898534.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP