机器从上电后先运行BROM中一段固定的代码,BROM会读取外部引脚来决定从何种介质来启动系统,BROM的作用是初始化储存启动系统的介质,如flash,emmc等。然后从启动介质中读取boot0代码到芯片内部的SRAM中,然后跳到boot0的boot0_entry.S(sunxi_spl/boot0/main/)

代码流程:

1. boot0阶段调用的函数(注册函数,编译在代码中)SPL_LOAD_IMAGE_METHOD("MMC1", 0, BOOT_DEVICE_MMC1, spl_mmc_load_image);SPL_LOAD_IMAGE_METHOD("MMC2", 0, BOOT_DEVICE_MMC2, spl_mmc_load_image);SPL_LOAD_IMAGE_METHOD("MMC2_2", 0, BOOT_DEVICE_MMC2_2, spl_mmc_load_image);2.boot0阶段启动
void main(void) //位置:spl-pub/nboot/main/boot0_main.c//SUNXI板子初始化,全志未提供源码sunxi_board_init_early()//初始化串口sunxi_serial_init(BT0_head.prvt_head.uart_port, (void *)BT0_head.prvt_head.uart_ctrl, 6);//打印boot0启动信息print_commit_log();printf("HELLO! BOOT0 is starting!\n");printf("BOOT0 commit : %s\n", BT0_head.hash);sunxi_set_printf_debug_mode(BT0_head.prvt_head.debug_mode, 0);//SUNXI板子初始化,全志未提供源码sunxi_board_init()//检测到串口输入为2,可以阻止当前运行char uart_input_value = get_uart_input(); /* Prevent DRAM jamming */if (uart_input_value == '2')printf("detected_f user input 2\n");dram_size = init_DRAM(0, (void *)BT0_head.prvt_head.dram_para)pr_emerg("dram size =%d\n", dram_size);uart_input_value = get_uart_input();if (uart_input_value == '2') {sunxi_set_printf_debug_mode(3, 0);printf("detected_r user input 2\n");goto _BOOT_ERROR;} else if (uart_input_value == 'd') {sunxi_set_printf_debug_mode(8, 1);printf("detected user input d\n");} else if (uart_input_value == 'q') {printf("detected user input q\n");sunxi_set_printf_debug_mode(0, 1);}      malloc_init(CONFIG_HEAP_BASE, CONFIG_HEAP_SIZE);status = sunxi_board_late_init();status = load_package();if (status == 0)load_image(&uboot_base, &optee_base, &monitor_base, &rtos_base, &opensbi_base, &cpus_rtos_base);//输出跳转信息       printf("Jump to second Boot.\n");

allwinner uboot boot0相关推荐

  1. 全志A33-BootLoader的两个阶段:boot0和second boot

    开发板:A33,运行linux-3.4.39 主机:Ubuntu 14.04 ---------------------------------------------- BootLoader阶段输出 ...

  2. 全志 android 编译,全志A20启动代码流程分析 ——Android

    现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...

  3. 全志android 编译,全志A20启动代码流程分析 ——Android

    现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...

  4. 全志Tina Linux 系统裁剪 boot0裁剪 uboot裁剪 内核裁剪 文件系统裁剪 C库裁剪 文件系统压缩

    文章目录 1 概述 2 Tina系统裁剪简介 2.1 boot0裁剪 2.2 uboot裁剪 2.3 内核裁剪 2.3.1 删除不使用的功能 2.3.2 删除不使用的驱动 2.3.3 修改内核源代码 ...

  5. 全志A33-ARM linux开机进入uboot命令行

    开发板:A33,运行linux-3.4.39 主机:Ubuntu 14.04 ---------------------------------------------- 复位或启动开发板后,等串口输 ...

  6. MangoPi Nezha-MQ--Buildroot编译kernel,uboot,最小文件系统

    文章目录 介绍 A库使用介绍 单独编译各个部分 从这条路走下去是没有问题的:环境 获取Buildroot源代码 烧写并启动系统 连接串口 上电成功 tina系统+五寸RGB电容屏 介绍 使用了两个gi ...

  7. 安卓盒子运行 linux,全志 Allwinner A20 机顶盒刷入原生 Debian

    花费 60 大洋购买了一台天敏电视精灵 3 安卓机顶盒.买来的目的就是为了刷入原生的 Debian 或其他发行版本. 查看了一下具体的硬件:全志 Allwinner A20 双核 CPU,Cortex ...

  8. 制作 小 linux 教程,【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程...

    二.Linux命令基础 1.查找文件 查找a.c的文件 find -name "a.c" 在当前目录搜索a字样的文件 grep "a" *-nR2.解压 解压t ...

  9. 移植u-boot v2018

    本篇文章阐述移植 u-boot v2018.01 至 S5PV210 开发板上的主要流程和细节.市场上的S5PV210开发板,均是基于三星smdkv210公版平台山寨出来的.我使用的GEC210开发板 ...

最新文章

  1. szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]
  2. 使用JDK自带jvisualvm监控tomcat
  3. 用python画画如何保存_python画图后怎么保存
  4. maven book
  5. django+celery+rabitmq
  6. cgi+bin+php,crontab+php-cgi/php 定时执行PHP脚本
  7. <学习日记>计算机网络第一章预习记录
  8. 蜕变!网易轻舟微服务这波操作,始于异构融合、源于中台!
  9. 让AI学习AI:自动化机器学习的概述、发展和研究意义
  10. 面向生产环境!深度学习模型部署资源全辑
  11. 现代图论笔记(二)树与二分图
  12. 计算机会计和传统手工会计的区别,手工会计与计算机会计之间的区别.doc
  13. mysql foundrows 并发_MySQL 中的 FOUND_ROWS() 函数
  14. 受限玻尔兹曼机(RBM)学习笔记
  15. sci论文 计算机,计算机类SCI论文
  16. MySQL数据库创建表格,及增删改查的综合使用
  17. 让国内顶尖程序员社区“牛客网”低头的这份Java面试手册真的强
  18. 项目管理中如何如何进行风险控制
  19. 最伟大的IT人物10强(转)
  20. 关于铭锐办公系统运行节资统计

热门文章

  1. 【uniapp】H5微信扫码支付
  2. 鸿蒙系统和魅族系统哪个好,魅族正式宣布接入鸿蒙系统
  3. SPFA算法求最短路
  4. 动态规划经典题目——0-1背包
  5. 原型工具摹客-轮播图制作
  6. 如何使用maven工具引入人大金仓驱动?
  7. 20220222,一个让程序员无比羡慕得日子~
  8. 2020年个人总结和分享(华为云-云享专家、CSDN博客专家 成长记录)
  9. ArcGIS Pro 体验/试用账号申请
  10. 熊猫的python小课怎么样_如何评价熊猫小课?