笔记整理—uboot启动过程(6)env_init与init_sequence总结

2024-08-26 18:12

本文主要是介绍笔记整理—uboot启动过程(6)env_init与init_sequence总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        上一章说到uboot的BL2部分板级初始化,这一章将继续对uboot的环境变量初始化内容进行说明。

        env_init,顾名思义这是与环境变量相关的初始化。env_init有许多个,因为uboot支持不同的启动介质(不同的芯片或开发板)。其中inand_x210使用的是Env_movi(通过宏配置实现,x210_sd.h)。

        主要进行了内存中的uboot的环境变量做了基本的初始化与相关判断(有没有现成的环境变量可用)。由于环境变量还没有从sd卡到DDR的relocate,所以当前环境变量处于不可用的状态(在调用了env_relocate才进行了环境变量从sd到DDR的过程),重定位之前的环境变量只能不使用或者去sd卡中使用。

        init_baudrate初始化串口通信波特率。

        get_env_r读取环境变量的值。

        读出来的字符串,用simple_strtoul函数来转为数字,然后放到bd->bi->baudrate。对于x210而言,init_bandrate得不到正确的环境变量值会使用默认宏其值为115200,也就是设置串口波特率为115200(优先使用环境变量)。

        serial_init初始化串口通信(start.S中已在lowlevel_init初始化过了,所以对于x210而言是在进行一次for循环的空转)。

        console_init_f控制台_初始化_第一次;意为控制台的第一次初始化,下面的代码还会出现console_init_r也就是控制台的第二次初始化。由于代码有一定的复杂性,所以不得不选择多次初始化。当第一次初始化完成后会将gd->have->console赋值为1。

        dis_play_banner串口输出uboot标志(banner)。将会打印一些version_string,通过printf打印的,本质上还是使用的puts()完成的打印。用串口发送的与控制台无关。

        虽然二者都用到了串口输出,但是控制台用的是stdio的puts()发送,最后用serial_putc。但是控制台是一个软件虚拟出来的设备这个设备有一个专用的通信函数,最终映射到硬件(串口)上。

        软件是做了优化和缓冲的,有缓冲机制的加入就会减小cpu的占用。缓冲机制最大的用户就是LCD屏幕。

        对了U_BOOT_VERSION是在Makefile中定义的。

        print_cpuinfo将会打印设备是时钟什么的,相关数据是通过计算得出的而不是设定死的。

        cheak_board检测当前开发板是什么板子,并打印信息。

        init_func_i2c初始化i2c总线,但对于x210而言uboot部分是用不上i2c的所以是for循环空转(软/硬)都不使用。

        dram_init:DDR初始化。初始化gd相关的DDR部分,因为之前已经在lowlevel_init中成功了。

bi_dram[n].start=第n片内存起始
bi_dram[n].size=第n片内存的大小bi_dram[]是一个结构体数组

        display_dram_config打印dram配置信息。

        指令bdinfo可打印硬件相关信息。

        总结一下init_sequence干了什么,基本上都是gd->bd中的初始化。

cpu_init    空转
board_init    网卡初配置与机器码、内核传参、ddr传址
initerrupt_init    定时器timer4(10ms一次)
env_init    没什么东西
init_baudrate    波特率设置gd->bd->bi->baudrate
serial_init    串口初始化(空转)
console_init_f    控制台一阶段初始化
display_banner    打印启动信息
print_cpuinfo    cpu相关信息
cheak_board    打印开发板名称
init_func_i2c    i2c初始化(空转)
dram_init    DDR信息初始化
display_dram_config    打印dram配置信息

        插入一些flash相关信息:CFG_NO_FLASH。Nandflash简称为Nand,Norflash简称flash。所以flash_init执行的是Norflash的初始化。display_flash_config打印相关信息。但对于X210开发板而言是没有Norflash的,其虽然显示8M,但实际上没干活,为什么没有这个东西还要进行保留,是为了代码结构的稳定性。

        CONFIG_VFD虚拟显示(LCD相关)但没有进行这个宏的配置,这是uboot的自带软件框架,我们先不使用它。CONFIG_LCD原因同上暂时不用。

        本章我们说明了uboot的env_init干了什么,并对包括前文在内的init_sequence进行了总结性的说明,下一章将对malloc部分进行初始化的讲解。

这篇关于笔记整理—uboot启动过程(6)env_init与init_sequence总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109304

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta