全志A10 Bootload加载过程分析

A10的启动过程大概可分为5步:BootRom,SPL,Uboot,Kernel,RootFileSystem。本文只关注镜像的加载过程,分析RootRom->SPL->Uboot的启动流程。系统上电后,ARM处理器在复位时从地址0x000000开始执行指令,把板上ROM或Flash映射到这一地址。A10将启动设备选择程序固化在CPU内部的一个32KB ROM中,默认的启动时序为SD
摘要由CSDN通过智能技术生成
A10的启动过程大概可分为5步:BootRom,SPL,Uboot,Kernel,RootFileSystem。本文只关注镜像的加载过程,分析RootRom->SPL->Uboot的启动流程。
系统上电后,ARM处理器在复位时从地址0x000000开始执行指令,把板上ROM或Flash映射到这一地址。A10将启动设备选择程序固化在CPU内部的一个32KB ROM中,默认的启动时序为SD Card0,NAND FLASH,SD Card2,SPI NOR FLASH。另外通过外部的一个启动选择引脚可以使其跳转到USB启动模式。通常情况下,启动选择引脚状态连接50K内部上拉电阻。在上电后,执行存储在ROM中的启动代码,将自动检测启动选择引脚状态。只有当该引脚状态为低电平时选择USB启动模式。
启动设备选择程序的流程图:
 
在选择启动设备后将加载并执行bootload程序,CPU通过拷贝或映射bootload程序到内存,然后执行bootload的第一条指令。通过阅读官方的uboot烧写方法,发现A10通过uboot引导系统,但却没有加载整个uboot,而是在此之前先载入了uboot SPL。什么是SPL?通过查阅uboot的官网资料得知,SPL是一个迷你版的uboot,全拼为Second Program Loader。适用于SOC的内部SROM<64K的情况,用它来加载完整的uboot程序到SDROM,并通过完整uboot加载内核来启动系统。
 
SPL程序流程如下:
1.初始化ARM处理器
2.初始化串口控制台
3.配置时钟和最基础的分频
4.初始化SDRAM
5.配置引脚多路复用功能
6.启动设备初始化(即上面选择的启动设备)
7.加载完整的uboot程序并转交控制权
 
 
搞清楚了上面的概念,可以知道Cubieboard出厂已经烧写了NandFlash中的程序,即在启动选择时使用的是NandFlash。现在根据全志A10上的步骤,我们尝试用SDC1(即Cubieboard上卡槽中的TF卡)来启动系统。
 
下载并编译uboot
#git clone https://github.com/linux-sunxi/u-boot-sunxi.git
#cd u-boot-sunxi
#export CROSS_COMPILE=arm-linux-gnueabihf-
#make cubieboard
 
为TF卡烧写引导程序
#dd if=/dev/zero of=/dev/sdb bs=1M count=1 # 清空SD卡(包括分区表)
尝试不建立分区表,直接烧写引导程序,无法启动系统。
因此按需求给TF卡分区,我只创建了唯一一个200M主分区,此处不详述分区过程,下面是我使用的TF卡的分区表信息。
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1977 MB, 1977614336 bytes
52 heads, 30 sectors/track, 2475 cylinders, total 3862528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 2048 411647 204800 83 Linux
通过A10相关资料,通过以下2条命令烧写spl和uboot到指定位置,暂时不清楚如何确定这2个读取位置。
#dd if=spl/sunxi-spl.bin of=/dev/sdb bs=1024 seek=8
#dd if=u-boot.bin of=/dev/sdb bs=1024 seek=32
 
 
烧写完成后插入TF卡到CB的卡槽中,连接USB转TTL串口线,打开串口终端,上电。
串口打印信息如下:
U -Boot SPL 2012. 10 - 04277 -g7aa9f04 (Mar 10 2013 - 00 : 36 : 40)
DRAM : 1024MB
SUNXI SD /MMC : 0


U -Boot 2012. 10 - 04277 -g7aa9f04 (Mar 10 2013 - 00 : 36 : 40) Allwinner Technology

CPU : SUNXI Family
Board : Cubieboard
I2C : ready
DRAM : 1 GiB
MMC : SUNXI SD /MMC : 0
* * * Warning - bad CRC, using default environment

In : serial
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值