笔记整理—uboot启动过程(7)malloc初始化与内存环境变量

本文主要是介绍笔记整理—uboot启动过程(7)malloc初始化与内存环境变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        上一章说到了env环境变量并对前两章有关init_sequence部分做了总结,这一章将要对uboot部分的malloc初始化以及内存环境变量进行相关的说明。

        mem_malloc_init是用于初始化uboot堆管理器的。自己维护了一段内存,就可用进行malloc和free的操作了。那么这个维护的堆大小是多少呢?

CFG_UBOOT_BASE+CFG_UBOOT_SIZE-CFG_MALLOC_LEN-CFG_STACK_SIZE

        给堆留了896Kb的大小,并在其中将这段内存进行清理。

memset((void*)mem_malloc_start,0,mem_malloc_end-mem_malloc_start);

        Board specific开发板特别初始化。以#if配合CONFIG_xxx进行条件编译。

#if define(CONFIG_X210)
#if define(CONFIG_GENERIC_MMC)//用MMC/sd卡启动

        mmc_initialize(gd->bd):MMC相关基础初始化(SD/MMC控制器)源与内核。

        INIT_LIST_HEAD:用链表进行管理(&mmc_devices)。        

        set_hsmmc_clock()给sd卡控制器时钟。

        set_hsmmc_cfg_gpio() mmc的gpio初始化。

        smdk_s3c_hsmmc_init() 驱动控制器。

        IROM中进行的简单初始化,这个初始化是不完整的所以要在这个进行全面的初始化控制器。

         

         

        1个扇区512字节,最后得出nMB。

        DATAFLASH:SPI/I2C的FLASH如E2PROM,在X210开发板上是没有的。

        env_relocate()完成从SD卡到DDR中的读取环境变量。

        ENV_IS_EMBEDDED内嵌环境变量,在代码段中(本版本放在SD卡中)。

        env_ptr=(env_t*)malloc(CFG_ENV_SIZE)给环境变量开辟内存。

        做env CRC校验失败,于是使用uboot的默认env,被写入DDR中,并写入一份到sd卡的env扇区,下次再次开机就能从env分区得到env变量使得CRC校验成功。

        set_default_env设置默认env,在其中做变量移动与CRC更新gd_env=1。

        env_relocate_spec环境变量重定位。其内部使用movi_read_env()实现。raw_area_control原始分区信息表,gd_env_addr=(ulong)&(env_ptr->data)使用该方法将环境变量赋值到全局环境变量。

        本章讲述了一些关于uboot的BL2部分的malloc初始化以及相关内存环境变量的重定位,下一章将会对uboot的其余剩余部分进行讲解(直到uboot的第二部分结束)。 

这篇关于笔记整理—uboot启动过程(7)malloc初始化与内存环境变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window