您的位置:首页 > 其它

跟着vivi学bootloader

2009-08-29 21:58 211 查看
话说上回通过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个引脚都为输出 ,两位描述一个脚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: