sunxi学习:[0]全志SoC启动过程分析

参考:linux-sunxi.org


启动流程:Boot ROM→SPL→U-boot(→Kernel→RootFileSystem)

一、BROM阶段

全志SoC有一个非常具体的启动过程。首先,它执行一个微小的片上 Boot ROM(BROM),然后检查按钮的FEL模式,然后开始检查各种存储选项的有效的引导签名在正确的位置。

上电后,SoC开始从BROM所在的地址0xffff0000获取指令。BROM分为两部分:第一部分(0xffff0000)是FEL模式,第二部分是eGON.BRM(位于0xffff4000)。

FEL:FEL是包含在Allwinner设备上的BootROM中的低级子例程。它用于使用USB的设备的初始编程和恢复。所以,全志平台一般不会砖,就是有这个FEL。

一般来说,BROM首先检查SD卡(SD/MMC)启动可用性,其次再检查Nand Flash是否可以启动,然后再检查SPI Nor Flash的启动可用性,如果都无法启动则进入 FEL 模式。当程序初始化启动介质成功后,就从固定位置读入bootloader的Boot0到SRAM,然后跳到SRAM执行。

将u-boot烧录进SD卡

SD Card Layout:

start size usage
0 8KB Unused, available for partition table etc.
8 24KB Initial SPL loader
32 512KB U-Boot
544 128KB environment
672 352KB reserved
1024 - Free for partitions

根据SD Card Layout表,使用dd将u-boot烧录进SD卡:

sudo dd if=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8

二、U-boot SPL阶段

SPL(Secondary Program Loader)程序流程如下:

  • 初始化ARM处理器
  • 初始化串口控制台
  • 配置时钟和最基础的分频
  • 初始化SDRAM
  • 配置引脚多路复用功能
  • 启动设备初始化(即上面选择的启动设备)
  • 加载完整的u-boot/kernel程序并转交控制权

使用FEL/USBBoot启动spl

sudo ./sunxi-fel uboot u-boot-sunxi-with-spl.bin
U-Boot SPL 2017.03-rc2-gc7a25b3-dirty (Mar 11 2017 - 17:09:43)
DRAM: 256 MiB
Trying to boot from FEL

三、U-boot

由SPL引导进入的U-boot:

U-Boot 2017.03-rc2-gc7a25b3-dirty (Mar 11 2017 - 17:09:43 +0800) Allwinner TechnologyCPU:   Allwinner H3 (SUN8I 1680)
Model: Xunlong Orange Pi Zero
DRAM:  256 MiB
MMC:   SUNXI SD/MMC: 0
MMC: no card present
mmc_init: -123, time 1
*** Warning - MMC init failed, using default environmentIn:    serial
Out:   serial
Err:   serial
Net:   phy interface0
eth0: ethernet@1c30000
starting USB...
USB0:   USB EHCI 1.00
USB1:   USB OHCI 1.0
scanning bus 0 for devices... 1 USB Device(s) foundscanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0
u-boot@sun8i $ ?
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootefi - Boots an EFI payload from memory
bootelf - Boot from an ELF image in memory
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
bootvx  - Boot vxWorks from an ELF image
bootz   - boot Linux zImage image from memory
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
dhcp    - boot image via network using DHCP/TFTP protocol
dm      - Driver model low level access
echo    - echo args to console
editenv - edit environment variable
env     - environment handling commands
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
ext4load- load binary file from a Ext4 filesystem
ext4ls  - list files in a directory (default /)
ext4size- determine a file's size
false   - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fatsize - determine a file's size
fatwrite- write file into a dos filesystem
fdt     - flattened device tree utility commands
fstype  - Look up a filesystem type
go      - start application at address 'addr'
gpio    - query and control gpio pins
help    - print command description/usage
iminfo  - print header information for application image
imxtract- extract a part of a multi-image
itest   - return true/false on integer compare
load    - load binary file from a filesystem
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loadx   - load binary file over serial line (xmodem mode)
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
ls      - list files in a directory (default /)
md      - memory display
mdio    - MDIO utility commands
mii     - MII utility commands
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - display MMC info
mw      - memory write (fill)
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
part    - disk partition related commands
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
pxe     - commands to get and boot from pxe files
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
save    - save file to a filesystem
saveenv - save environment variables to persistent storage
setenv  - set environment variables
setexpr - set environment variable as the result of eval expression
showvar - print local hushshell variables
size    - determine a file's size
sleep   - delay execution for some time
source  - run script from memory
sysboot - command to get and boot from syslinux files
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true    - do nothing, successfully
usb     - USB sub-system
usbboot - boot from USB device
version - print monitor, compiler and linker version
u-boot@sun8i $ 

  • 我的个人主页:http://www.techping.cn/
  • 我的个人站点博客:http://www.techping.cn/blog/wordpress/
  • 我的CSDN博客:http://blog.csdn.net/techping
  • 我的简书:http://www.jianshu.com/users/b2a36e431d5e/timeline
  • 我的GitHub:https://github.com/techping
    欢迎相互follow~

sunxi:[0]全志SoC启动过程相关推荐

  1. WINCE6.0 + S3C2443的启动过程---nboot篇

    WINCE6.0 + S3C2443的启动过程---nboot篇 我们启动WINCE6.0的方式是:nboot+eboot+NK.那么是如何启动WINCE6.0系统映像的呢?首先是nboot把eboo ...

  2. WINCE6.0+S3C2443的启动过程---eboot1

    WINCE6.0+S3C2443的启动过程---eboot 我们知道从nboot把eboot从nandflash中拷贝到内存指定的地址后,就接着在这个地址处开始运行eboot了,之后,nboot的工作 ...

  3. Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  4. Android深入四大组件(六)Android8.0 根Activity启动过程(前篇)

    相关文章 Android深入四大组件系列 Android系统启动系列 Android应用程序进程系列 Android深入解析AMS系列 前言 在几个月前我写了Android深入四大组件(一)应用程序启 ...

  5. Android深入四大组件(七)Android8.0 根Activity启动过程(后篇)

    相关文章 Android深入四大组件系列 Android系统启动系列 Android应用程序进程系列 Android深入解析AMS系列 前言 在几个月前我写了Android深入四大组件(一)应用程序启 ...

  6. WINCE6.0+S3C2443的启动过程---内核启动

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  7. Android7.0 PowerManagerService(1) 启动过程

    PowerManagerService负责Android系统中电源管理方面的工作,为了简便我们在下文中将其简称为PMS. 我们先大致了解一下PMS在Android中的整体结构:    如上图所示,可以 ...

  8. WINCE6.0+S3C2443的启动过程---eboot6

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  9. WINCE6.0+S3C2443的启动过程---eboot5

    2.3.5 SD卡控制器的相关初始化 一个相关的帖子http://topic.csdn.net/u/20100812/16/d0d5108b-dce1-4535-9e15-6f87bad57e43.h ...

最新文章

  1. vue绑定数据之前 会看到源代码
  2. Django ORM 级联删除
  3. python分组求和_Python学习笔记之pandas索引列、过滤、分组、求和功能示例
  4. 电子工程就业前景真的不如计算机吗?
  5. 如何用计算机算矩阵,【活用工具】教你如何用卡西欧fx82es计算机计算复数 矩阵...
  6. 32f407tim4时钟源频率_慎重选择时钟发生器,别让这俩指标影响你的ADC 「图片」...
  7. 数学与算法《文档相似性 - 余弦定理》
  8. oracle liunx 6.5安装目录,linux redhat 6.5 多路径配置
  9. php 和bootstrap,bootstrap4和bootstrap3的区别是什么
  10. 2018在职计算机科学硕士申请,2018年计算机专业硕士在职研究生备考指导
  11. LeetCode(455)——分发饼干(JavaScript)
  12. maven安装与配置等相关知识
  13. iPlayer惨遭破解诅咒AKAIO作者扬言要让它支持商业游戏
  14. R语言使用igraph包绘制网络图
  15. 配置服务器获取信息失败,获取配置服务器失败
  16. Java 标准 IO 流编程一览笔录( 下 )
  17. Jeff Atwood倾情推荐——程序员必读之书 (zz)
  18. FTP:vsftpd中的local_umask和anon_umask
  19. mysql级联是什么意思_MySql级联操作
  20. 【软件测试】—— 水杯测试用例

热门文章

  1. ios html5 audio mp3,H5 audio 微信端 在IOS上不能播放音乐
  2. fun和fun()的区别,函数也是对象
  3. 赛尔号找不到服务器ip,赛尔号互通版
  4. 关于Halcon的离心机试管槽定位
  5. MyEclipse老是弹出problem occurred窗口
  6. 书论95 蒋骥《续书法论》
  7. 使用NAT打造FTP服务新法
  8. 学思录(一):带着信息的角度去学习
  9. 【YOLOv5 数据集划分】训练和验证、训练验证和测试(train、val)(train、val、test)
  10. RecyclerView的全能适配器,带有header和bottom