BCC - HPECLab/tutorials GitHub Wiki

#一、介绍 BCC(Bare-C Cross-Compiler),LEON3处理器的交叉编译器,允许编译tasking和non-tasking C、C++应用程序,支持硬、软浮点操作SPARC V8乘法和除法指令,也可以用来编译eCos内核。
BCC由如下包组成:
GNU GCC C/C++ compiler v3.4.4, v4.4.2
Newlib C-library v 1.13.1
Low-level I/O routines for and LEON3, including interrupt support
uIP light-weight TCP/IP stack
GDB debugger v6.4 with DDD and Insight Graphical front-end
Mkprom prom-builder for LEON3/4
Linux and Windows/Cygwin hosts
##(一) 安装 sudo tar -C /opt -xjf sparc-elf-4.4.2.tar.bz2
将export PATH=/opt/sparc-elf-/bin:$PATH加入主目录下的.profile文件
#二、开发流程 编译、调试应用程序步骤:
1、 使用gcc编译、链接程序
2、 在模拟器或目标机上调试程序
3、 为一个独立的应用程序创建引导prom(boot-prom)
##(一) Gcc选项 -g generate debugging information - must be used for debugging with gdb
-msoft-float emulate floating-point - must be used if no FPU exists in the system
-mcpu=v8 generate SPARC V8 mul/div instructions - needs hardware multiply and divide
-O2 or -O3 optimise code maximum performance and minimal code size
-qsvt use the single-vector trap model
-mtune=ut699sets UT699 specific parameters (gcc-3.4.4 and gcc-4.4.2)
-mfix-ut699 sets UT699 specific parameters (gcc-4.6.0 upward)
普通c程序编译:
sparc-elf-gcc -msoft-float -g -O2 hello.c -o hello.exe
默认的链接地址是RAM的开始,对于LEON是0x40000000,其他的链接地址可以通过-Ttext指定。
##(二) Making LEON boot-proms 使用mkprom2工具,可以生成从独立LEON3/4目标机的prom运行的boot-prom,mkprom2创建一个压缩的启动镜像,它将应用程序装载至RAM中,初始化各种LEON寄存器,最后启动程序。mkprom2会设置所有与目标机相关的参数,如内存大小,等待时钟(waitstates),波特率,系统时钟等,由于使用sparc-elf-gcc编译的应用程序并不设置这些参数,所以对于不同架构的目标板不需要重新链接。 创建一boot-prom,1MB RAM,one RAM waitstate,3 waitstates for ROM access,25MHz system clock:
mkprom2 -ramsize 1024 -ramws 1 -romws 3 -freq 25 hello.exe -msoft-float
mkprom2生成的是elf格式的文件,为了创建SRECORD格式的文件,使用objcopy:
sparc-elf-objcopy -O srec hello.exe hello.srec
##(三) 创建在prom中运行的应用程序 BCC支持在PROM中运行的应用程序,但数据、栈位于ram中,PROM应用程序创建步骤:
1、 编译应用程序为多个目标文件,但不链接
sparc-elf-gcc -msoft-float -c -g -O2 hello.c
2、 创建最终的prom镜像
mkprom2 -freq 40 -rmw hello.o -msoft-float
一个PROM应用程序,代码(.txt段)在prom中,数据(.data和.bss)在RAM中,启动时,.data段从prom拷贝至ram,.bss段清零。PROM应用程序从地址0x0处链接,data段默认链接到0x40000000,但可以通过gcc的-Tdata=address选项改变(mkprom),-msoft-float选项对于mkprom也是必须的如果没有FPU。当使用GRMON或gdb调试prom程序时,仅硬件断点可用。 ##(四) 例子 $ sparc-elf-gcc -g -O2 hello.c -o hello -msoft-float
$ mkprom2 hello -o hello.exe -msoft-float
$ sparc-elf-objcopy -O srec hello.exe hello.srec
##(五) Newlib C-library #三、执行和调试 ##(一) TSIM模拟器和GRMON调试监视器 LEON应用程序可以在TSIM模拟器或者通过GRMON调试监视器在目标机硬件上进行调试。TSIM和GRMON均可连接至GNU调试器(sparc-elf-gdb) ###1. 在TSIM模拟器上运行 使用load命令装载二进制文件;使用go命令执行应用程序。
$ tsim-leon3
tsim> load hello.exe
tsim> go
###2. 使用GDB调试(在模拟器上) 启动tsim-leon3(使用-gdb选项)
$ tsim-leon3 –gdb
在另一shell中启动gdb,装载应用程序,…
$ sparc-elf-gdb hello.exe
(gdb) tar extended-remote localhost:1234
(Remote debugging using localhost:1234)
(gdb) load
(gdb) break main
(gdb) run
若要重新执行应用程序,首先需要再次装载程序,然后运行。
###3. 在目标机硬件上调试 将GRMON与LEON系统连接。在shell中启动GRMON,默认情况下,GRMON使用主机的一个串行端口与处理器调试支持单元(DSU)连接,连接成功后,应用程序可以被下载、执行(与使用模拟器的执行过程相同)。
$ grmon –u
grmon[grlib]> load hello.exe
grmon[grlib]> run
注:GRMON、TSIM分别使用2222、1234端口和gdb通信。