现在的位置: 首页 > 综合 > 正文

O_board-2-运行第一个裸机程序

2014年04月04日 ⁄ 综合 ⁄ 共 1762字 ⁄ 字号 评论关闭

引言

在经过上一篇“快速开始”(http://blog.csdn.net/rill_zhen/article/details/18714643)时,我们已经确认O_board可以运行linux,那么怎么运行裸机程序呢?

本小节,我们将通过在O_board上运行一个简单的裸机程序(从串口打印‘hello Oboard!’),来进一步加深对O_board的了解和掌握。

1,基本思想

“麻雀虽小五脏俱全”,虽然是一个最简单的程序,却涉及到了包括orpsoc的RTL工程的综合,jtag下载,or32-elf-gdb的调试等很多方面。其大体思想如下:

首先,我们需要用quartusII对orpsoc的RTL工程进行综合,得到svf文件。

其次,使用Urjtag将scf文件load到O_board的FPGA芯片内部。

第三,运行or_debug_proxy程序,建立RSP server。

第四,运行or32-elf-gdb在与RSP server建立连接之后,下载裸机程序。

第五,打开picocom,查看串口输出。

2,针对O_board的orpsoc的RTL综合

O_board目前使用的quartusII的工程,我已准备好,可直接下载使用,请参考:

http://download.csdn.net/detail/rill_zhen/6897475

3,编写并编译裸机程序

1>编写C语言代码

hello_Oboard.c:

#include <stdio.h>

int main()
{
	printf("hello Oboard!\n");
	
	return 0;
}

2>编译生成hello_Oboard

or32-elf-gcc -mboard=ordb2a hello_Oboard.c -o hello_Oboard

4,配置orpsoc_top.svf到O_board

这一步大家都很熟悉了,就是将orpsoc_top.svf文件复制到~/fpga_dev_board/ordb2a-ep4ce22/目录下之后,用Urjtag将svf文件load到FPGA内部。当然,首先要用USB线将O_board左上角的那个USB口与PC的USB2.0口相连。

jtag ./program_fpga.jtag

如下图所示:

5,检测jtag并建立RSP server

在将orpsoc_top.svf文件配置到O_board之后,FPGA芯片现在就是ORPSoC了,我们这时就可以用or_debug_proxy检测板子上的jtag了,如果jtag没问题的话,就需要建立用来和gdb通信的RSP server了,这些工作可以通过下面的命令实现:

其中‘55555’是RSP server的端口号。

/opt/or_debug_proxy/bin/or_debug_proxy -r 55555

6,软件的下载

在建立完RSP server之后,我们就可以用or32-elf-gdb 来讲我们前面编译的程序下载到O_board的内存里并运行它了。

or32-elf-gdb
target remote:55555
file ~/O_board/hello_Oboard
load
spr npc 0x100

如下图所示:

7,打开串口工具

在将软件load到内存之后,在运行程序之前,我们需要先运行串口工具,可用的串口工具有很多(minicom,picocom,hyperterminal),这里使用picocom。

picocom --b 115200 --p n --d 8 --f xon /dev/ttyUSB2

打开串口之后,这是在or32-elf-gdb窗口执行‘c’命令运行程序,我们就可以看到O_board从串口打印的“hello Oboard!”,如下图所示:

8,小结

本小节,我们在O_board上运行了一个最简单的裸机程序,其实,本小节我们编写的裸机程序(hello_Oboard.c)并不是整个工程的全部,这里面我们调用了C语言的库函数‘printf’,所以还有很多C库的问题已经被编译器处理了,此外还有串口控制器的初始化工作也隐藏起来了。

不依靠任何库函数的裸机程序,我们之前曾经介绍过了,这里不再赘述,如有疑问,请参考:

http://download.csdn.net/detail/rill_zhen/6647119

里面有完整的展示例子。

Enjoy!

抱歉!评论已关闭.