0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

拒绝开发板, 用 SkyEye 就可以模拟 ARM Linux!

Q4MP_gh_c472c21 来源:未知 作者:伍文辉 2018-03-28 09:07 次阅读

对于希望学习 ARM 汇编的同学而言, 购买 ARM 开发板进行板上实测无疑是一个有效的方法,不过购买 ARM 开发板需要一笔费用,而且每次测试都需要连接开发板,比较麻烦。这里介绍一个 ARM 模拟器——SkyEye,通过 SkyEye 我们可以直接在一台 PC 上完成 ARM 汇编程序的开发和调试了,摆脱了 ARM 开发板的限制,真是不错!

下面介绍如何使用:

1、下载 SkyEye 的最新版(https://sourceforge.net/projects/skyeye/),本文用的是 skyeye-1.3.4_rc1.tar.gz,同时为了后面的实验,还要下载 testsuite,它是 skyeye 的测试文件,这里的版本是 skyeye-testsuite-1.3.4,里面有 ArmLinux

2、安装 SkyEye。

$ tar zxvf skyeye-1.3.4_rc1.tar.gz

$ cd skyeye12

根据 INSTALL 文件里说的步骤:

./configure

make lib

make

sudo make install

sudo make install_lib12345

注意,在 make 时可能会缺各种文件,apt-get install 就可以了,比如我们这里所遇到的两个问题是:python-dev 和 llvm 没有安装。解决方法很简单:

$ sudo apt-get install python-dev

$ sudo apt-get install llvm12

这样 SkyEye 就算安装好了。

3、添加环境变量。

默认 SkyEye 是安装在 /opt/ 下的,因此为了方便,我们在环境变量里把它的路径加入,我们写到 .bashrc 文件中,打开它:

$ vi ~/.bashrc1

输入:

#SkyEye 1.3.4

export PATH=/opt/skyeye/bin:$PATH12

之后注销再登录或执行 source .bashrc 就可以使环境变量生效了。

4、运行 arm_hello 测试程序。

SkyEye 安装好后会在 /opt/skyeye/testsuite 下有一个 arm_hello 的测试程序,按如下方式运行:

$ cd /opt/skyeye/testsuite/arm_hello

$ skyeye -e arm_hello12

注意:skyeye 要运行一个程序时必须要在这个程序的目录里,因为 skyeye 要读取这个程序的 skyeye.conf 配置文件,所以第一步我们要切换到 /opt/skyeye/testsuite/arm_hello 目录下。

这时我们会进入 skyeye 命令模式,输入 start 让 arm_hello 程序开始运行,会弹出一个“connecting to Ubuntu:xxx”的字样的窗口。

5、确保 arm_hello 正常运行。

在 skyeye 命令行输入 run 开始运行,这时窗口会不停的输出“helloworld”,说明 arm_hello 已经成功运行了!

6、arm_hello 的其他命令。

在 skyeye 命令行输入 stop 停止运行;输入 quit 退出skyeye;输入 help 查看帮助。

显然,上面只是安装好了 SkyEye,我们的目的是在 SysEye 中模拟 ARM Linux。那么,下面就来介绍如何在 SkyEye 上启动 Linux,就和在真实的 ARM 开发板上一样。

1、解压 testsuite 测试文件。

$ tar zxvf skyeye-testsuite-1.3.4_rc1.tar.gz1

其中的 linux 目录就是我们要移植到板子上的 amrlinux,依次进入:s3c2410 –>s3c2410x-2.6.36,有三个文件,vmlinux 是 Linux 内核镜像,skyeye.conf 是配置文件,initrd.img 是临时根文件系统。我们在 /opt/skyeye/testsuite 下新建一个目录,然后 copy 过来:

$ sudo mkdir /opt/skyeye/testsuite/armlinux

$ cd linux/s3c2410/s3c2410x-2.6.36

$ sudo copy * /opt/skyeye/testsuite/armlinux123

2、运行 vmlinux 。

$ cd /opt/skyeye/testsuite/armlinux

$ skyeye -e vmlinux12

进入 skyeye 命令模式,输入 start 打开串口窗口。

(我在执行这一步时出错:failed to setup_module (name:net, type:cs8900a),我把 skyeye.conf 里的 net 那一行注释掉了,就行了。)

如果窗口没有打开,则修改 uart:mod=stdio 为 uart:mod=term,然后再试试。

3、启动 Linux 。

在 skyeye 命令行输入 run 启动Linux,屏幕随即会输出串口信息,不过速度很慢!

附几张图:

上面我们简单介绍了如何使用 SkyEye,并且成功运行了既有的 arm_hello 程序,不过这个是针对 arm7 的,现在我们要用 SkyEye 模拟 s3c2410(arm920T)。下面我们开始 SkyEye 的第二部分。

1、首先在 /opt/skyeye/testsuite 下建立 myhello 目录。

$ mkdir /opt/skyeye/testsuite/myhello1

2、添加 myhello.c 文件。

$ cd /opt/skyeye/testsuite/myhello

$ vi myhello.c12

输入如下内容:

#define INTERVAL 100000

void myhello(void)

{

long * addr = (long *)0x50000020;

int timeout = 0;

while(1) {

timeout = 0;

while(++timeout <= INTERVAL);

*addr = 'a';

}

}12345678910111213

地址 0x50000020 就是 UART 的通道 0(UTXH0)的发送缓冲,把数据写入这个地址就会自动发送出去,当然在模拟器中,发送的目标地址就是我们的屏幕啦。

3、准备启动代码。

myhello.c 写好了之后,我们还要准备一段 s3c2410 的启动代码,这段代码在 s3c2410 一上电之后就开始执行,在这段启动代码中,回跳转到我们写的 myhello.c 函数。打开 start.S 文件:

$ vi start.S1

输入如下内容:

.text

.align 4

.global _start

_start:

ldr sp, =1024*4

bl myhello

halt:

b halt12345678910

上面这段很简单,就是声明了一个 _start 标记,这个标记在下面会用到,作为程序的入口地址。汇编和 C 链接的唯一必须的一步就是设置堆栈,这里我们把 sp 指向 4k 顶部,然后跳转到我们的 c 函数myhello 。

4、编写链接脚本。

链接的顺序就是先 start.S 后 myhello.c,打开 myhello.lds 文件:

$ vi myhello.lds1

输入如下内容:

OUTPUT_ARCH(arm)

ENTRY(_start)

SECTIONS

{

. = 0x00000000;

.text :

{

start.o

myhello.o

*(.rodata)

}

. = ALIGN(8192);

.data : {*(.data)}

.bss : {*(.bss)}

}123456789101112131415161718

表示输出 arm 格式,第二句表示入口点是 _start 标记,就是第3步的那个 _start 标记,然后在 0x00000000 处先插入 start.o,然后插入 myhello.o 。

5、编写 Makefile 文件。

$ vi Makefile1

输入如下内容:

CC=arm-linux-gcc

LD=arm-linux-ld

CFLAGS= -c -g -march=armv6 -mtune=arm920t

LDFLAGS= -N -p -X -Thello.lds

myhello: start.o myhello.o

$(LD) $(LDFLAGS) start.o myhello.o -o myhello

arm-linux-objdump -xS myhello > myhello.s

arm-linux-readelf -a myhello > myhello.r

arm-linux-nm myhello > myhello.n

start.o: start.S

$(CC) $(CFLAGS) start.S

myhello.o: myhello.c

$(CC) $(CFLAGS) myhello.c

clean:

rm -rf *.o myhello *.r *.n *.s

arm-linux-objdump -xS myhello > myhello.s

arm-linux-readelf -a myhello > myhello.r

arm-linux-nm myhello > myhello.n123456789101112131415161718192021222324

6、最后我们还需要一个 skyeye 配置文件。

$ vi skyeye.conf1

输入如下内容:

#skyeye config file

arch:arm

cpu: arm920t

mach: s3c2410x

# boot

mem_bank: map=M, type=RW, addr=0x00000000, size=0x04000000, boot=yes

# physical memory

mem_bank: map=M, type=RW, addr=0x30000000, size=0x02000000

# all peripherals I/O mapping area

mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000

uart:mod=term

#log: logon=0, logfile=./sk1.log, start=0, end=20000012345678910111213141516

7、编译。

$ cd /opt/skyeye/testsuite/myhello

$ make12

8、测试。

$ cd /opt/skyeye/testsuite/myhello

$ skyeye -e myhello12

在 skyeye 命令模式下输入:

start

run12

我们会发现连续输出了字符“a”,完成!

PS:源码中有两处值得商榷的地方:

1) Makefile 第3、4行, 建议为:

CFLAGS= -c -g -march=armv4 -mtune=arm920t

LDFLAGS= -N -p -X -Tmyhello.lds12

2) skyeye.config 第15行, 建议为:

uart:mod=stdio

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9189

    浏览量

    369947
  • Linux
    +关注

    关注

    87

    文章

    11356

    浏览量

    210785

原文标题:不用买开发板, 使用 SkyEye 模拟 ARM Linux

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    SkyEye模拟器的音频输出模拟模块设计与实现

    ,支持多种CPU指令集,可以模拟多种嵌入式开发板,在SkyEye上运行的操作系统就像运行在真正的硬件上一样,而且开发人员
    发表于 04-24 09:14

    如何用Skyeye代替ARM开发板来学习嵌入式

    呢?Skyeye这个东西可以完完全全代替ARM开发板。我们在linux系统上安装了之后,就可以
    发表于 07-30 22:36

    移植minicom到ARM开发板

    最近调试自己做的S5PV210的底板上面的串口。因为为了测试一个串口而写程序很麻烦。所以,直接移植了一个minicom到开发板上面。这样就可以直接进行串口收发了。特别是在我需要同时测试多个串口的时候
    发表于 07-05 14:07

    Linux利器:QEMU!用它模拟开发板能替代真开发板? 精选资料分享

    运行(其实它也可以在你的Arm开发板上运行,我们今天先不讨论这种场景),能够模拟Arm、MIPS、RISC-V等各种CPU和
    发表于 07-13 06:59

    嵌入式Linux开发基础知识

     嵌入式系统开发模式嵌入式Linux系统的构成主要任务与流程利用Skyeye仿真开发板开发板使用嵌入式应用程序
    发表于 09-10 11:07 39次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>开发</b>基础知识

    EP9315 ARM评估开发板

    关键词:9315开发板 ARM开发板 EP9315ARM芯片规格:嵌入式工业计算机结构,采用 Cirrus LOGIC EP9315处理器,主频200MHz,自带2D图形加速器,浮点运
    发表于 12-16 15:25 994次阅读

    ARM SkyEye仿真软件使用说明

      SkyEye是一个开源软件(opensource software)项目,中文名字是“天目”。SkyEye的目标是在通用的Linux和Windows平台实现一个仿真集成开发环境,
    发表于 11-12 11:05 4524次阅读

    如何使用ARM开发板Linux嵌入式系统设计一个智能点菜系统

    本课题设计是以ARM开发板搭载Linux嵌入式系统为核心,使用QT编程制作GUI点菜终端,LCD屏显示菜单信息,并可以通过触摸屏按钮实现点
    发表于 11-29 08:00 16次下载
    如何使用<b class='flag-5'>ARM</b><b class='flag-5'>开发板</b>和<b class='flag-5'>Linux</b>嵌入式系统设计一个智能点菜系统

    arm开发板能干什么_arm开发板什么语言

    ARM开发板,即以英国ARM(Advanced RISC Machines)公司的内核芯片作为CPU,同时附加其他外围功能的嵌入式开发板,用以评估内核芯片的功能和研发各科技类企业的产品
    发表于 09-11 15:59 5695次阅读

    新手学习嵌入式Linux和Android开发板推荐

    一,确定目标,linux是一个非常非常大的概念。想全部吃透是不可能的。理想的说,搞懂linux就可以做所有工作。个人更倾向于说想做什么样工作,需要侧重学linux的哪部分。二,选择
    发表于 11-01 17:36 15次下载
    新手学习嵌入式<b class='flag-5'>Linux</b>和Android<b class='flag-5'>开发板</b>推荐

    android开发板那种好,学嵌入式哪个开发板好?嵌入式开发板推荐

    学习嵌入式,必不可少的工具就是一块开发板。对新手而言,学嵌入式哪个开发板好,下面为大家推荐一款比较好的嵌入式开发板。嵌入式开发板要推荐的是
    发表于 11-03 12:51 11次下载
    android<b class='flag-5'>开发板</b>那种好,学嵌入式<b class='flag-5'>用</b>哪个<b class='flag-5'>开发板</b>好?嵌入式<b class='flag-5'>开发板</b>推荐

    哪些开发板可以运行linux stm32可以

    Cortex-A7 MPU内核和Cortex-M4 MCU内核,既可以Linux,又可以玩单片机。 FS-MP1A开发板从多核处理器将成为嵌入式技术发展主流考虑,在芯片资源、功能、技
    的头像 发表于 06-07 09:06 5339次阅读
    哪些<b class='flag-5'>开发板</b><b class='flag-5'>可以</b>运行<b class='flag-5'>linux</b>  stm32<b class='flag-5'>可以</b>吗

    arm开发板如何安装linux系统

    安装Linux系统到ARM开发板是一个复杂的过程,涉及到多个步骤和不同的工具。下面是一个详实且细致的教程,包含了从准备工作到最终启动Linux系统的所有步骤。 准备工作 在开始之前,需
    的头像 发表于 01-24 14:19 4371次阅读

    fpga开发板linux开发板区别

    (Field-Programmable Gate Array)是一种可编程逻辑器件,它可以通过编程改变硬件逻辑电路的功能和结构。FPGA采用了可编程的门极,可以根据需要重新配置内部电路,从而实现不同的功能和逻辑关系。而Linux
    的头像 发表于 02-01 17:09 2489次阅读

    linux开发板和单片机开发的区别

    硬件架构 Linux开发板和单片机开发在硬件架构上有很大的区别。Linux开发板通常基于ARM
    的头像 发表于 08-30 15:30 1357次阅读