简易bootloader重定位问题
单板选择NandFlash启动,则硬件上电后,系统会自己主动将NandFlash中的前4K内容复制到STEPSTONE即4K SRAM中。然后从SRAM中的0X0地址启动。
基于mini2440的简易bootloader制作方法在上一篇文章中有提到。它编译出的boot.bin仅仅有1.96KB,小于STEPSTONE的4KB。因此我们能够考虑将bootloader从nandflash复制到内存这一步给省略掉。
一、编辑start.S:
.text
.global _start
_start:
/* close the watchdog */
ldr r0, =0x53000000
mov r1, #0
str r1, [r0]
/* close the watchdog */
@关闭看门狗
@数据手冊:WTCON 0x53000000 R/W Watchdog timer control register
/* set the clock */
ldr r0, =0x4c000014
mov r1, #0x03; @ FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
str r1, [r0]
mrc p15, 0, r1, c1, c0, 0 /* read */
orr r1, r1, #0xc0000000 /* set asynchronous bus mode */
mcr p15, 0, r1, c1, c0, 0 /* write */
ldr r0, =0x4c000004
ldr r1, =((0x5c<<12)|(0x01<<4)|(0x02)) @MPLL:200MHz
str r1, [r0]
/* set the clock */
@设置系统时钟
@假设HDIVN不是0,CPU的总线模式应该设置成asynchronous bus mode
/* enable the ICACHE */
mrc p15, 0, r0, c1, c0, 0 @ read control register
orr r0, r0, #(1<<12)
mcr p15, 0, r0, c1, c0, 0 @ write back
/* enable the ICACHE */
@使能快速缓存,为系统提速,此段可不要,但程序运行速度要慢
/* init the SDRAM */
ldr r0, =0x48000000 @MEM_CTL_BASE
adr r1, config /* sdram config address */
add r3, r0, #(52) @13*4
1:
ldr r2, [r1], #4
str r2, [r0], #4
cmp r0, r3
bne 1b
/* init the SDRAM */
@初始化SDRAM
@依据数据手冊对与SDRAM有关的13个寄存器进行配置
/* relocate */
ldr sp, =0x34000000
bl nand_init
/* mov r0, #0
ldr r1, =_start
ldr r2, =__bss_start
sub r2, r2, r1
bl copy_code_to_sdram */
bl clear_bss
/* relocate */
@把bootloader本身的代码从nandflash复制到它的链接地址去
/* go to main */
ldr lr, =halt
ldr pc, =main
halt:
b halt
/* go to main */
@跳转到main函数运行
config:
.long 0x22011110 @BWSCON
.long 0x00000700 @BANKCON0
.long 0x00000700 @BANKCON1
.long 0x00000700 @BANKCON2
.long 0x00000700 @BANKCON3
.long 0x00000700 @BANKCON4
.long 0x00000700 @BANKCON5
.long 0x00018005 @BANKCON6
.long 0x00018005 @BANKCON7
.long 0x008C04F4 @REFRESH
.long 0x000000B1 @BANKSIZE
.long 0x00000030 @MRSRB6
.long 0x00000030 @MRSRB7
凝视掉:
/* mov r0, #0
ldr r1, =_start
ldr r2, =__bss_start
sub r2, r2, r1
bl copy_code_to_sdram */
二、编辑boot.lds:
SECTIONS {
. = 0x00000000;
.text : { *(.text) }
. = ALIGN(4);
.rodata : {*(.rodata*)}
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) *(COMMON) }
__bss_end = .;
}
将0x33f80000改为0x00000000。
三、make之后将生成的boot.bin下载到nandflash中。能够成功引导内核。
简易bootloader重定位问题的更多相关文章
- ARM内核单片机Bootloader中断向量重定位问题
Bootloader中断向量重定位问题 1.Bootloader程序在内核Cortex-M0+内核中运行时需要进行地址跳转执行应用程序主程序,此时就涉及到了中断向量重定位问题,以下截图为单片机启动文件 ...
- S5PV210开发系列三_简易Bootloader的实现
S5PV210开发系列三 简易Bootloader的实现 象棋小子 1048272975 Bootloader是嵌入式系统上电后第一段运行的代码.对于功能简单的处理器,可能并没有Bo ...
- Reverse Core 第二部分 - 16&17章 - 基址重定位表&.reloc节区
第16-17章 - 基址重定位表&.reloc节区 @date: 2016/11/31 @author: dlive 0x00 前言 这几天忙着挖邮箱漏洞,吃火锅,马上要被关禁闭,看书进度比较 ...
- PE格式第七讲,重定位表
PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先, ...
- 基址重定位表&.reloc节区
第16-17章 - 基址重定位表&.reloc节区 @date: 2016/11/31 @author: dlive 0x01 PE重定位 若加载的是DLL.SYS文件,且在ImageBase ...
- 【图片+代码】:GCC 链接过程中的【重定位】过程分析
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- 2017-2018-1 20179215《Linux内核原理与分析》第七周作业
一.实验部分:分析Linux内核创建一个新进程的过程. [第一部分] 根据要求完成第一部分,步骤如下: 1. 首先进入虚拟机,打开终端,这命令行依次敲入以下命令: cd LinuxKernel ...
- uboot
******************************************day:2014/10/14**************************uboot************* ...
- linux 分区 物理卷 逻辑卷
今天我们主要说说分区.格式化.SWAP.LVM.软件RAID的创建哈~ 格式化 查看当前分区:fdisk -l 这个命令我们以前是讲过的,我现在问下,ID那项是什么意思? 83 是代表EXT2和E ...
随机推荐
- java学习笔记——可用链表
NO 链表方法名称 描述 1 public void add(数据类型 对象) 向链表中增加数据 2 public int size() 查看链表中数据个数 3 public boolean isEm ...
- 屏蔽NumberPicker点击可输入问题
1.xml布局中添加属性:Android:descendantFocusability="blocksDescendants" 2.代码中设置:numberPicker.setDe ...
- MSSQL站库分离情况的渗透思路
本文转自:http://bbs.blackbap.org/thread-6203-1-2.html 1. 服务器属内网环境,站库分离,通过web.config找到数据库服务库SA帐号密码,成功添加用户 ...
- perftools查看堆外内存并解决hbase内存溢出
最近线上运行的hbase发现分配了16g内存,但是实际使用了22g,堆外内存达到6g.感觉非常诡异.堆外内存用一般的工具很难查看,可以通过google-perftools来跟踪: http://cod ...
- 拒绝IP登陆
tail -n 30 /var/log/messages 发现很多IP尝试登陆,直接封禁. 解决方案:1. vi /etc/hosts.allow 添加 sshd:143.63.182.238 [注意 ...
- JavaScript变量提升 面试题
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- mngoDB 常用语法
http://topmanopensource.iteye.com/blog/1278812### 连接写法:[IP地址:端口号] mongo 192.168.1.161:27017; show db ...
- 盘古分词demo,盘古分词怎么用
1.下载PanGu.dll dll地址:http://download.csdn.net/detail/dhfekl/7493687 2.将PanGu.dll和词库引入到项目 最新词库地址:http: ...
- Hadoop相关资料
http://blog.csdn.net/skywalker_only/article/details/40650427
- nodejs eclipse
nodejs下载地址 http://nodejs.org/1.下载并安装完nodejs后,打开cmd命令窗口,输入node -v,如果正确输出版本号,就是安装成功了,如果说node不是windows的 ...