精华内容
下载资源
问答
  • 并对该文件做了相应补充,旨在定制基于ARM4I平台Visual Studio 2005环境中文模拟器,建立用于 Platform Builder 5.0+Visual Studio 2005嵌入式Windows CE 5.0开发环境。  一、生成OS  1. 安装Windows CE 5.0,装完...
  • 基于ARM模拟器

    2020-12-21 23:58:59
    ARM的ARMulator:ARMulator 是一个在 ARM 公司推出的集成开发环境 ADS (ARM Developer Suite)中提供的指令集模拟器。它与运行在通用计算机(通常是x86体系结构)上的调试器相连接,模拟 ARM 微处理器体系结构和指令集...

    ARM的ARMulator:

    ARMulator 是一个在 ARM 公司推出的集成开发环境 ADS (ARM Developer Suite)中提供的指令集模拟器。它与运行在通用计算机(通常是x86体系结构)上的调试器相连接,模拟 ARM 微处理器体系结构和指令集,提供了开发和调试 ARM 程序的软件仿真环境。ARMulator 不仅可以仿真 ARM 处理器的体系结构和指令集,还可以仿真存储器和处理器外围设备,例如中断控制器和定时器等,这样就模拟了一个进行嵌入式开发的最小子系统,另外使用者还可以扩展添加自己的外设。

    简介:

    ARMulator 同时支持全部的标准C库函数,这样所有的C程序都可以在仿真器上运行。ARMulator 通过 Semihosting 方式来实现程序中输入/输出功能。Semihosting是指在 ARM 程序开发调试的过程中,目标系统还不具备输入/输出的功能,通过调试代理向调试器请求 I/O。ARMulator 就是这里所说的调试代理之一,其他还有 Angel、Multi-ICE也通过类似的方式来实现 I/O 功能。ARMulator 在 Windows 平台上实现为动态链接库文件(.dll),在 Linux 或者 Solaris 系统上实现为共享库文件(.so)。前者的使用一般是通过 ARM 公司提供的图形界面调试器 AXD 中,选择目标系统为 ARMulate.dll,这样就设置了 ARMulator 作为调试代理。用户在进行调试开发时,对于底层使用的调试代理是透明的。

    SkyEye:

    SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"模拟"的意思基本相同);可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。

    GNU的ARMulator:

    Softgun:

    Softgun 是 ARM 嵌入式系统的仿真器,可模拟 ARM9 CPU ,支持 MMU、很多Netsilicon NS9750外设,PCI总线、网络控制器、闪存以及 CAN总线。 它的目的是帮助没有真实硬件的嵌入式系统开发。

    realboard:

    realboard是高速稳定的开发板平台仿真软件,包括CPU核,硬件外设,以及必要的调试支持。它运行在win32平台,能够代替真实的硬件开发板和调试器,使整个嵌入式项目能够在PC端独立完成开发调试,既能降低门槛,又能节省成本。

    到目前为止,realboard能够支持的外设,基本上覆盖了s3c44b0x的所有功能:

    其他嵌入式模拟器:

    QEMU:

    著名的android emulator就是基于QEMU的。

    QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模倾:模拟模式,亦即是使用者模式。QEMU 能启动那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。

    System mode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上虚拟数部不同虚拟电脑。

    QEMU的主体部份是在LGPL下发布的,而其系统模式模拟与kqemu加速器则是在GPL下发布。使用kqemu可使QEMU能模拟至接近实机速度,但其在虚拟的操作系统是Microsoft Windows 98或以下的情况下是无用的。

    优点:可以模拟 IA-32 (x86)个人电脑,AMD64个人电脑, MIPS R4000, 升阳的 SPARC sun3 与 PowerPC (PReP 及 Power Macintosh)架构

    支持其他架构,不论在主机或虚拟系统上(请参看QEMU主页以获取完整的清单)

    增加了模拟速度,某些程式甚至可以实时运行

    可以在其他平台上运行Linux的程式

    可以储存及还原运行状态(如运行中的程式)

    可以虚拟网络卡

    可模拟多CPU

    展开全文
  • Qemu5最新版本 ARM X86 Windows版 包含演示Linux版本直接运行 此版本去除了一般不需要的除ARM/Intel之外的虚拟机 加入了ARM/X86直接可以运行的演示虚拟机例子 见 test-i386和test-arm 本版本运行于Windows X64版本
  • 一种ARM模拟器的实现(一)

    千次阅读 2015-09-22 22:51:26
    一、我为什么要实现一个ARM模拟器 二、SimARM简介(功能规格、运行环境) 三、SimARM版本、测试、及共享说明

    一、我为什么要实现一个ARM模拟器

        看到我要实现一个ARM模拟器,估计得有人数落我了。主要的理由可能就是现在已经有很多ARM模拟器了,自己再去实现一个岂不是做重复工作(就是有人说的重新造轮子)。确实,现在已有了几款常见的ARM模拟器。比如:QEMU、SkyEye、RTSM、Microsoft Device Emulator等。但这些模拟器都有些不合我的心意。QEMU和SkyEye,似乎都很执着于模拟整个CPU环境,比如总线及设备,而且很在意于匹配Linux系统,所以上来就有硬盘引导之类的东西。但我只需要能够仿真一些软件功能的调试,仿真的是Cortex-M3之类的不需要操作系统的MCU环境。虽然这些需求在QEMU、SkyEye上自然也是可以改的,但是毕竟对原始代码的学习路线比较长。RTSM和Microsoft Device Emulator自不必说了,一个集成在ARM官方的RD-5中,一个是用于WinCE模拟的,定制成我的目标估计很不现实。前几天,有个兄弟帮我找到了另一个ARM模拟器的实现,是维多利亚大学的ARMSim#模拟器。这个模拟器有点奇怪,是加载汇编文件或者.O文件运行,但我试了下,无论输入汇编文件还是.O文件,都提报出错,暂时也做不了什么评估。

        所以,我的首要目的,就是希望能够有个最简单的ARM模拟环境,同时可以方便于我的定制。

        此外,做嵌入式的研发工作也好几年了,之前写过应用,也写过操作系统,算是对CPU的运作有一些了解,但总归不是很深入。自己动手实现一个ARM的模拟器,也可以从中加深对CPU工作方式的理解。

        以上这些,就是我实现一个ARM模拟器的初衷。而且,通过长期的业余投入,目前已经输出了2个版本。如果大家对这个课题有兴趣,不妨一起来讨论一下。如果没有兴趣或不主张自己实现模拟器,那请出门左转或右转,大家互不强迫。

    二、功能简介

        本文所涉及的是ARM模拟器内核的动态库。它能够实现基本的ISA模拟和地址映射功能,并且提供了若干个回调接口,允许其他程序通过回调接口扩展成具体的CPU环境。SimARM的目标,只是用来仿真软件。因此,对于硬件的强仿真(比如模拟SPI/IIC之类的操作等)是当前所不支持的。

        本模拟器的实现,是从ARMv4/ARMv5核开始的。理由是ARMv4/ARMv5核的模型十分经典,并且指令系统相对单纯,作为项目的初始阶段是比较合适的。当前,模拟器对ARMv4/ARMv5的基本模拟已完成。以下是当前的规格:

    ISA规格

     

     ARM  

     Thumb-1 

     Thumb-2 

    备注

     ARM v4  

    YES

    YES

    N/A 

     

    ARM v5 

    YES

    YES

    N/A 

     

    ARM v6 

    目前已实现ARMv6m的Thumb-2的反汇编功能

    ARM v7 

     

    ARM v8 

     

    Instruction Cache 规格

    Cache模型 

     2-way set associative 

    Cache Line大小 

     256 Byte

    Cache 总地址范围 

     1M Byte

    备注 

     

    Data Cache规格

    目前暂不支持DataCache

    模拟主频规格

    ARM 32位指令模拟主频 

     125MHz

    Thumb指令模拟主频 

     85MHz

    备注 

     上述模拟主频的数据基于在Intel Core i5-4300U 2.5GHz处理器Windows 8 x64系统上测试得出;
     测试过程挂载了一个流水线监控函数;
     若不挂载任何监控回调函数,则模拟主频可达到185MHz以上

    其他

    • 暂未做协处理器仿真,因此所有协处理器指令不被支持,MMU功能不被支持,但可通过总线监控程序模拟MMU;

    • 仿三级流水线流程,不实现更多级流水线以及流水线并行功能;

    • 支持申请多个核心,但暂不支持对等多核协作。

    目前,模拟器的运行环境需求如下:

    硬件架构 

     Intel x86硬件平台,需要SIMD扩展SSE2支持  

    操作系统 

     Windows XP SP2及以上操作系统

    最小执行内存 

     260M Byte

    备注 

     执行内存主要来源于指令Cache的需求

    此外,当前版本的模拟器运行的用户态,因此不需要安装驱动,但也因此其模拟性能会受其他的应用程序的影响。

    三、版本、测试、及共享

        本模拟器目前为1.0.1.2版本。版本号的最后一位如果是奇数标识该版本为已经过一定程度的测试,如果为偶数表示版本的测试强度还不足,可能是未稳定版本。

        在本模拟器的测试过程中,最为复杂的测试是对于所有仿真指令的正确性测试。目前,我需要人工来构造能够覆盖被仿真指令所有条件分支的用例,然后通过真机单步执行结果和模拟机单步执行结果的逐一比对,才能验证所有指令仿真的正确性。这个工作量是非常大的。因此,目前我还不能确保每个版本都对指令仿真正确性做逐一验证。若未执行过这些完备验证,模拟器的版本尾号都将置为偶数。

        本模拟器目前共享目标文件。下载地址为:http://download.csdn.net/detail/season_lzw/9124157。模拟器的源代码暂不开放,但我会陆续对其中的技术方案做讲解。

    四、关于本类博客文章的后续内容

        前面说到,模拟器的源代码暂不开放。因为目前我还在对模拟器做持续完善,我暂不希望分散精力去应对分裂版本的管理问题。同时,我认为开源的本质目标还是为了知识的交流,但不可否认的现状是很多个人或团体只是将开源当作是免费的物资来源并不做任何知会就将其投入商业用途,这是对他人劳动的不尊重。

        那么,既然是知识交流,我会在本类博客文章的后续内容中逐步公开实现ARM模拟器的技术方法,以及我测得的数据和一些注意事项。希望后续所公开的技术知识对于对于这一课题有技术兴趣的人能够起到帮助。


    展开全文
  • 并对该文件做了相应补充,旨在定制基于ARM4I平台Visual Studio 2005环境中文模拟器,建立用于 Platform Builder 5.0+Visual Studio 2005嵌入式Windows CE 5.0开发环境。  一、生成OS  1. 安装Windows CE 5.0,装完...
  • http://balau82.wordpress.com/2010/08/17/debugging-arm-programs-inside-qemu/   启动的汇编片段(startup.s)     .global _Reset _Reset: LDR sp, =stack_top BL c_entry B .   ...

    一、命令行调试(gdb)

    程序参考自

    http://balau82.wordpress.com/2010/08/17/debugging-arm-programs-inside-qemu/

     

    启动的汇编片段(startup.s)

     

     

    .global _Reset
    _Reset:
    	LDR sp, =stack_top
    	BL c_entry
    	B .
    
    

     

    链接脚本(test.ld)

     

     

    ENTRY(_Reset)
    SECTIONS
    {
    	. = 0x10000;
    	.startup . : { startup.o(.text) }
    	.text : { *(.text) }
    	.data : { *(.data) }
    	.bss : { *(.bss) }
    	. = . + 0x1000; /* 4kB of stack memory(4kB的堆栈内存)*/
    	stack_top = .;
    }
    

     

    (修改二进制文件布局的另一种做法是使用ld的命令行,或既使用-T开关又使用命令行)  

     

    主程序(test.c):

     

     

    volatile unsigned int * const UART0DR = (unsigned int *)0x101f1000;
    
    void print_uart0(const char *s) {
    	while(*s != '\0') { /* Loop until end of string (循环直至字符串结束)*/
    		*UART0DR = (unsigned int)(*s); /* Transmit char (发送字符)*/
    		s++; /* Next char (下一个字符)*/
    	}
    }
    
    void c_entry() {
    	print_uart0("Hello world!\n");
    }
    

     

    (UART是串口的底层实现,严格来说它是一块芯片,但在嵌入式开发中经常指操纵串口的I/O端口和特殊寄存器,使用方式和内存访问很相似,所以经常用于输出调试信息)

     

    qemu调试批处理文件(qemu_test.bat):

     

     

    "D:\java\qemu-0.9.0-arm\qemu-system-arm.exe" -s -S -M versatilepb -m 128M -kernel test.bin 
    pause
    

     

    (我使用的是模拟ARM的qemu,注意qemu-system-arm和-M开关,versatile pb是一种使用ARM926EJ-S的开发板)

     

    gdb调试脚本(gdbinit.txt):

     

     

    file test.elf
    target remote localhost:1234
    b c_entry
    cont
    

     

     

    (可以手工输入到gdb控制台,b是breakpoint的缩写)

    (file命令用于加载调试信息,所以elf文件在编译时需要加入-g开关)

    (target用于远程调试,前提是远程机器运行gdbserver监听1234端口,这里qemu模拟器已经有gdbserver的功能)

     

    (设置程序参数可以用set args,运行程序可以用run)

     

    构建文件(Makefile):

     

     

    # see http://balau82.wordpress.com/2010/08/17/debugging-arm-programs-inside-qemu/
    
    # for debug:
    #   make clean all
    # for release: 
    # 	make clean all DEBUG=""
    
    PROJECT := test
    OBJS := startup.o test.o
    DEBUG := -g
    ARGS := -mcpu=arm926ej-s ${DEBUG}
    EMU := qemu_test.bat
    
    AS := arm-none-eabi-as ${ARGS}
    CC := arm-none-eabi-gcc ${ARGS}
    LD := arm-none-eabi-ld -T ${PROJECT}.ld -Map ${PROJECT}.map
    GDB := arm-none-eabi-gdb --command=gdbinit.txt
    RUN := arm-none-eabi-run
    SIZE := arm-none-eabi-size
    OBJCOPY := arm-none-eabi-objcopy -O binary
    RM := rm -f
    
    all:${PROJECT}.bin
    
    ${PROJECT}.bin:${PROJECT}.elf
    	${SIZE} $<
    	${OBJCOPY} $< $@
    
    ${PROJECT}.elf:${OBJS} ${LDSCRIPT}
    	${LD} ${OBJS} -o $@
    
    %.o:%.s
    	${AS} $< -o $@ 
    
    %.o:%.c
    	${CC} -c ${ARGS} $< -o $@ 
    
    #run:all
    #	${GDB} ${PROJECT}.elf
    
    run:all
    	start ${EMU}
    	${GDB}
    	
    clean:
    	${RM} *.o *.elf *.bin *.map
    
    

     

    (我写的Makefile实在不敢恭维...,惯常方法是使用CFLAGS变量)

    (变量值可以用make的参数覆盖,例如make clean all DEBUG="")

    (tab缩进是必须的,否则Makefile无法使用)

     

    编译这个Makefile工程需要以下东西

    1. Sourcery G++ Lite Edition for ARM

    http://www.codesourcery.com/sgpp/lite/arm

    获得其中已经编译好的交叉编译器(可以直接在windows下使用)

    2. MSys/MinGW 

    http://sourceforge.net/projects/mingw/

    获得其中的make工具

    3. QEMU on Windows (arm)

    http://www.h7.dion.ne.jp/~qemu-win/

    下载for ARM平台的那个

    http://www.h6.dion.ne.jp/~kazuw/qemu-win/qemu-0.9.0-arm.zip

     

     

    在MSys的/etc/profile.d目录中创建sourcery.sh

     

     

    #!/bin/sh
    export PATH="/arm-2010.09/bin:$PATH"
    

     

    (可以在msys中手工输入export PATH="/arm-2010.09/bin:$PATH"更改环境变量,大小写敏感)

     

    把Sourcery G++的arm工具链加入MSys的PATH中。

    然后运行msys.bat,切换到Makefile工程的目录下执行

    make clean all

    重建工程,生成带调试信息的test.bin和符号表test.map

     

     
    $ make clean all
    rm -f *.o *.elf *.bin *.map
    arm-none-eabi-as -mcpu=arm926ej-s -g startup.s -o startup.o
    arm-none-eabi-gcc -mcpu=arm926ej-s -g -c -mcpu=arm926ej-s -g test.c -o test.o
    arm-none-eabi-ld -T test.ld -Map test.map startup.o test.o -o test.elf
    arm-none-eabi-size test.elf
    text data bss dec hex filename
    144 0 0 144 90 test.elf
    arm-none-eabi-objcopy -O binary test.elf test.bin

     

    (clean和all不是指硬盘上的文件,而是特定的目标)

     

    然后执行

    make run

    运行qemu和gdb进行调试

    常用语句

    * list:显示附近代码

    * step:步进

    * display / undisplay / print:计算表达式/取消计算表达式/临时计算表达式

    * break / continue:设置断点 / 继续执行

    * bt:调用堆栈回溯

     

    20110502:

    这里有个教程链接集(日文)

    http://850mb.net/pukiwiki/index.php?gdb

    http://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb3.html

     

     

    backtrace bt 関数呼び出し情報のトレース 【bt】调用堆栈回溯
    break b ブレークポイントの設定 【b】添加断点
    continue c プログラムの再開 【c】继续执行程序
    command comm ブレークポイントヒット時の動作の設定 【comm】设置断点命中时的动作
    delete d ブレークポイントの削除 【d】删除断点
    delete display d d displayの削除 【d d】删除
    display disp 常に表示 【d】普通的变量值显示
    finish fin 現在の関数の終了まで実行 【fin】执行直至现在的函数结束
    frame f 関数フレームの移動 【f】移动函数帧
    help h ヘルプを表示 【h】查看帮助
    info i 各種情報のリストを表示 【i】获取各种信息
    info breakpoints i b ブレークポイント情報を表示 【i b】获取断点信息
    info display i di displayの状態を表示 【i di】获取变量显示信息
    info watchpoints i wat ウォッチポイント情報を表示 【i wat】获取watch值信息
    list l ソースプログラムを表示 【l】显示源程序
    next n ステップアウト実行 【n】step out步出
    print p 式を評価して結果を表示 【p】计算表达式的值
    printf printf printのフォーマット表示 【printf】格式化计算表达式的值
    ptype pt 式の型を表示 (詳細) 【ptype】详细的原型
    quit q gdbの終了 【quit】退出gdb会话
    return ret 現在の関数をその場で終了 【ret】现在的函数在这里返回
    run r プログラムの実行開始 【r】程序开始执行
    rwatch rw 読み出しウォッチポイントの設定【rw】读取watch设置
    set set 変数の値の設定など 【set】设置变量值
    step s ステップイン実行 【step】step in步进
    watch wa 書き込みウォッチポイントの設定 【wa】设置写入的watch点
    whatis wha 式の型を表示 (簡易) 【wha】简单的表达式类型

    上面的【】表示gdb命令缩写  

     

    二、使用Eclipse CDT和qemu进行ARM二进制程序调试

    1. Sourcery G++ Lite Edition for ARM

    下载第一个EABI版的IA32 Windows Installer即可

    http://www.codesourcery.com/sgpp/lite/arm

    默认安装在C:\Program Files\CodeSourcery\Sourcery G++ Lite

    选择Do not modify PATH(不加入PATH,不过加入也无妨,

    因为有交叉编译器前缀可以区分)

    另一种选择是下载绿色版IA32 Windows TAR

    随便找个地方解压即可用(好像MinGW那样)

     

    2. JDK 1.6

    JRE应该也可以,主要是后面Eclipse需要用到

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

     

    3. MSys/MinGW

    真正有用的是MSys,不过不排除你整个MinGW都装了(我试过在线装MinGW,结果顺带把MSys也装好了)

    好像有单独的安装文件,但最好在线安装

    http://sourceforge.net/projects/mingw/

    MSys的好处是自带了make工具,不需要使用Sourcery工具链那个。

    另外还有很多类Unix的系统工具,对使用Makefile很有帮助。

     

    4. Eclipse CDT 

    最新版可能不支持GNU ARM Eclipse Plug-in,所以我用CDT 6.0.2 for Eclipse Galileo:

    http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/galileosr2

    点击下载这个:

    Windows 32-bit

    然后解压即可。

    启动前最好写个批处理导入PATH。

     

     

    set PATH=
    set PATH=C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin;%PATH%
    set PATH=D:\java\jdk1.6.0_20\bin;%PATH%
    set PATH=C:\MinGW\msys\1.0\bin;%PATH%
    start eclipse.exe
    

     

    重命名为start_cdt.bat,放入我的cdt目录中

    D:\java\eclipse-cpp-helios-SR2-win32\eclipse

    双击启动Eclipse

    把Workspace设置为C:\Documents and Settings\Administrator\workspace_arm

    勾选默认,然后按OK

     

    5. GNU ARM Eclipse Plug-in

    http://sourceforge.net/projects/gnuarmeclipse/

    把zip下载到本地,然后把其中的plugins和features两个文件夹复制到CDT目录下

    D:\java\eclipse-cpp-helios-SR2-win32\eclipse

    然后重新启动Eclipse CDT

    可以发现在File->New->C Project时

    Project type:会多出两项

    * ARM Cross Target Application

    * ARM Cross Target Static Library

    选择ARM Cross Target Application->ARM Windows GCC (Sourcery G++ Lite)

    Project Name:填helloworld

    创建新的C工程。

    创建完后会发现左面的工程树会显示

    C:\Program Files\CodeSourcery\Sourcery G++ Lite\

    的头文件工程树,这是自动检测的结果,可以查看工程选项

    右键->Properties->C/C++ Build->Discovery Options

    默认勾选了自动扫描

    Automate discovery of paths and symbols

    可能插件会自动在PATH环境变量中搜索带arm-none-eabi-前缀的exe

    以确定需要使用的gcc

    另一个要留意的地方是

    右键->Properties->C/C++ Build->Settings

    这里可以设置各种编译参数,并且附有一些关键开关的英文说明。

    Binary Parser选项页默认选中GNU Elf Parser,

    用于在工程树中直接查看生成debug版elf文件的类型和变量信息。

     

    6. 创建C工程

    File->New->Source File

    Source File:填入main.c

    输入如下内容

     

     

    /*
     * main.c
     *
     *  Created on: 2011-3-27
     *      Author: Administrator
     */
    #include <stdio.h>
    
    int main()
    {
    	printf("Hello, world!\n");
    	return 0;
    }
    

     

     

    然后菜单->Project->Clean->Clean projects selected below

    清除然后重新编译helloworld

    输出如下信息:

     

     
    **** Build of configuration Debug for project helloworld ****

    cs-make all
    Building file: ../main.c
    Invoking: ARM Sourcery Windows GCC C Compiler
    arm-none-eabi-gcc -O0 -Wall -Wa,-adhlns="main.o.lst" -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 -o"main.o" "../main.c"
    Finished building: ../main.c

    Building target: helloworld.elf
    Invoking: ARM Sourcery Windows GCC C Linker
    arm-none-eabi-gcc -nostartfiles -Wl,-Map,helloworld.map -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 -o"helloworld.elf" ./main.o
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/bin/ld.exe: warning: cannot find entry symbol _start; defaulting to 00008000
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
    sbrkr.c:(.text+0x12): undefined reference to `_sbrk'
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-writer.o): In function `_write_r':
    writer.c:(.text+0x16): undefined reference to `_write'
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-closer.o): In function `_close_r':
    closer.c:(.text+0x12): undefined reference to `_close'
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-lseekr.o): In function `_lseek_r':
    lseekr.c:(.text+0x16): undefined reference to `_lseek'
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-readr.o): In function `_read_r':
    readr.c:(.text+0x16): undefined reference to `_read'
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-fstatr.o): In function `_fstat_r':
    fstatr.c:(.text+0x14): undefined reference to `_fstat'
    c:/program files/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.1/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-isattyr.o): In function `_isatty_r':
    isattyr.c:(.text+0x12): undefined reference to `_isatty'
    collect2: ld returned 1 exit status
    cs-make: *** [helloworld.elf] Error 1

     

     

    提示说找不到符号

    (如果使用GNU/Linux工具链而非EABI工具链,则没有此问题。GNU/Linux工具链是基于Linux系统的ABI,所以可以使用C库,而EABI工具链则不行)

     

    删除helloworld工程。

    重新创建一个Makefile工程

    Makefile project->ARM Windows GCC (Sourcery G++ Lite)

    工程名称为test

    创建完后工程树显示红色的叉叉(因为找不到Makefile)

    无视之,重要是要手工修改工程选项:

    1) 工程树->右键->Properties->C/C++ Build->Discovery Options

    Discovery profile:选择

    Managed Build System - per project scanner info profile (Sourcery G++ Lite Windows/C)

    下面的Compiler invocation command会自动变成arm-none-eabi-gcc

    2) 工程树->右键->Properties->C/C++ Build->Settings->Binary Parsers

    勾选Elf Parser。

    3) 工程树->右键->Properties->C/C++ General->Paths and Symbols->Includes

    可以手工修改头文件和库文件的搜索路径。

    最后把前面手工写的Makefile工程的所有文件复制过来(直接粘贴到工程树上)

    再按菜单->Project->Clean->Clean projects selected below

    重新编译这个工程,使那个红色的叉叉消失:

     

     
    **** Build of configuration Default for project test ****

    make all
    arm-none-eabi-as -mcpu=arm926ej-s -g startup.s -o startup.o
    arm-none-eabi-gcc -mcpu=arm926ej-s -g -c -mcpu=arm926ej-s -g test.c -o test.o
    arm-none-eabi-ld -T test.ld -Map test.map startup.o test.o -o test.elf
    arm-none-eabi-size test.elf
    text data bss dec hex filename
    144 0 0 144 90 test.elf
    arm-none-eabi-objcopy -O binary test.elf test.bin

     

     

    发现工程树发生一些变化:

    由于前面设置了Elf Parser,test.elf、startup.o和test.o被自动识别为arm/le格式

    Windows->Show View打开Make Targets视图

    右键->New

    Target name:填入clean all

    按OK,再展开树,双击clean all即可重新编译工程,

    不需要按菜单->Project->Clean->Clean projects selected below那么麻烦了。

     

    7. 调试

    把qemu_test.bat修改为使用绝对路径的bin

     

     

    "D:\java\qemu-0.9.0-arm\qemu-system-arm.exe" -s -S -M versatilepb -m 128M -kernel "C:\Documents and Settings\Administrator\workspace_arm\test\test.bin"
    pause
    

     

    双击工程树中的qemu_test.bat运行qemu。

    然后点击上方的绿色小虫子旁边的下拉,

    选择Debug Configuration,

    双击C/C++ Application,创建一个test Default条目,

    然后切换到Debugger页面,

    Main->Debugger:选择gdbserver Debugger

    Main->GDB debugger:改为arm-none-eabi-gdb

    Main->GDB command set:改为Standard (Windows)

    Main->Stop on Startup at改为c_entry(根据需要,见test.c)

    Main->Use full file path to set breakpoints取消勾选

    (因为这个选项可能影响断点添加)

    Connection->Type:改为TCP

    Connection->Port number:改为1234

    Main->C/C++ Applicaton:填入test.elf

    (test.elf是用于让arm-none-eabi-gdb加载调试版的符号信息,所以不要填test.bin)

    然后按Debug按钮调试(必须保证前面的qemu已经正常运行起来)

    弹出窗口Confirm Perspective Switch

    勾选Remember my decision,然后Yes切换到Debug视角。

    Perspective(视角)是Eclipse的布局,由右上角的标签页来切换,不同于视图。

    在调试视角中Debug视图有三个按钮表示

    Step Into

    Step Over

    Step Return

    用于单步调试。

    也可以双击代码左侧空白处添加断点,然后按Debug视图上的Resume继续运行程序。

    如果程序在断点处中断,可以使用以下特性来调试:

    * Variables视图中查看局部变量值(包括字符串)。

    * Variables视图中添加全局变量的监视

    * Debug视图使用Instruction Stepping Mode进行指令步进

    * Debug视图的调用堆栈回溯(自动跳到外层调用所在的文件行)

    * Registers视图的寄存器数值查看(好像可以立即修改值)

    * Expressions视图添加表达式监视点(它比查看局部变量更灵活,但可以是较复杂的表达式)

    缺点有:

    * 每次调试需要重启qemu(qemu无法被远程重启)。

    * 内存查看可能会导致qemu崩溃。

     

    (eclipse貌似无法保存debug会话到工程目录中)

    (如果学过TCP/IP原理,这种调试方式很容易理解,调试时qemu是TCP服务器,gdb是TCP客户端,而CDT充当gdb的图形界面。insight的调试机制类似)

     

    三、使用arm-none-eabi-run和arm-none-eabi-gdb

    arm-none-eabi-gdb可以识别由当前工具链编译获得的调试版elf文件(即,使用gcc -g开关编译和链接的二进制文件)中的符号(如果无法识别,在gdb中使用file test.elf将获得警告信息)但貌似无法使用target sim进行调试,官方解释说因为Lite版工具链无调试能力(?)。如果使用-T generic-hosted.ld开关(即使用本机的Linker Script),编译得到的文件可以用arm-none-eabi-run运行(生成的elf文件是pe格式的?),此时编译的源文件即使使用了printf这样的库函数也可以正常通过(如果手工写ld脚本,一般要自己实现printf之类的库函数,或者使用-lc显式包含libc.a)。

    (20110404)(这是误区!)如果使用Sourcery G++提供的工具链,应该注意eabi和GNU/ARM工具链的区别(前者一般用于编译内核故不使用libc,后者则是编译在ARM Linux上运行的应用程序,故允许编译静态链接libc的。

     

    (未完成)

     

    四、使用skyeye

    调试方法和qemu类似,但配置和输入输出方式和qemu不同,详细见

    http://sourceforge.net/apps/trac/skyeye/wiki/Linux

    它可以和CDT、gdb和insight这些工具交互实现断点调试(类似于qemu)

    主要问题是:

    * skyeye.conf和skyeye的版本有关,可能导致运行失败

    * skyeye.conf的配置缺乏详细的说明和示例

    * skyeye对高版本gdb的支持似乎有问题

    (未完成)

     

    五、使用insight

    (未完成)

     

    六、使用VisualBoyAdvance

    VisualBoyAdvance是gba在windows上的模拟器,

    可以模拟低端的ARM处理器ARM7TDMI

    http://sourceforge.net/projects/vba/

    内置gba调试功能

    (未完成)

     

    展开全文
  • ARM模拟器-skyeye(天目)的安装和使用 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。 以下操作均在Fedora Core 1.0里通过。 文档摘要: 1、什么是...

                      ARM模拟器-skyeye(天目)的安装和使用

    SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。

    以下操作均在Fedora Core 1.0里通过。


    文档摘要:
    1、什么是SkyEye?
    2、SkyEye可以做什么事情?
    3、安装SkyEye
    4、安装arm-elf交叉编译器
    5、测试你的arm-elf-gcc编译器
    6、执行你的hello程序
    7、一个应用程序的开发实例
    8、编译并运行uClinux-dist-20030909.tar.gz
    9、加入网络功能
    10、安装完成SkyEye后,下一步将做什么?


    1、什么是SkyEye?

    SkyEye是开源软件的一个项目,SkyEye的目标是在Linux和Windows操作系统里提供一个完全的仿真环境。SkyEye仿真环境相当于一个嵌入式计算机系统,你可以在SkyEye里运行一些嵌入式Linux操作系统,如ARMLinux,uClinux,uc/OS-II(ucos-ii)等,并能分析和调试它们的源代码。

    通过SkyEye能仿真下面的硬件:
    (1)CPU核心:ARM7TDMI, ARM720T, ARM9, StrongARM, XScale

    (2)CPU: Atmel AT91/X40, Cirrus CIRRUS LOGIC EP7312, Intel SA1100/SA1110, Intel XScale PXA 250/255, CS89712,                           samsung 4510B,samsung 44B0(还不全)
    (3)内存: RAM, ROM, Flash
    (4)周边设备: Timer, UART, ne2k网络芯片, LCD, 触摸屏等

    目前能在SkyEye上运行下面的操作系统和系统软件:
    (1)uC/OSII-2.5.x(支持网络)
    (2)uClinux(基于Linux2.4.x内核, 支持网络)
    (3)ARM Linux 2.4.x/2.6.x
    (4)lwIP on uC/OSII
    (5)基于uC/OSII, uClinux, ARM Linux的应用程序


    2.SkyEye可以做什么事情?


    (1)通过SkyEye可以帮助促进嵌入式系统的学习,在不需要额外硬件的情况下学习和分析uclinux操作系统和其它嵌入式操作系统,如ucosII等。
    (2) SkyEye可用于嵌入式系统的教学。
    (3)希望通过skyeye促进操作系统的研究,如ucosII,uclinux+RTAI,uclinux2.5.x等。
    (4)可以基于SkyEye进行仿真特定硬件模块的研究。
    (5)SkyEye可以作为嵌入式集成开发环境开发嵌入式系统(当然需要对SkyEye做大量的工作)。
    注:引自陈渝《SkyEye Project FAQ》


    3、安装SkyEye

    (1)到http://gro.clinux.org/projects/skyeye/下载skyeye-0.7.0.tar.bz2包并减压:

    tar jxvf skyeye-v0.7.0.tar.bz2

    (2)进入解压后的skyeye目录,如果SkyEye的版本低于0.6.0,则运行下面的命令:

    ./configure --target=arm-elf --prefix=/usr/local --without-gtk-prefix --without-gtk-exec-prefix --disable-gtktest

    如果SkyEye的版本高于0.6.0,则运行下面的命令:

    ./configure --target=arm-elf --prefix=/usr/local

    (3)接下来执行:

    make
    make install

    安装完成后执行skyeye

    注意:
    a.如果你使用的是Mandrake Linux发行版,那么你在编译SkyEye时遇到错误,并且错误与readline, ncurse, termcap等有关,你可以试试下面的方法:

    ln -s /usr/include/ncurses/termcap.h /usr/local/include/termcap.h

    接着再make和make install看能否成功!
    b.如果你的Linux发行版是Debian Linux,那么不要使用gcc 2.95或是gcc 3.0,请使用gcc 3.2+
    c.gcc的版本要在2.96或以上
    d.如果SkyEye的版本大于0.6.0,那么使用LCD仿真需要在Linux系统里安装GTK软件。


    4、安装arm-elf交叉编译器

    (1)下载arm-elf-tools-20030314.sh

    ftp://166.111.68.183/pub/embed/uclinux/soft/tools/arm
    或到
    ftp://166.111.8.229/OS/Embeded

    (2)执行:

    chmod a+x arm-elf-tools-20030314.sh


    (3)然后:

    ./arm-elf-tools-20030314.sh
    
    ls /usr/local/bin/

    你应能看到以arm-elf开头的可执行文件,其中arm-elf-gcc就是用来编译你目标平台的编译器的,当然还有一些小工具,后面将一一讲来。


    5、测试你的arm-elf-gcc编译器

    先写一个小程序hello.c
    PHP 代码:

    #include <stdio.h>
    
    int main(void)
    {
        int i;
    
        for(i = 0; i < 6; i++){
    
            printf("i = %d  ",i);
    
            printf("Hello, embedded linux!"n");
        }
    
        return 0;
    } 


    然后执行:

    arm-elf-gcc -Wl,-elf2flt -o hello hello.c

    -elf2flt参数是将elf文件格式转为flat文件格式,这个工具是在你安装交叉编译器产生的。

    或者你可以写个Makefile文件,执行:

    make

    这里是我的Makefile文件,仅供参考:
    PHP 代码:

    # begin
    
    CC = arm-elf-gcc
    
    CFLAGS = -D__PIC__ -fpic -msingle-pic-base -O2 -pipe -Wall -g
    LDFLAGS = -Wl,-elf2flt
    
    LIBS =
    OBJS = hello.o
    
    all:    hello
    
    hello:  $(OBJS)
            $(CC) $(CFLAGS) $(LDFLAGS) -o hello $(OBJS) $(LIBS)
    
    clean:
            rm -rf *.o *.elf *.gdb hello
    
    # end 


    如果编译通过,就会产生hello可执行文件。用下面的命令:

    file hello

    你会发现,它是BFLT(binary FLAT),你目标平台所支持的文件格式。


    6、执行你的hello程序

    这里,我们将借助genromfs这个小工具来完成测试,这个工具就是你在安装交叉编译器时产生的,你可以直接使用它。

    到http://gro.clinux.org/projects/skyey...-1.0.4.tar.bz2包:

    tar jxvf skyeye-binary-testutils-1.0.4.tar.bz2

    cd testsuits/at91/uclinux2(当然你还可以用别的)

    mkdir romfs(建一个目录,后面用)

    mount -o loop boot.rom /mnt/xxx

    cp -r /mnt/xxx/* romfs

    另外,把你编译好的可执行程序拷贝到/romfs/bin目录里,这里就是hello了!

    genromfs -f boot.rom -d romfs/

    注:可以用genromfs -h来获得帮助!

    OK!执行下面的命令:

    skyeye linux
    
    (skyeye)target sim
    
    (skyeye)load
    
    (skyeye)run
    
    kernel start.....

    很熟悉了吧.

    cd /bin
    
    hello

    可以看到结果了吗?其实到了这一步,你就可以开发自己的程序了!


    7、一个应用程序的开发实例

    下面介绍的程序主要是完成一个网络应用,网络应用的标准模型是客户机-服务器模型,它的主要执行过程如下:
    (1)系统启动服务器执行。服务器完成一些初始化操作,然后进入睡眠状态,等待客户机请求;
    (2)在网络的某台机器上,用户执行客户机程序;
    (3)客户机进程与服务器进程建立一条连接;
    (4)连接建立之后,客户机通过网络向服务器发出请求,请求某种服务;
    (5)服务器接收到客户机请求后,根据客户机请求的内容进行相应的处理,然后将处理结果返回;
    (6)服务器断开与客户机的连接,继续睡眠,等待其他客户机的请求;

    Linux系统中的很多服务器是在系统初启时启动的,如时间服务器、打印服务器、文件传输服务器和电子邮件服务器等。大多数时间这些服务器进程处于睡眠状态,等待客户机的请求。

    下面这两个客户机-服务器程序比较简单,主要是对网络客户机-服务器模型的实际运行有大致印象。这个客户机-服务器的操作过程非常简单:客户机与服务器建立连接之后,服务器向客户机返回一条消息。服务器程序的源代码如下:
    PHP 代码:

    /* tcpserver.c */
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    
    #define WAITBUF 10
    
    int main(int argc, char *argv[])
    {
        int sockfd, new_fd;
        struct sockaddr_in server_addr;
        struct sockaddr_in client_addr;
        unsigned int sin_size, portnumber;
        char hello[]="Hello! Socket communication world!"n";
    
        if(argc != 2)
        {
            fprintf(stderr, "Usage:%s portnumber"a"n", argv[0]);
            exit(1);
        }
    
        if((portnumber = atoi(argv[1])) < 0)
        {
            fprintf(stderr, "Usage: %s portnumber error"a"n", argv[0]);
        }
    
        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
            fprintf(stderr, "Socket error:%s"n"a", strerror(errno));
            exit(1);
        }
    
        bzero(&server_addr, sizeof(struct sockaddr_in));
        server_addr.sin_family = AF_INET;
    
        server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        server_addr.sin_port = portnumber;
    
        if(bind(sockfd,(struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
        {
            fprintf(stderr, "Bind error:%s"n"a", strerror(errno));
            exit(1);
        }
    
        if(listen(sockfd, WAITBUF) == -1)
        {
            fprintf(stderr, "Listen error:%s"n"a", strerror(errno));
            exit(1);
        }
    
        while(1)
        {
            sin_size = sizeof(struct sockaddr_in);
            if((new_fd = accept(sockfd, (struct sockaddr *)(&client_addr), &sin_size)) == -1)
            {
                fprintf( stderr, "Accept error:%s"n"a", strerror(errno));
                exit(1);
            }
            fprintf(stderr, "Server get connection from %s"n", inet_ntoa(client_addr.sin_addr));
            if(send(new_fd, hello, strlen(hello), 0) == -1)
            {
                fprintf(stderr, "Write Error:%s"n", strerror(errno));
                exit(1);
            }
    
            close(new_fd);
        }
        close(sockfd);
        exit(0);
    } 


    给服务器程序写一个Makefile文件,如下:
    PHP 代码:

    # start
    
    CC = arm-elf-gcc
    
    CFLAGS = -D__PIC__ -fpic -msingle-pic-base -O2 -pipe -Wall -g
    LDFLAGS = -Wl,-elf2flt
    
    LIBS =
    OBJS = tcpserver.o
    
    all:    tcpserver
    
    tcpser:  $(OBJS)
        $(CC) $(CFLAGS) $(LDFLAGS) -o tcpserver $(OBJS) $(LIBS)
    
    clean:
        rm -rf *.o *.elf *.gdb hello
    
    # end

     
    客户机程序的源代码如下:
    PHP 代码:

    /* tcpclient.c */
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    
    #define RECVBUFSIZE 1024
    
    int main(int argc, char *argv[])
    {
        int sockfd;
        char buffer[RECVBUFSIZE];
        struct sockaddr_in server_addr;
        int portnumber, nbytes;
        
        if(argc != 3)
        {
            fprintf(stderr, "Usage:%s hostname portnumber"a"n", argv[0]);
            exit(1);
        }
    
        if((portnumber=atoi(argv[2])) < 0)
        {
            fprintf(stderr,"Usage:%s hostname portnumber"a"n", argv[0]);
            exit(1);
        }
        
        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
            fprintf(stderr, "Socket Error:%s"a"n", strerror(errno));
            exit(1);
        }
        
        bzero(&server_addr, sizeof(server_addr));
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = portnumber;
        server_addr.sin_addr.s_addr = inet_addr(argv[1]);
        
        if(connect(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
        {
            fprintf(stderr, "Connect Error:%s"a"n", strerror(errno));
            exit(1);
        }
        
        if((nbytes = recv(sockfd, buffer, RECVBUFSIZE, 0)) == -1)
        {
            fprintf(stderr, "Read Error:%s"n", strerror(errno));
            exit(1);
        }
        buffer[nbytes]='"0';
        printf("I have received:%s"n", buffer );
        close(sockfd);
        exit(0);
    } 


    最后,skyeye-binary-testutils-1.1.0.tar.bz2/at91x40/uclinux1包里提取boot.rom,用步聚6中的方法,把tcpserver程序放在boot.rom的bin目录中在目标板上运行tcpserver 2000在主机上运行./tcpclient 10.0.0.2 2000看看结果!

    程序的源码的注释因篇幅不在这给出,大家可以参考一些Linux网络编程的书籍,我也会在我的主页上更新一些资料,有需要的朋友可以去下载!


    8、编译并运行uClinux-dist-20030909.tar.gz

    到ftp://166.111.68.183/pub/embed/uclinux/soft/
    或到ftp://166.111.8.229/OS/Embeded/uclinux/pub/uClinux/dist下载
    uClinux-dist-20030909.tar.gz

    假设把它下载到/usr/src/目录下,然后依次执行下面的命令:

    tar zxvf uClinux-dist-20030909.tar.gz
    cd uClinux-dist/

    在图形方式下可用命令make xconfig或在命令行方式下用命令

    make menuconfig

    vendor/product中选择GDB/ARMulator
    kernel版本选择2.4,然后save and exit

    运行下面这两条命:

    make dep
    make

    此时在/usr/src/uClinux-dist/linux-2.4.x目录下会生成可执行文件linux,在/usr/src/uClinux-dist/images/会生成romfs.img等文件

    在uClinux-dist目录下建立仿真AT91的skyeye配置文件skyeye.conf,内容如下:

    cpu: arm7tdmi
    mach: at91
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
    mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.img
    mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
    mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
    mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000


    这个时候就可以用skyeye来调试运行kernel了,在/usr/src/uClinux-dist执行如下命令:

    skyeye linux-2.4.x/linux
    
    (skyeye)target sim
    
    (skyeye)load
    
    (skyeye)run
    
    kernel start.....

    注意:
    要在skyeye.conf所在目录下执行skyeye linux-2.4.x/linux


    9、加入网络功能


    a.用root用户进行操作。
    b.你要看你的/lib/modules/'uname -r'/kernel/drivers/net/目录里有没有tun.o
    如果没有的话你就需要编译你的linux内核来获得tun.o了。
    c.(1)运行tun设备模块:

    #insmod /lib/modules/'uname -r'/kernel/drivers/net/tun.o

    如果你没有该设备,那你就要用下面的命令来创建它:

    #mkdir /dev/net
    #mknod /dev/net/tun c 10 200

    (2)运行vnet(虚拟集线器)设备模块(这一步不是必需的):
    获取vnet的源码,然后创建设备:

    #mknod /dev/net/vnet c 10 201
    #chmod 666 /dev/net/vnet

    创建vnet.o
    #make vnet.o

    插入模块vnet.o
    #insmod vnet.o

    进入test目录,用test来测度vnet.o
    #cd test
    #make
    #./testvnet1

    d.配置skyeye.conf文件

    cpu: arm7tdmi
    mach: at91
    mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
    mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
    mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=images/romfs.img
    mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
    mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
    mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
    mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
    # format: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd
    net: state=on, mac=0:4:3:2:1:f, ethmod=tun, hostip=10.0.0.1


    下面将对上面的一些参数作下说明:
    state=on/off意思是仿真的NIC(网络接口板)是有线的还是无线的;
    mac=仿真适配器的MAC地址;
    ethmod=tuntap/vnet在主机环境里使用的虚拟设备;
    hostip=意思是主机环境与keyeye交互用的IP
    格式: state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd

    For example:
    #set nic info state=on/off mac=xx:xx:xx:xx:xx:xx ethmod=tuntap/vnet hostip=dd.dd.dd.dd
    net: state=on, mac=0:4:3:2:1:f, ethmod=tun, hostip=10.0.0.1

    net: state=on, mac=0:4:3:2:1:f, ethmod=vnet, hostip=10.0.0.1

    注意:
    如果你想在同一时刻运行两个或更多的skyeye,那么请为每一个skyeye使用不同的skyeye.conf

    e.运行skyeye linux-2.4.x/linux

    10、安装完成SkyEye后,下一步将做什么?

    1、对于嵌入式操作系统的初学者和入门者和入门的学生而言,他们可以先看一些有关操作系统和嵌入式操作系统方面的教材和书籍,如与uC/OS、Minix、uClinux、Linux相关的书籍等。然后可以在Skyeye上开发一些简单的应用程序例子(如进程间通信、进程优先级、死锁情况、网络应用等),对某些操作系统功能(如进程调度、内存管理、网络子系统、文件子系统等)进行简单的修改和扩展,并通过Skyeye进行运行和调试,看看会发生什么情况。

    2、对于有一定经验的软件工程师而言,在SkyEye上完成一定的应用系统原型开发是值得一做的事情。比如移植或开发一个文件子系统或网络子系统到一个特定的操作系统中,相信比在一个真实的开发板上开发要容易一些。在Skyeye上进行一些操作系统的移植和开发(如移植RTLinux、RTAI等其它操作系统到Skyeye上)也是很有挑战性的工作。

    3、对于硬件工程师而言,对Skyeye进行扩充,设计新的硬件仿真(如USB、IDE硬盘等)使得Skyeye的硬件仿真功能更加强大,支持更多功能的软件,是很有意义的事情。

    参考:
    SkyEye项目站点里的一篇中文文档;
    陈渝《SkyEye Project FAQ》;
    skyeye-0.7.0中的README文档。

     

    展开全文
  • 用于教育的快速,简单的ARM模拟器 安装 下载并享受它! 图形用户界面 java -jar project-armstrong.jar 命令行界面 java -jar project-armstrong.jar cli 信息 要求 Java 11 Windows x86 / x64或Linux x64 使用的...
  • 模拟器能够在PC下模拟Windows CE的物理平台。但实际上它只不过是一个运行在CPU Ring 3级别的用户程序。所以它的运行速度要比正常的物理平台要慢。模拟器仅支持x86平台,它只能调试基于"Emulator:x86"的内核和所有用...
  • Android arm模拟器的速度提升方法

    千次阅读 2012-03-31 06:43:39
    The emulator is running actual ARM opcodes. It uses  qemu , which is a virtualization system akin to a VirtualBox or VMWare, to accomplish this. That approach maximizes the fidelity between the ...
  • 微软公司计划在ARM芯片之上模拟x86指令,并将这种兼容性引入未来的Windows平板与手机当中。  将遗留应用放在这里,其将有种宾至如归的感觉 这一名为Cobalt的项目应该会在今年之内即可与广大用户见面,即Windows 10...
  • http://qemu.weilnetz.de/ QEMU Binaries for Windows 转载于:https://www.cnblogs.com/hotshopping88/p/9744335.html
  • 如果像我一样,编译出的apk中的so都是ARM的,那么就需要ARM架构的虚拟机,否则就会报下面的错误。x86兼容性不够 , 很多app装不上 或者装上了不能玩。市面上的模拟器大多是x86的,因此如果安装不上的话,可以考虑是否...
  • ARM7TDMI软件模拟器simuCPU-ARMv1.02.rar simuCPU-ARMv1.02 http://www.hackchina.com/cont/183265 http://www.hxzi.com/view/138988.html#hxzi 所属分类:微处理器开发 开发工具:C-C++ 文件大小:1006 KB 上传时间...
  • DNP3协议-(分站)服务器模拟器,客户端(主)模拟器Windows和Linux(ARM)-C,C ++,C#.NET编程- 完整实施DNP3协议标准,包括文件传输。 二进制输入,双位二进制输入,二进制输出,计数器输入,模拟输入,...
  • windows x86 电脑开发背景下,运行AndroidStudio的android模拟器,无法安装armeabi应用(项目中的so文件仅支持arm指令)。 由此,arm Translator技术应运而生。houdini是intel 研发的ARM binary translator,充当...
  • (3).ARM系统的.iso镜像:(4).制作镜像(5).准备目录2.安装虚拟机3.启动虚拟机总结问题描述: 前言 随着国产化的浪潮一步一步的加大,我们接触的国产系统和国产硬件也在不断的增多,忍不住的吐槽,现在的硬件是真的...
  • 如果我们编写了一个Android应用程序,想在一台没有Android SDK或者BUILD环境的机器显示给别人看...这篇文章介绍另外一种方法在Windows下环境下使用Android模拟器,它不依赖于SDK或者BUILD环境,可以独立分发和使用。  
  • windows 10armMicrosoft just launched a version of Windows 10 that will run on low-powered ARM hardware. Unlike Windows RT, the version of Windows 8 that powered the original Surface and Surface 2, thi...
  • 找了很久,终于找到一个windows ce 5.0的中文模拟器。 CPU是ARM920T的。
  • 回复: 108成功运行于 ARM 上的 NES模拟器(InfoNES)(330851310)出0入0汤圆楼主|发表于 2010-11-12 23:19:43|只看该作者程序运行图:(原文件名:DSC_1452.JPG)(原文件名:DSC_1455.JPG)(原文件名:DSC_1457.JPG)(原文件名:...
  • 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI现在,ARM64设备上的Windows系统,也可以运行64位的x86应用程序(x64)了。微软最新宣布,已经在Windows I...
  • windows10arm手机版是微软与高通合作后推出的arm芯片的专属微软系统,该系统可以运行exe文件,类似于桌面端,arm作为未来系统发展方向,为用户提供了移动手机办公的可能性。windows10arm镜像介绍Windows 10 on ARM...
  • Wine开发人员AndréHentschel和StefanDösinger一直致力于“Hangover”,以便在64位ARM(AArch64)Linux和Android甚至Windows for ARM上运行Windows x86/x86_64应用程序。他们今天发布了项目的第一个alpha版本。...
  • 我的环境: VMware Ubantu14.04 64位 Linux内核 4.4.0-137-generic 步骤 下载Linux内核 因为内核版本过高,影响后面搭建,下载linux-3.16的内核 wget ...安装arm的交叉编译工具链 sudo apt-g...
  • 我的环境: VMware Ubantu8.2-19ubuntu1 Linux内核 3.13.0-32-generic 1.下载Linux内核 wget ...2.安装arm的交叉编译工具链 sudo apt-get install gcc-arm-linux-gnueabi 3....
  • IEC 60870-5-104协议-RTU服务器模拟器,主客户端模拟器Windows和Linux(ARM)软件开发套件,C,C ++,C#.NET编程中的源代码。 完整的实现,包括文件传输(监视器和反向) 使您的RTU,协议转换器,网关,HMI,...
  • 1. 安装Windows CE 5.0(记得CPU类型里把ARMV4I选上)装完之后装DeviceEmulatorBSP.msi,这是ARMV4I模拟器的BSP。 2. 运行Platform Builder,新建一个Platform,给你的新Platform取一个名字,我这里取为MyCEEmu。...
  • IEC 60870-5-101协议-RTU服务器模拟器,主客户端模拟器Windows和Linux(ARM)软件开发套件,C,C ++,C#.NET编程中的源代码-完整的协议实现,包括文件传输 FreyrSCADA提供IEC101 RTU服务器模拟器IEC101客户端主...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,319
精华内容 3,327
关键字:

arm模拟器windows