现在的位置: 首页 > 综合 > 正文

跟着vivi学bootloader

2013年08月24日 ⁄ 综合 ⁄ 共 650字 ⁄ 字号 评论关闭

话说上回通过LFS把linux的结构学习了一下后,探究出嵌入式的几大组成部分,bootloader,linux内核,根文件系统

得,就从bootloader开始,从cpu加电的那一刻开始

拿出以前买的s3c2440的开发板,经过一番搜索,得知uboot和vivi是这个平台下比较流行的两个bootloader,鉴于vivi比较简单,就从vivi入手,找出head.S即bootloader的入口,逐行分析,从最简单的点灯,到输出UART,到拷贝nand到ram,到跳转到c程序,其间通过《S3C2410完全开发教程》的帮助,基本调通弄明白了,大家有不明白的可以多搜索这篇文章。

我就讲讲几个在调试过程中困扰我比较久的问题:

1:一个是跳到ram的问题,如何实现,即通过ldr pc,=step2 这个伪指令,=step2就是ld的时候设置的运行地址,要注意ldr作为伪指令和加载指令的区别

_start:
    b step1 @b操作都是相对位置
step1:  @标号这都是连接地址,如0x30000000   动态库重定向地址应该也是这个概念,加载的地址不一样
    ldr pc,=step2  @ldr操作则是填入绝对地址,即连接地址,实现跳转
step2:
    b step2

 

2:GPIO口的设置,我这个开发板的灯端口是GPIO_B

    mov    r1, #GPIO_CTL_BASE
    add    r1, r1, #oGPIO_B
    ldr    r2,=0x155555    @设置11个引脚都为输出 ,两位描述一个脚

 

 

抱歉!评论已关闭.