reg_addr 0x01f00100 =0x00000000
reg_addr 0x01f00104 =0x00000000
reg_addr 0x01f00108 =0x00000000
reg_addr 0x01f0010c =0x00000000
reg_addr 0x01f00110 =0x00000000
reg_addr 0x01f00114 =0x00000000
DRAM DRIVE INFO: V1.5
DRAM CLK =552 MHZ
DRAM simple test OK.
dram size =512
card boot number = 2
card no is 2
sdcard 2 line count 0
[mmc]: mmc driver ver 2014-07-07 16:54
[mmc]: ***Try SD card 2***
[mmc]: mmc 2 cmd 8 timeout, err 0x00000100
[mmc]: mmc 2 cmd 8 err 0x00000100
[mmc]: mmc 2 send if cond failed
[mmc]: mmc 2 cmd 55 timeout, err 0x00000100
[mmc]: mmc 2 cmd 55 err 0x00000100
[mmc]: mmc 2 send app cmd failed
[mmc]: ***Try MMC card 2***
[mmc]: MMC ver 4.5
[mmc]: SD/MMC Card: 4bit, capacity: 3776MB
[mmc]: vendor: Man 0x00450100 Snr 0x3a004a97
[mmc]: product: SEM04
[mmc]: revision: 4.7
[mmc]: ***SD/MMC 2 init OK!!!***
sdcard 2 init ok
The size of uboot is 0x000bc000.
sum=0x77d84f79
src_sum=0x77d84f79
set_mmc_para,sdly 50M 0
set_mmc_para,sdly 25M 0
Succeed in loading uboot from sdmmc flash.
Ready to disable icache.
Jump to secend Boot.
[ 0.337]
U-Boot 2011.09-rc1-00004-ga1ab41d (Jul 28 2014 - 16:21:09) Allwinner Technology
[ 0.346]version: 1.1.0
[ 0.431]pmbus: ready
[ 0.433]PMU: AXP221
[ 0.435]PMU: AXP22x found
[ 0.439]PMU: dcdc3 1200
[ 0.442]PMU: pll1 1008 Mhz,PLL6=600 Mhz
AXI=336 Mhz,AHB=200 Mhz, APB1=100 Mhz
set power on vol to default
dcdc1_vol = 3000
dcdc2_vol = 1100
dcdc3_vol = 1200
dcdc4_vol = 0
dcdc5_vol = 1500
aldo2_vol = 2500
aldo3_vol = 3000
find power_sply to end
no battery, limit to dc
fel key old mode
run key detect
no key found
dram_para_set start
dram_para_set end
[ 0.489]DRAM: 512 MiB
relocation Offset is: 15b11000
smcl's set manager is NULL
workmode = 0
MMC: 2
[ 0.687][mmc]: mmc driver ver 2014-07-15 17:16:00
[ 0.692][mmc]: get sdc_2xmode ok, val = 1
[ 0.696][mmc]: get sdc_f_max fail,use default sdc_f_max 50000000
[ 0.702][mmc]: get card_line ok, card_line = 4
[ 0.707][mmc]: get sdc_ex_dly_used fail,use default dly
[ 0.71]: SUNXI SD/MMC: 2
[ 0.717][mmc]: mmc 2 2xmode config clk
[ 0.729][mmc]: ************Try SD card 2************
[ 0.734][mmc]: mmc 2 cmd 8 timeout, err 100
[ 0.739][mmc]: smc 2 err, cmd 8, RTO
[ 0.744][mmc]: mmc 2 mmc cmd 8 err 0x00000100
[ 0.748][mmc]: mmc send if cond failed
[ 0.752][mmc]: mmc 2 cmd 55 timeout, err 100
[ 0.756][mmc]: smc 2 err, cmd 55, RTO
[ 0.762][mmc]: mmc 2 mmc cmd 55 err 0x00000100
[ 0.766][mmc]: send app cmd failed
[ 0.769][mmc]: ************Try MMC card 2************
[ 0.795][mmc]: mmc 2 2xmode config clk
[ 0.805][mmc]: mmc 2 2xmode config clk
[ 0.815][mmc]: mmc 2 2xmode config clk
[ 0.824][mmc]: MID 000045 PSN 004a979d
[ 0.827][mmc]: PNM SEM04G -- 0x53-45-4d-30-34-47
[ 0.832][mmc]: PRV 3.10
[ 0.835][mmc]: MDT m-10 y-2015
[ 0.838][mmc]: MMC ver 4.5
[ 0.841][mmc]: ---------------mmc->clock 50000000-----------
[ 0.846][mmc]: ---------------mmc->bus_width 4--------------
[ 0.852][mmc]: SD/MMC Card: 4bit, capacity: 3776MB
[ 0.857][mmc]: boot0 capacity: 2000KB,boot1 capacity: 2000KB
[ 0.863][mmc]: ************SD/MMC 2 init OK!!!************
[ 0.869]sunxi flash init ok
In: serial
Out: serial
Err: serial
--------fastboot partitions--------
-total partitions:6-
-name- -start- -size-
boot-res : 1000000 1000000
env : 2000000 1000000
boot : 3000000 1000000
rootfs : 4000000 40000000
data : 44000000 40000000
UDISK : 84000000 0
-----------------------------------
base bootcmd=run setargs_nand boot_normal
bootcmd set setargs_mmc
key 0
recovery key high 5, low 3
cant find fstbt value
no misc partition is found
misc_message->command = 0
to be run cmd=run setargs_mmc boot_normal
mount part name boot-res
cant open script.bin, maybe it is not exist
WORK_MODE_BOOT
board_status_probe
[ 0.952]pre sys mode
sunxi_bmp_logo_display
[ 0.977][mmc]: blkcnt should not be 0
screen_id =0, screen_width =800, screen_height =480
[ 0.987]Hit any key to stop autoboot: 4
read boot or recovery all
[ 1.604]sunxi flash read :offset 3000000, 13955823 bytes OK
no signature
[ 1.615]ready to boot
para err in disp_ioctl, cmd = 0xa,screen id = 1
[ 1.621][mmc]: mmc exit start
[ 1.625][mmc]: mmc 2 2xmode config clk
[ 1.633][mmc]: mmc 2 2xmode config clk
[ 1.645][mmc]: mmc 2 cmd 8 timeout, err 100
[ 1.650][mmc]: smc 2 err, cmd 8, RTO
[ 1.655][mmc]: mmc 2 mmc cmd 8 err 0x00000100
[ 1.659][mmc]: mmc send if cond failed
[ 1.663][mmc]: mmc 2 cmd 55 timeout, err 100
[ 1.667][mmc]: smc 2 err, cmd 55, RTO
[ 1.673][mmc]: mmc 2 mmc cmd 55 err 0x00000100
[ 1.677][mmc]: send app cmd failed
[ 1.688][mmc]: mmc 2 exit ok
[ 1.691]
Starting kernel ...
分析:根据开机打印的信息,A33在内核引导阶段实际上经历了三个过程:
1. boot0阶段,上电或复位后最先执行
(1)boot0代码存放位置:~/A33-Vstar/dragonboard/brandy/basic_loader/
主要涉及Boot0_C_part.c、Boot0.s两个文件。
(2)作用:主要是CPU相关的硬件初始化,初始化并自检RAM和FLASH,并从FLASH中加载uboot
boot0源码下bsp涉及的外设只有gpio、uart、nand、ram,不涉及别的外设。
bsp代码:basic_loader/bsp/bsp_for_a67/
(3)编译:在windows平台下使用armcc结合cygwin来编译,未测试。无法在linux下进行编译。
(4)串口:boot0阶段使用uart0输出信息。
2. second boot阶段,即u-boot阶段
(1)u-boot代码存放位置:~/A33-Vstar/dragonboard/brandy/u-boot-2011.09
3. starting kernel阶段
也就表明,A33 BootLoader阶段包含了boot0和uboot两个过程。
一、U
-
boot
第二
阶段
概述
上面有两篇文关于u
-
boot
第一
阶段
的介绍,这两篇文章是从网上找到的,由于分析的很详细,看完这后觉得对这两篇文章u
-
boot
第一
阶段
的介绍已经比较完美了,所以分享出来。从这篇文章开始分析u
-
boot
的第二
阶段
。
如果你只把u
-
boot
理解成引导kernel的一段代码的话,u
-
boot
完全没有必要设计成现在这样的一种软件框架,直接写几个文件就能完成kernel...
1
BOOT
0
阶段
机器从上电后先运行BROM中一段固定的代码,BROM会读取外部引脚来决定从何种介质来启动系统,BROM的作用是初始化储存启动系统的介质,如flash,emmc等。然后从启动介质中读取
boot
0
代码到芯片内部的SRAM中,然后跳到
boot
0
的
boot
0
_entry.S(sunxi_spl/
boot
0
/main/)。具体代码如下:
#include <config.h>
#include "asm/mode.h"
.globl _start
_start
:
b r
原文 : http
:
//blog.csdn.net/allen6268198/article/details/129
0
5425
从这里开始:http
:
//
linux
-
sunxi.org/
Boot
able_SD_card
代码仓库:https
:
//github.com/
linux
-
sunxi
A1
0
/A2
0
Bootloader
加载过程分析
注:由于
全志
A1
0
和
A2
0
在加载
头部是一个大小
0
x2F8的结构体,然后是64字节的一个数组,后面才是真正的代码段
刚开始编译的时候,发现始终无法在编译好的镜像头部找到 BT_head
和
boot
0
_hash_value ,后来发现是由于精简了代码,在代码中没有调用 BT
0
_head
和
boot
0
_hash_value 所以这
两个
块没有被链接进去,虽然在链接脚本中已经指定了这
两个
变量的位置,竟然也没有被编译进去,不知道修改编译器关于优化相关的参数会不会强制把他们
两个
链接进去。
然后在代码中调用一下这
两个
变
全志
A
33
bootloader
启动程序,总共分为两段,
boot
0
和
boot
1段,在实际使用过程中,不会涉及到
boot
0
段的设计,在开发
boot
1段前,了解相关的接口,对开发
uboot
(
boot
1)是有益的
一、反向查找
boot
0
段位置思路
在
uboot
启动时,会在调试串口//终端,输出一条信息,因此可以根据输出信息,查找源码C文件位置,首先根据输出信息,查找文件位置
1、查找文件位置
dragonboard$
grep '
BOOT
0
is starting' *
-
r
查找
BOOT
0
is start
boot
0
启动 u
-
boot
通过PhoenixSuit烧录的镜像,将
boot
0
烧录到了flash中偏移地址为8K的地方,而u
-
boot
则被加了一个“头”:
然后1K对齐,重新打包生成的u
-
boot
文件叫做
boot
_package.fex,被烧录到了 164
0
0
K 偏移位置处,而且作为备份还烧录了
两个
位置,另一个在 12288K 偏移处
boot
0
跳转到u
-
boot
之前会对
boot
_package.fex前面的1K大小的结构头进行简单的校验
关于
boot
_package.fex文件的生成
那就再猜测一下吧,所谓的自动填充,可能就是自动调用memset来填充的
然后我改了一下代码:
char buf[1
0
] = {
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
手动填充后,编译成功