从skyeye学习arm(开篇)


【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】


    skyeye这个虚拟机工具,虽然之前听说过,但是很少使用。这次借着ubuntu环境,正好可以练习一下。基本的步骤也比较简单,无非就是搭建skyeye环境,下载arm编译环境,编译工程,加载等等。


a)编译skyeye

    此次我选择的版本是1.2.6版本。当然,如果你觉得麻烦也可以sudo apt-get install skyeye,但是一般下载的都是1.2.5版本。因为我想使用s3c2440作为我的测试平台,所以选择了高阶的版本。编译的过程也很简单,. /confiigure && make && make install。当中编译nandflash_smallblock.c可能有错误,只需要在519行的添加一个open的参数就可以了,一般为0666。


b)获取编译环境

    搭建交叉编译环境是我们的基本工作。一方面,大家可以用buildroot工具自己编译,另一方面大家可以从www.arm9.net这边下载。


c) 获取工程代码

    代码如果从头写,比较麻烦。我们可以借用skyeye1.3.5中的demo工程,四个文件,分别为汇编、c、makefile和linkfile。汇编如下,

	

#define MODE_SVC 0x13
#define I_BIT   0x80
	
.text
	.align 4
	.global begin
	.type begin, function

begin:
	/*disable I-bit*/
	mov     r0, #I_BIT|MODE_SVC
	msr     cpsr_c, r0

	mov	r1,#0xd2
	sub	r2,r0,r1
	ldr sp, =irq_stack           @ set sp_irq = irq_stack
	bl	hello
	b	begin
			
.data
	.align  4
irq_stack:
	.space	4096

    C语言如下,

#define BOGO_MIPS 1000000

void hello(void)
{	
	int i;
	char * hellostr="helloworld";
	long* paddr=(long*)0xfffd001c;
	int timeout ;
	i = *hellostr - 'h';
	while(1){
		timeout = 0;
		while(++timeout != BOGO_MIPS);
		for(i=0;i<10;i++)
		{
			* paddr=hellostr[i];
		}
	}
	return;	
}
    Makefile如下,
CC=arm-elf-gcc
LD=arm-elf-ld
CFLAGS= -c -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -pipe -g -mapcs-32 -march=armv4 -mtune=arm7tdmi 
LDFLAGS= -N -p -X -Thello.lds
    
LIB=
    
all: hello 

hello: start.o hello.o
	$(LD) $(LDFLAGS)  start.o hello.o -o hello
	arm-elf-objdump -xS hello > hello.s
	arm-elf-readelf -a hello > hello.r
	arm-elf-nm hello > hello.n
	 
start.o:start.S
	$(CC) $(CFLAGS) start.S	 
	
hello.o:hello.c
	$(CC) $(CFLAGS) hello.c

clean:
	rm -rf *.o *.elf *.gdb hello *.r *.n *.s
    链接文件如下,
OUTPUT_ARCH(arm)
ENTRY(begin)
SECTIONS
{
	. = 0x1000000;
	.text : 
	{
		*(.text) 
		*(.rodata)
	}


	. = 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) }

}

    e) skyeye脚本,保存为skyeye.conf文件

#skyeye config file sample
arch:arm
cpu: arm7tdmi
mach: at91

mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
uart:mod=term
#log: logon=0, logfile=./sk1.log, start=0, end=200000

    f)执行,运行

    有了工程和skyeye,一切都准备就绪。你要做的就是make工程, 然手skyeye -e hello就可以了。当然,如果你愿意,可以自己去编译一个gdb调试工具,这样可以和skyeye一起调试使用,效率更高。




对于那些想进行嵌入式系统软件开发和学习,或者想研究嵌入式Linux等操作系统和一些底层系统软件(如TCP/IP等)的研究和开发人员来说,可能存在如下几方面的问题:(1)经常苦于经费不足,缺少足够的硬件开发板和完善的软件开发环境,相关的书籍对一些最新软件的分析还不够全面,无法深入研究和开发嵌入式软件。(2)高层次的软件设计和开发一般不用太考虑底层硬件的实现细节,如果直接处于一个具体的硬件环境下,在开发和研究中可能会陷入硬件的具体细节中不能自拔,而不能把精力放到高层次的软件设计和开发上。(3)如果硬件开发环境不太稳定(这种情况经常见到),且对具体的硬件不是很了解,则可能在排除问题上花费大量的不必要的时间。(4)如果你想自己尝试设计一个操作系统,则先在一个提供源码级调试的软件仿真器上进行开发,可能会大大提高你的开发进度。<br><br>对于想了解、学习一般操作系统的实现原理,Linux/μCLinux操作系统或TCP/IP等系统级软件的实现的人员,目前一般采用的方法是看书和读源代码,这是一种静态的学习方法,效率较低,比较枯燥,缺少亲自实践的感觉。要想深入分析和开发软件,就要动手编程,不能只是看看书,读读代码,只有通过亲手实践才能够掌握软件设计的核心内容。上面所指出的问题和需求促使SkyEye项目的诞生。 <br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>3.SkyEye的目标和意义 <br>SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。<br><br>纯软件的模拟器有许多种,如模拟一个芯片时序逻辑的模拟器、只模拟CPU指令的模拟器、模拟整个硬件开发板的模拟器、模拟一个PDA的模拟器等。存在一些纯软件的仿真器或模拟器,如Stanford大学的SimOS模拟器,它仿真的是MIPS系列CPU和相关外设,可以在其上运行SGI公司的Irix操作系统和软件,目前基本上停止了进一步的开发;PSIM是一个仿真PowerPC指令集的模拟器,目前只支持简单的命令行应用程序;xcopilot是一个PDA模拟器,它是由Greg Hewgill出于个人喜好编写的,它仿真的是M68K CPU,通过它可以给基于PalmOS的软件开发者提供一个模拟开发环境。Bochs是一个仿真x86 CPU的开源项目,目前还支持AMD64 CPU,在它上面可以运行Linux操作系统。其它一些商业的仿真软件如vmware和virtualPC可以仿真一个真实的x86计算机,而Virtutech Simics仿真器可以仿真多种CPU和硬件,功能强大,可用于硬件和系统软件的评测。<br><br>SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。由于SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上不保证与硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。这样带来的好处是SkyEye的执行效率更高。SkyEye的推出具有下面三方面的意义:<br><br>通过SkyEye仿真集成环境可以很方便地进入到嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段,因为SkyEye的整个软件系统都是Open Source的,且基于GPL协议(μCOS-II除外)。因此,如果要学习Linux操作系统或者进行嵌入式系统开发,但苦于没有硬件支持,SkyEye仿真环境软件是一个很好的选择! <br>如果想研究与具体硬件无关的系统软件(如TCP/IP协议栈等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值