itop-4412启动流程小结 - 从iROM code运行到内核启动

2024-06-07 22:48

本文主要是介绍itop-4412启动流程小结 - 从iROM code运行到内核启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. iROM code(无源码) 
    1.1 关闭看门狗 
    1.2 关闭中断和MMU 
    1.3 关闭D-cache,打开I-cache 
    1.4 FLush TLB’s and Invalidate caches 
    1.5 初始化IRQ和SVC模式的栈 
    1.6 初始化ZI/RW 
    1.7 注册函数指针? 
    1.8 得到重启状态 
    1.9 设置时钟分频和锁相环 
    1.10 根据OM引脚状态选择引导设备 
    1.11 拷贝BL1到iRAM并判断是否拷贝成功 
    1.12 校验和 
    1.13 验证BL1完整性 
    1.14 解译BL1 
    1.15 跳转到BL1

  2. BL1(无源码) 
    2.1 初始化IRQ和SVC栈 
    2.2 判断引导设备 
    2.3 从拷贝BL2到iRAM 
    2.4 进行一些判断决定是否跳转到BL2 
    2.5 验证BL2完整性,验证正确就跳转到BL2

  3. BL2 
    3.1 初始化IRQ和SVC模式的栈(各个模式都有各自独立的栈) 
    3.2 设置时钟频率 
    3.3 初始化内存 
    3.4 将OS镜像拷贝到DRAM,验证完整性后跳转。

  4. uboot 
    start.S: 
    4.1 跳转到reset 
    4.2 将cpu设置为svc模式,并关闭IRQ和FIQ中断(为什么设置为svc模式,因为svc特权模式可以访问的硬件资源最多,其次uboot要跳转到kernel之前,CPU必须处于svc模式) 
    4.3 初始化TLB和I-cache 
    4.4 禁能MMU和caches 
    4.5 读取引导信息,判断引导设备 
    4.6 跳转到lowlevel_init(配置pll, mux, memory(因为要将uboot后续代码拷贝到DRAM,所以要先初始化)) 
    4.6.1 初始化DDR内存 
    bl mem_ctrl_asm_init_ddr3(这个函数在cpu_init.S中实现) 
    4.7 判断是够已经拷贝过uboot 
    4.8 根据引导设备执行不同的拷贝函数 
    4.9 拷贝完成后跳转到after_copy处 
    4.10 使能MMU,设置TTB 
    4.11 初始化栈,清除bss段(初始化C语言环境) 
    4.12 跳转到start_armboot函数,在/lib_arm/board.c中 
    4.13 完成一些初始化工作后,进入死循环 
    for(;;) 

    main_loop(); 

    4.14 main_loop: 
    4.14.1 s = getenv (“bootcmd”); 获取引导命令 
    4.14.2 如果延时大于等于零,并且没有在延时过程中接收到按键,则引导内核 
    if (bootdelay >= 0 && s && !abortboot (bootdelay)) 
    run_command(s, 0); 
    4.14.2.1 abortboot中会检查延时是否大于等于零并且是否有按键按下,如果延时大于零并且停止引导内核标记没有被赋值则进入延时循环,直到延时完成或者接收到按键。 
    1. 延时完成且无按键按下,进入内核,即运行 run_command(s, 0),也就是运行”bootcmd”命令行参数所定义的值 
    2. 延时期间按键按下,进入uboot命令行

如何去寻找bootcmd命令行参数所定义的值? 
1. getenv (“bootcmd”) 
2. env_get_addr(val) 
3. default_environment(数组) 
4. CONFIG_BOOTCOMMAND(对其进行查找引用) 
5. smdkc210.h(y:/include/configs) 
6. #define CONFIG_BOOTCOMMAND “nand read 40008000 80000 380000;bootm 40008000”

最后,分析这两个uboot命令: 
nand read 40008000 80000 380000 将flash 0x8000起始地址处,拷贝0x380000长度的数据(即内核镜像)到内存0x40008000起始处 
bootm 40008000 执行内存0x40008000地址处的代码,即启动到内核(见于笔记“内核驱动 - U-Boot命令”)

这篇关于itop-4412启动流程小结 - 从iROM code运行到内核启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1040519

相关文章

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签