I.MX6 u-boot.imx中IVT、DCD等头部数据的生成
#define BOOT_ROM_COPY_DATA_LEN 0x1000 /×4 K bytes */
#define IVT_OFFSET 0x400
typedefstruct{uint8_t tag;uint16_t length;uint8_t version;
}ivt_header_t;
typedefstruct{ivt_header_t header;uint32_tentry;uint32_treserved1;uint32_tdcd_ptr;uint32_tboot_data_ptr;uint32_tself;uint32_tcsf;uint32_treserved2;
} ivt_t;
typedefstruct{uint32_tstart;uint32_tsize;uint32_tplugin;
}boot_data_t;uint32_t *ocram_load_ptr;
ivt_header_t*ivt_h;
ivt_t *ivt;
boot_data_t *boot_data_ptr;
ocram_load_ptr=malloc(OCRAM,BOOT_ROM_COPY_DATA_LEN);
copy_to_ocram(spi_flash_addr0,BOOT_ROM_COPY_DATA_LEN, ocram_load_ptr);
ivt_h =(ivt_header_t *)(ocram_load_ptr+ IVT_OFFSET);
ivt =(ivt_t*)(ocram_load_ptr+ IVT_OFFSET);
if(ivt_h->tag!=0xD1){trace"invalid ivt head tag";return-1;
}/*DCD有效性检查*/
......
/*调用DCD中的命令,对DDR、时钟等进行配置*/
......
/*DDR已可用*/boot_data_ptr =(boot_data_t *)(ocram_load_ptr +(ivt->dcd_ptr-ivt->self));
copy_to_ddr(boot_data_ptr->start,boot_data_ptr->size,spi_flash_addr0);
jump_to ivt->entry;
ivt_header: .word 0x402000D1 /* Tag=0xD1, Len=0x0020, Ver=0x40 */
app_code_jump_v: .word _start
reserv1: .word 0x0
dcd_ptr: .word dcd_hdr
boot_data_ptr: .word boot_data
self_ptr: .word ivt_header
#ifdef CONFIG_SECURE_BOOT
app_code_csf: .word __hab_data
#else
app_code_csf: .word 0x0
#endif
reserv2: .word 0x0boot_data: .word TEXT_BASE
#ifdef CONFIG_SECURE_BOOT
image_len: .word __hab_data_end - TEXT_BASE + CONFIG_FLASH_HEADER_OFFSET
#else
image_len: .word _end_of_copy - TEXT_BASE + CONFIG_FLASH_HEADER_OFFSET
#endif
plugin: .word 0x0dcd_hdr: .word 0x40E001D2 /* DDR cfg Tag=0xD2, Len=59*8 + 4 + 4, Ver=0x40 */write_dcd_cmd: .word 0x048402CC /* Tag=0xCC, Len=80*8 + 4, Param=0x04 */
/* DCD *//* DDR3 initialization based on the MX6Solo Auto Reference Design (ARD) */
/* DDR IO TYPE */
MXC_DCD_ITEM(1, IOMUXC_BASE_ADDR + 0x774, 0x000c0000)
MXC_DCD_ITEM(2, IOMUXC_BASE_ADDR + 0x754, 0x00000000)/* CLOCK */
MXC_DCD_ITEM(3, IOMUXC_BASE_ADDR + 0x4ac, 0x00000030)
MXC_DCD_ITEM(4, IOMUXC_BASE_ADDR + 0x4b0, 0x00000030)
......
/* image version */
IMAGE_VERSION 2/** Boot Device : one of* spi, sd (the board has no nand neither onenand)*/
BOOT_FROM spi#define __ASSEMBLY__
#include <config.h>
#include "asm/arch/mx6-ddr.h"
#include "asm/arch/iomux.h"
#include "asm/arch/crm_regs.h"#include "ddr-setup.cfg"
#include "1066mhz_4x128mx16.cfg"
#include "clocks.cfg"
DATA 4, MX6_IOM_DRAM_SDQS0, 0x00000030
DATA 4, MX6_IOM_DRAM_SDQS1, 0x00000030
DATA 4, MX6_IOM_DRAM_SDQS2, 0x00000030
DATA 4, MX6_IOM_DRAM_SDQS3, 0x00000030
IMAGE_VERSION 2
BOOT_FROM spi
DATA4,0x020e05a8,0x00000030
DATA4,0x020e05b0,0x00000030
DATA4,0x020e0524,0x00000030
DATA4,0x020e051c,0x00000030
statictable_entry_t imximage_boot_offset[]={{FLASH_OFFSET_ONENAND, "onenand", "OneNAND Flash",},{FLASH_OFFSET_NAND, "nand", "NAND Flash", },{FLASH_OFFSET_NOR, "nor", "NOR Flash", },{FLASH_OFFSET_SATA, "sata", "SATA Disk", },{FLASH_OFFSET_SD, "sd", "SD Card", },{FLASH_OFFSET_SPI, "spi", "SPI Flash", },{FLASH_OFFSET_QSPI, "qspi", "QSPI NOR Flash",},{-1, "", "Invalid", },
};staticvoidparse_cfg_cmd(structimx_header*imxhdr,int32_t cmd,char*token,char*name,intlineno,intfld,intdcd_len)
{intvalue;staticintcmd_ver_first=~0;switch(cmd){caseCMD_IMAGE_VERSION:imximage_version=get_cfg_value(token,name,lineno);......set_hdr_func();break;caseCMD_BOOT_FROM:imximage_ivt_offset=get_table_entry_id(imximage_boot_offset,......break;caseCMD_BOOT_OFFSET:imximage_ivt_offset=get_cfg_value(token,name,lineno);......break;......}
}
printf("\n--------------------------------------\n");printf("tag: 0x%04x\n", (uint8_t)fhdr_v2->header.tag);printf("length: 0x%04x\n", (uint16_t)fhdr_v2->header.length);printf("version: 0x%04x\n", (uint8_t)fhdr_v2->header.version);printf("\n");printf("entry: 0x%08x\n", (uint32_t)fhdr_v2->entry);printf("reserved1: 0x%08x\n", (uint32_t)fhdr_v2->reserved1);printf("dcd_ptr: 0x%08x\n", (uint32_t)fhdr_v2->dcd_ptr);printf("boot_data_ptr: 0x%08x\n", (uint32_t)fhdr_v2->boot_data_ptr);printf("self: 0x%08x\n", (uint32_t)fhdr_v2->self);printf("csf: 0x%08x\n", (uint32_t)fhdr_v2->csf);printf("reserved2: 0x%08x\n", (uint32_t)fhdr_v2->reserved2);printf("\n");printf("db start: 0x%08x\n", (uint32_t)db->start);printf("db size: 0x%08x\n", (uint32_t)db->size);printf("db plugin: 0x%08x\n", (uint32_t)db->plugin);printf("--------------------------------------\n\n");
tag: 0x00d1
length: 0x2000 the overall length of the IVT in bytes, including the header. (the length is fixed and must have a value of 32 bytes),8K????
version: 0x0040entry: 0x17800000
reserved1: 0x00000000
dcd_ptr: 0x177ff42c
boot_data_ptr: 0x177ff420
self: 0x177ff400
csf: 0x00000000
reserved2: 0x00000000db start: 0x177ff000
db size: 0x00075000
db plugin: 0x00000000
I.MX6 u-boot.imx中IVT、DCD等头部数据的生成相关推荐
- excel中如何et vb根据数据自动生成表格_如何实现excel与PPT互联互通(动态生成PPT)...
因为经常要做周报.月报PPT,每次重复的的操作效率很低,这里整理了一套可以自动生成PPT的办法. 首先,大概思路是这样的.周报.月报这类经营分析类PPT一般都是由表格.图表以及分析文字组成的,整体结构 ...
- Mysql 向表中插入50万条数据(生成随机字符串和 插入的时间间隔是60s)。
/*rand_string: 生成一个长度为n的随机字符. 注意这个n必须小于'abcdefghijklmnopqrstuvwxyz0123456789' 的长度*/ DROP FUNCTION IF ...
- ArcGIS中的TIN与DEM数据的生成
1.TIN与DEM 的生成 1.1由高程点等高线生成TIN 向软件添加四个图层 勾选3D Analyst 打开工具栏上的自定义-自定义模式,在命令搜索里面搜索从要素创建TIN,将其图标拖到工具栏上,再 ...
- ARM(IMX6U)裸机之I.MX6ULL启动头文件详解(内部BOOT ROM、IVT + Boot data + DCD + led.bin)
参考:Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写以及启动头文件的详解 作者:一只青木呀 发布时间: 2020-08-09 17:10:00 网址:https://blog.csdn ...
- Guava Cache本地缓存在 Spring Boot应用中的实践
概述 在如今高并发的互联网应用中,缓存的地位举足轻重,对提升程序性能帮助不小.而 3.x开始的 Spring也引入了对 Cache的支持,那对于如今发展得如火如荼的 Spring Boot来说自然也是 ...
- spring boot 项目源码_Spring Boot2 系列教程(三)理解 Spring Boot 项目中的 parent
前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent><groupId& ...
- Spring Boot 配置中的敏感信息如何保护?
在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...
- 在Spring Boot项目中使用Spock框架
转载:https://www.jianshu.com/p/f1e354d382cd Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring B ...
- scheduled每天下午1点执行一次_在Spring Boot项目中使用@Scheduled注解实现定时任务...
在java开发中定时任务的实现有多种方式,jdk有自己的定时任务实现方式,很多框架也有定时任务的实现方式.这里,我介绍一种很简单的实现方式,在Spring Boot项目中使用两个注解即可实现. 在sp ...
最新文章
- Android SQLite数据库之事务的学习
- Vcastr 2.2 flv 网络播放器 参数设置
- 装上后这 14 个插件后,PyCharm 真的是无敌的存在
- python 遍历字典
- 如何造出逼真图像?南洋理工Zheng博士论文《基于深度生成学习的逼真图像合成》197页pdf阐述视觉合成工作...
- TCP,IP,HTTP,SOCKET区别和联系
- Java实现找出数组中重复次数最多的元素以及个数
- fastText中常见问题汇总
- ElementUI中el-table设置指定列固定不动,不受滚动条影响
- 《Python Cookbook 3rd》笔记(2.18):字符串令牌解析
- Linux系统编程 / triggerhappy 源码分析(3.select 的应用)
- 第八章:软件包的安装与管理
- [NOI2014] 动物园
- [物理学与PDEs]第2章第4节 激波 4.2 熵条件
- 网易校招——魔法币问题
- 最新最全 快递公司编码 更新时间2020.07.31
- php怎么求最小公倍数,最小公倍数算法
- opencv中step[i],step1(i),elemsize,elemsize1
- 全面提高你的搜索技巧
- 【踩坑记录】priority_queue 第三个模板参数和sort 的第三个形参的区别;仿函数、自定义排序函数、lambda 函数分别传入;传入类型和对象的区别;