SkyEye全数字实时仿真平台,简称SkyEye,是一款支持 ARM、TI DSP、PowerPC、X86、SPARC、龙芯、飞腾等多种处理器体系架构的指令级仿真平台。
SkyEye可以部署在桌面计算机上,开发人员可以基于SkyEye提供的已有模型库的组件(如处理器、内存总线、存储器、片上外设、外围总线设备等),通过图形化搭建环境拖拽需要的组件并定制与实际目标机相同的虚拟目标系统。
使运行在真实目标机上的二进制代码可以不加修改直接在虚拟系统中运行,并且可以得到与在真实目标机下相同的执行结果,支持的目标二进制文件主要包括ELF、raw binary、COFF等格式。配合调试器,可以查看到虚拟系统中所有的资源,包括寄存器,存储器和端口系统等。SkyEye支持运行的目标系统软件包括操作系统OS软件和裸机应用程序,今天以经典程序hello world为例介绍下裸机程序如何一步步编译构建成二进制文件并在SkyEye上运行调试,处理器架构采用ARM架构。如何构建裸机hello world目标程序并在SkyEye全数字实时仿真平台上运行及调试?
目标二进制文件构建过程
所需工具:
-
SkyEye安装包;
-
linux系统,本人使用ubuntu 14.04;
-
ARM 交叉编译工具链;
裸机 hello_world.c 程序
首先编写hello world程序,创建hello_world.c文件,编写hello_world函数,如下所示:
void hello_world()
{
uart_printf(“hello world!”);
return ;
}
代码通过调用uart_printf函数输出「hello world」字符串,由于是裸机程序,不能调用库中的printf函数,而是要自己实现输出函数,实现一个最简单的输出字符串的uart_printf函数,如下:
#define UART_TX_ADDR 0x640000
void uart_puts(const char *s)
{
while(*s)
{
*(char *)UART_TX_ADDR = *s++;
}
return ;
}
void uart_printf(char *fmt, …)
{
uart_puts(fmt);
<