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

相关文章

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与