allwinner uboot boot0
机器从上电后先运行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相关推荐
- 全志A33-BootLoader的两个阶段:boot0和second boot
开发板:A33,运行linux-3.4.39 主机:Ubuntu 14.04 ---------------------------------------------- BootLoader阶段输出 ...
- 全志 android 编译,全志A20启动代码流程分析 ——Android
现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...
- 全志android 编译,全志A20启动代码流程分析 ——Android
现在的CPU都固化了内部 ROM,内部 ROM中有一般都有一段程序,一般有如下几个功能: 1,初始化,部分外设,如USB,SDCARD 2,初始化DDR(内存)和NandFlash 3,加载boot( ...
- 全志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 修改内核源代码 ...
- 全志A33-ARM linux开机进入uboot命令行
开发板:A33,运行linux-3.4.39 主机:Ubuntu 14.04 ---------------------------------------------- 复位或启动开发板后,等串口输 ...
- MangoPi Nezha-MQ--Buildroot编译kernel,uboot,最小文件系统
文章目录 介绍 A库使用介绍 单独编译各个部分 从这条路走下去是没有问题的:环境 获取Buildroot源代码 烧写并启动系统 连接串口 上电成功 tina系统+五寸RGB电容屏 介绍 使用了两个gi ...
- 安卓盒子运行 linux,全志 Allwinner A20 机顶盒刷入原生 Debian
花费 60 大洋购买了一台天敏电视精灵 3 安卓机顶盒.买来的目的就是为了刷入原生的 Debian 或其他发行版本. 查看了一下具体的硬件:全志 Allwinner A20 双核 CPU,Cortex ...
- 制作 小 linux 教程,【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程...
二.Linux命令基础 1.查找文件 查找a.c的文件 find -name "a.c" 在当前目录搜索a字样的文件 grep "a" *-nR2.解压 解压t ...
- 移植u-boot v2018
本篇文章阐述移植 u-boot v2018.01 至 S5PV210 开发板上的主要流程和细节.市场上的S5PV210开发板,均是基于三星smdkv210公版平台山寨出来的.我使用的GEC210开发板 ...
最新文章
- szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]
- 使用JDK自带jvisualvm监控tomcat
- 用python画画如何保存_python画图后怎么保存
- maven book
- django+celery+rabitmq
- cgi+bin+php,crontab+php-cgi/php 定时执行PHP脚本
- <学习日记>计算机网络第一章预习记录
- 蜕变!网易轻舟微服务这波操作,始于异构融合、源于中台!
- 让AI学习AI:自动化机器学习的概述、发展和研究意义
- 面向生产环境!深度学习模型部署资源全辑
- 现代图论笔记(二)树与二分图
- 计算机会计和传统手工会计的区别,手工会计与计算机会计之间的区别.doc
- mysql foundrows 并发_MySQL 中的 FOUND_ROWS() 函数
- 受限玻尔兹曼机(RBM)学习笔记
- sci论文 计算机,计算机类SCI论文
- MySQL数据库创建表格,及增删改查的综合使用
- 让国内顶尖程序员社区“牛客网”低头的这份Java面试手册真的强
- 项目管理中如何如何进行风险控制
- 最伟大的IT人物10强(转)
- 关于铭锐办公系统运行节资统计