学习ARM开发(6)

上一次,说到要学习ARM汇编,好,现在就开始。目前我的引导程序是在UBOOT1.1.2上修改过来的,大家可以下载UBOOT的源程序,也许你们会问在那里有下呢?这个问题不用我回答了,用GOOGLE,直接找u-boot,就可以找到了。
由于这个引导程序是从u-boot1.1.2修改过来的,所以还是采用uboot的编译工具,它就是arm-linux-tools-20031127.tar.gz,这个可以uboot的网站下载,然后在linux下安装好,就可以编译引导程序。
编译命令主要:
make clean 是清空所有临时文件,一般是用来清空目录,用来重新编译程序。
make XXXX_config 是编译本引导程序,XXXX是自己定义的开发板,在board目录下。
make backup 是备份引导程序的源程序。

UBOOT编译环境建立起来,就可以去修改和学习UBOOT的源程序,就可以开发自己的boot。源程序已经下载,就可以解开压缩包,在目录u-boot-1.1.3,因目前最新的UBOOT是1.1.2,那个1.1.3是我自己的UBOOT源程序,如果自己想改为1.1.3名称,在LINUX下编译是有点问题的,自己去试试吧。哈哈。。。
接着,我到目录cpu/s3c44b0,这个目录,就是S3C44B0的CPU引导程序,最开始运行的代码就是从这里开始的。那我看代码,也要从这里开始。
看一下这个目录,包括文件有:
G:/Downloads/lichee/lichee/boot/src/u-boot-1.1.3/cpu/s3c44b0 的目录

2005-07-18  12:47    <DIR>          .
2005-07-18  12:47    <DIR>          ..
2005-07-16  04:35             4,154 .depend
2004-02-24  08:16             1,066 config.mk
2004-10-18  05:12             9,878 cpu.c
2004-02-24  08:16             4,843 interrupts.c
2004-02-24  08:16             1,303 Makefile
2004-10-18  05:12             4,378 serial.c
2005-07-17  23:48             4,820 start.S
2005-07-17  23:47             4,784 start.S.bak

有好几个文件,它们的作用,大家自己先想想,不懂的再问我,目前我要开始看start.S文件,这个最开始运行的文件。
这个文件是汇编写的,但它是经过c的预处理的,所以像在头文件.h中的宏,也可以使用的,这就是GCC的博大之处。大家看到我的目录,也许很奇怪,为什么会有“lichee”这个名称?我来告知各位,这个是我起的名称,叫做“荔枝”,我的BOOT代码和我的uClinux的代号,都叫“荔枝”。吃过“荔枝”的人,都知道外面红红的,里面的肉是白的,清甜可口。我的BOOT和OS都是外面看起来很好看,里面的功能,就是难看了,但要深入去了解,才会尝到新鲜的味道。
好了,下面就要开始品尝我的“荔枝”了,第一段代码:
/*
* S3C44B0 CPU启动代码。
* 蔡军生 2005/07/17
*
*/

/*
* 包含配置文件。
*/
#include <config.h>

/*
添加版本说明.
2005/07/16
*/
#include <version.h>

/*
* 中断向量表.
*/

/*
× 声明标量是全局函数,CPU加电启动后,就从这里执行代码。
*/
.globl _start
_start:        b       reset                   /* 跳到复位中断开始位置。 */
        add        pc, pc, #0x0c000000
        add        pc, pc, #0x0c000000
        add        pc, pc, #0x0c000000
        add        pc, pc, #0x0c000000
        add        pc, pc, #0x0c000000
        add        pc, pc, #0x0c000000
        add        pc, pc, #0x0c000000

.balignl 16,0xdeadbeef

上面这段代码,看懂了吗?如果有什么不懂,就发问题过来。
这里用到ARM指令,b指令就是无条件地跳到reset的地方运行,reset是一个标记,并且它是相对量。
add        pc, pc, #0x0c000000,这句用到了4G空间跳转技术,因为ARM的CPU下一次值是根据PC的值来进行的。这里修改了PC的值,就相当跳到对应的地址运行了。又由ARM的指令的宽度是4字节的,所以这里的PC值就是0x0c000004。如果这里直接用b指令是不行的,因为它不超出32M的寻址空间,只有修改PC值才可以达到目的,因此采用ADD指令来修改PC值。
.balignl 16,0xdeadbeef
上面这句,就是填充多少字节在后面。

整段代码实现建立中断向量表,这个根据ARM的CPU来编写的。

OK,第一段代码看完了,下一次再接着看第二段代码。

学习ARM开发(6)相关推荐

  1. 学习ARM开发(3)

    学习ARM开发(3)上一次说到装好LINUX后,就要装开发环境了,因为编译在LINUX下,当然是用GCC,但这个GCC跟LINUX本身带的又不一样.目标代码是ARM,而LINUX带的,一般是I386的 ...

  2. 学习ARM开发01-09

    /***********************************  *作者:蔡军生  *出处:http://blog.csdn.net/caimouse/  ***************** ...

  3. 学习ARM开发(11)

    学习ARM开发(11) 昨天又是星期天,在家里又可以对那块开发板进行软件研究了. 由于前几次,把编译好的UBOOT写到FLASH老是运行不了.那么怎么办呢?思考了很久,也查看 了源程序,还是没有发现问 ...

  4. 学习ARM开发(4)

    学习ARM开发(4) 已经把CPU大体架构学会了,当然我之前已经学习过80X86的结构,所以对于像RISC的计算机,也能想像到它是什么样的东西.如果没有学习过<微机原理>,那最好去看看,或 ...

  5. 学习ARM开发(2)

    学习ARM开发(2) 今天是星期天,刚好在家里休息.又是学习ARM的大好时机了. 早上起得很早,因为都想着怎么样搞好这个ARM开发环境,总是心急的.搞得睡觉,也睡不好.立即把电脑打开,为了更加快点,把 ...

  6. 学习ARM开发(10)

    学习ARM开发(10) /* 用循环调用所有初始化函数 */         for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ ...

  7. 学习ARM开发(1)

    #1  学习ARM开发(1) 做任何事情之前,一定要想好目标.没有目标的事情是做不好的,也做不成.我的目标就是学习ARM开发,当然是深入的学习. 目标如下 : 1.学习ARM开发环境. 2.学习ARM ...

  8. 学习ARM开发(15)

    使用GCC来开发ARM,就一定遇到编译器的问题.比如遇到编译C代码各种警告和错误.像我昨天就遇到了几个警告,那么就来看看这几个警告是什么引导的呢? 警告如下: armlib/memory.c: 91 ...

  9. 在Ubuntu下使用QEMU搭建arm开发环境(一)搭建基本开发环境

    马上就要开学了,开学后就会开始arm+Linux的学习,因为马上就要去学校了,就没有买板子,打算去了学校再买,但是想学习的心是迫切的(O(∩_∩)O哈哈~),在网上浏览的时候发现了QEMU这个&quo ...

最新文章

  1. 包含锚点平滑滚动效果/解决锚点链接碰到固定定位问题/导航选中背景变色/固顶/返回顶部效果全...
  2. shocked的歌曲 类似shell_韩庚 / Wiz Khalifa / Juicy J / Kill The Noise演唱歌曲《Shell Shocked》歌词介绍_TOM明星...
  3. virtualenv 模块
  4. linux下查看cpu,内存,硬盘等硬件信息的方法
  5. SAP UI5 应用开发教程之四十一 - Chrome 扩展 UI5 Inspector 的离线安装和使用方法试读版
  6. js splice坑_JavaScript的splice()方法在for循环中使用可能会遇到的坑!!!
  7. linux wget 命令_我如何使用wget Linux命令恢复丢失的图像
  8. java瞎子_Java学习路线,及各方面知识点
  9. java项目介绍_java项目介绍及创建
  10. python分数计算器_python计算器实现过程
  11. newifi3 高恪魔改_原地升值?newifi 3 路由器刷入高恪固件教程
  12. 山海经妖兽录服务器维护,山海经九州异兽录不能登录怎么解决
  13. 计算机无法登陆提示rpc服务器不可用,电脑提示RPC服务器不可用的解决方法
  14. Pearson 相关分析 理论与应用
  15. 计算机课件制作总结,课件制作比赛活动总结范文
  16. mysql主从配置duxi_手把手超详细Docker部署MongoDB集群
  17. 移动端小案例(黑马面面)
  18. OpenCV调试利器——Image Watch插件的安装和使用
  19. spring boot服务器内存不足排查
  20. html给下拉菜单设置背景色,如何更改下拉菜单活动背景的颜色(即。tk.列表框)在一个ttk.组合框...

热门文章

  1. aspose将word转换为pdf[aspose.word.java 18.11]
  2. 香农采样定理和奈奎斯特采样定理
  3. java中文件加锁机制
  4. Ubuntu 20.04 开启麦克风降噪功能
  5. Android NFC开发详解 总结和NFC读卡实例解析
  6. Blender插件天空地形山水自然环境生成器 TerrainScapes V2.0
  7. 华为鸿蒙系统操作教程_华为鸿蒙系统2.0怎么安装 鸿蒙系统2.0安装教程[多图]
  8. Synchronization和java内存模型
  9. PC - Chrome 浏览器如何开启无痕模式?
  10. pytorch 预测手写体数字_深度学习之PyTorch实战(3)——实战手写数字识别