学习笔记二--《一步一步写嵌入式操作系统--Arm编程方法与实践》

     今天工作不算很忙,于是就继续看了第一章的SkyEye虚拟硬件安装和第二章的几节。

     一大早,我就想在机器上跑Arm虚拟机(SkyEye),谁知道在安装过程中,要用到make指令的时候就遇到了comand not found 错误!我记得我在安装cygwin时,明明有选择安装make!在几经波折之后,才发现也许是在安装过程中,选中Detch 下的make时, 如果选中把红色区域的bin类型也选中, 则安装失败,并最终导致都不成功!具体原因未知!

    晚上我又看了第二章《基础知识》中的《使用C语言写一段小程序》、《用脚本链接目标文件》及《用汇编语言写程序》。c语言部分在此略过, 以下着重说明虚拟机SkypEye在启动时运行自己开发的程序的过程。 在安装了Skyeye后,当你在Cygwin中输入Skyeye命令启动Skyeye时,它首先搜索本目录下是否有Skyeye.conf这个文件,如果有,则读取里面关于要模拟的虚拟机的环境,如cpu,启动程序的文件路径等(Skyeye.conf有点类似BIOS配置参数).

 

      虽然能看明白汇编语言这一节,但是要真正开始做Arm上的汇编程序设计,个人觉得只从书中这点知识入手是很难的,还是需要系统学习Arm体系结构与汇编基础知识。在这里先总结下了解到的Arm寄存器结构及一些指令。

 

图一:Arm体系寄存器结构

 

伪指令集:

   ldr:从内存中读取数据到寄存器中

   adr: 将地址存入到某个寄存器中

   arch:选择目标体系

  global:为外部调用公开某个地址

  .equ: 类似于宏定义

 .text: 指定以下内容为代码段

  .align:指定以几个字节为边界对齐代码! 个人理解:用以方便计算内存地址

指令集 :

 cmp:比较指令

 b:跳转指令

 

转载于:https://www.cnblogs.com/Hcsdn/archive/2012/09/05/2672534.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一步步嵌入式操作系统 linux平台实现代码 step 0 准备开发环境 1 安装交叉编译工具 sudo apt-get install gcc-arm-none-eabi sudo apt-get install gcc-arm-linux-gnueabihf sudo apt-get install g++-arm-linux-gnueabihf 2 手边编译skyeye 用apt命令安装的skyeye模拟器版本(1.2.5)有bug,需要手动编译更高版本的skyeye 下载并解压skyeye 1.2.6_rc1的代码, ~/Downloads/skyeye-1.2.6_rc1 根据执行skyeye-1.2.6_rc1/INSTALL的说明 1 执行 ./configure 2 执行 make 后 编译错误1: In file included from /usr/include/fcntl.h:289:0, from nandflash/nandflash_smallblock.c:19: In function ‘open’, inlined from ‘nandflash_sb_setup’ at nandflash/nandflash_smallblock.c:519:24: /usr/include/x86_64-linux-gnu/bits/fcntl2.h:50:4: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments __open_missing_mode (); 解决方法: 修改skyeye-1.2.6_rc1/device/nandflash/nandflash_smallblock.c 519行 if ((nf->fdump= open(dev->dump, FILE_FLAG)) < 0) 改为: if ((nf->fdump= open(dev->dump, FILE_FLAG, 0777)) < 0) 编译错误2: gcc -g -O2 -o skyeye skyeye.o ./utils/libutils.a ./arch/arm/libarm.a ./device/libdev.a ./arch/mips/libmips.a ./arch/ppc/libppc.a ./arch/bfin/libbfin.a ./arch/mips/libmips.a ./arch/coldfire/libcoldfire.a -lc ./utils/libutils.a -lbfd -lm -lc ./arch/mips/libmips.a(decoder.o):在函数‘decode’中: /home/kolya/Downloads/skyeye-1.2.6_rc1/arch/mips/common/decoder.c:1079:对‘sign_extend_UInt32’未定义的引用 /home/kolya/Downloads/skyeye-1.2.6_rc1/arch/mips/common/decoder.c:1105:对‘sign_extend_UInt32’未定义的引用 /home/kolya/Downloads/skyeye-1.2.6_rc1/arch/mips/common/decoder.c:1049:对‘sign_extend_UInt32’未定义的引用 /home/kolya/Downloads/skyeye-1.2.6_rc1/arch/mips/common/decoder.c:1027:对‘sign_extend_UInt32’未定义的引用 /home/kolya/Downloads/skyeye-1.2.6_rc1/arch/mips/common/decoder.c:1013:对‘sign_extend_UInt32’未定义的引用 ./arch/mips/libmips.a(decoder.o):/home/kolya/Downloads/skyeye-1.2.6_rc1/arch/mips/common/decoder.c:1001: 跟着更多未定义的参考到 sign_extend_UInt32 ./arch/mips/libmips.a(decoder.o):在函数‘decode’中: /home/kolya/Downloads/skyeye-1.2.6_rc1/arch/mips/common/decoder.c:240:对‘divide_UI

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值