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

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud