当前位置:蚂蚁文档网 > 作文范文 > 学习ARM开发(6)x

学习ARM开发(6)x

时间:2022-07-02 17:15:06 浏览次数:

 学习 ARM 开发(6) 习 学习 ARM 开发 开发(6)

 上一次,说到要学习 ARM 汇编,好,现在就开始。目前我的引导程序是在UBOOT1.1.2 上修改过来的,大家可以下载 UBOOT 的源程序,也许你们会问在那里有下呢?这个问题不用我回答了,用 GOOGLE,直接找 u-boot,就可以找到了。

 由于这个引导程序是从 u-boot1.1.2 修改过来的,所以还是采用 uboot 的编译工具,它就是 arm-linux-tools-20031127.tar.gz,这个可以 uboot 的网站下载,然后在linux 下安装好,就可以编译引导程序。

 编译命令主要:

 clean 是清空所有临时文件,一般是用来清空目录,用来重新编译程序。

 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 的目录

 8

 12:47

 <DIR>

 .. 57-16

 04:35

  4,154 .depend 02-24

 086

  1,066 config.mk 10-18

 052

  978 cpu.c 4,84interrupts.c 02-24

 086

  103 Makefile 4-108

 05:12

  378 serial.c 8

  820 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

 .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

猜你喜欢