Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写及启动头文件的详解

发布者:chaohuangmeitao最新更新时间:2021-10-29 来源: eefocus关键字:Linux  ARM 手机看文章 扫描二维码
随时随地手机看文章

前面我们设置好 BOOT 以后就能从指定的设备启动了,但是你的设备里面得有代码啊,在LED灯实验中我们使用 imxdownload 这个软件将 led.bin 烧写到了 SD 卡中。imxdownload 会在 led.bin前面添加一些头信息,重新生成一个叫做 load.imx 的文件,最终实际烧写的是 laod.imx。那么imxdownload 究竟做了什么? load.imx 和 led.bin 究竟是什么关系?


①、 Image vector table,简称 IVT, IVT 里面包含了一系列的地址信息,这些地址信息在ROM 中按照固定的地址存放着。

②、 Boot data,启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等。

③、 Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置。

④、用户代码可执行文件,比如 led.bin。

可以看出最终烧写到 I.MX6U 中的程序其组成为: IVT+Boot data+DCD+.bin。所以LED灯实验中的 imxdownload 所生成的 load.imx 就是在 led.bin 前面加上 IVT+Boot data+DCD。内部 BootROM 会将 load.imx 拷贝到 DDR 中,用户代码是要一定要从 0X87800000 这个地方开始的,因为链接地址为 0X87800000, load.imx 在用户代码前面又有 3KByte 的 IVT+Boot Data+DCD 数据,下面会讲为什么是 3KByte,因此 load.imx 在 DDR 中的起始地址就是 0X87800000-3072=0X877FF400


1.IVT 和 Boot Data 数据

load.imx 最前面的就是 IVT 和 Boot Data, IVT 包含了镜像程序的入口点、指向 DCD 的指针和一些用作其它用途的指针。内部 Boot ROM 要求 IVT 应该放到指定的位置,不同的启动设备位置不同,而 IVT 在整个 load.imx 的最前面,其实就相当于要求 load.imx 在烧写的时候应该烧写到存储设备的指定位置去。整个位置都是相对于存储设备的起始地址的偏移,如图

在这里插入图片描述

以 SD/EMMC 为例, IVT 偏移为 1Kbyte, IVT+Boot data+DCD 的总大小为 4KByte-1KByte=3KByte。假如 SD/EMMC 每个扇区为 512 字节,那么 load.imx 应该从第三个扇区开始烧写,前两个扇区要留出来。 load.imx 从第 3KByte 开始才是真正的.bin 文件。那么 IVT 里面究竟存放着什么东西呢? IVT 里面存放的内容如图

在这里插入图片描述

第一个存放的就是 header(头), header 格式如图

在这里插入图片描述

Tag 为一个字节长度,固定为 0XD1, Length 是两个字节,保存着 IVT 长度,为大端格式,也就是高字节保存在低内存中。最后的 Version 是一个字节,为 0X40 或者0X41

image.png

Boot Data 的数据格式如图

image.png

我们详细的列出了 load.imx 的 IVT+Boot Data 每 32 位数据所代表的意义。这些数据都是由 imxdownload 这个软件添加进去的


2.DCD数据

复位以后, I.MX6U 片内的所有寄存器都会复位为默认值,但是这些默认值往往不是我们想要的值,而且有些外设我们必须在使用之前初始化它。为此 I.MX6U 提出了一个 DCD(DeviceConfig Data)的概念,和 IVT、 Boot Data 一样, DCD 也是添加到 load.imx 里面的,紧跟在 IVT和 Boot Data 后面, IVT 里面也指定了 DCD 的位置。 DCD 其实就是 I.MX6U 寄存器地址和对应的配置信息集合, Boot ROM 会使用这些寄存器地址和配置集合来初始化相应的寄存器,比如开启某些外设的时钟、初始化 DDR 等等。 DCD 区域不能超过 1768Byte, DCD 区域结构如图:

DCD 的 header 和 IVT 的 header 类似,结构如图:

其中 Tag 是单字节,固定为 0XD2, Length 为两个字节,表示 DCD 区域的大小,包含 header,同样是大端模式, Version 是单字节,固定为 0X40 或者 0X41


DCD区域结构图中的 CMD 就是要初始化的寄存器地址和相应的寄存器值, 结构如图

Tag 为一个字节,固定为 0XCC。 Length 是两个字节,包含写入的命令数据长度,包含 header,同样是大端模式。 Parameter 为一个字节,这个字节的每个位含义如图

bytes 表示是目标位置宽度,单位为 byte,可以选择 1、 2、和 4 字节。 flags是命令控制标志位。


Address 和 Vlalue/Mask 就是要初始化的寄存器地址和相应的寄存器值,注意采用的是大端模式! 在分析 IVT 的时候我们就已经说过了, DCD数据是从 0X2C 地址开始的。根据我们分析的 DCD 结构可以得到 load.imx 的 DCD数据如表

image.png

image.png

从图 中可以看出, DCD 里面的初始化配置主要包括三方面:

①、设置 CCGR0~CCGR6 这 7 个外设时钟使能寄存器,默认打开所有的外设时钟。

②、配置 DDR3 所用的所有 IO。

③、配置 MMDC 控制器,初始化 DDR3


总结:我们编译出来的.bin 文件不能直接烧写到 SD 卡中,需要在.bin 文件前面加上 IVT、 Boot Data 和 DCD 这三个数据块。这三个数据块是有指定格式的,我们必须按照格式填写,然后将其放到.bin 文件前面,最终合成的才是可以直接烧写到 SD 卡中的文件

关键字:Linux  ARM 引用地址:Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写及启动头文件的详解

上一篇:Linux之ARM(IMX6U)裸机C语言LED驱动实验--驱动编写,编译
下一篇:Linux之ARM(IMX6U)裸机之I.MX6ULL启动方式详解

推荐阅读最新更新时间:2024-11-07 10:19

μC/OS-Ⅱ在ARM系列单片机S3C44B0x上的移植
引 言 目前,嵌入式系统在工业控制、家用电器、移动通信、PDA等各种领域得到了越来越广泛的应用。由于用户对嵌入式产品的性能要求越来越高,程序设计也变得越来越复杂,这就需要一个通用的嵌入式实时操作系统来对其进行管理和控制。对移植了操作系统的嵌入式系统进行设计和开发,可以大大减小程序员的负担,对于不同的应用可以按照相同的步骤来完成系统的设计。 μC/OS-Ⅱ是一种简单高效、源代码公开的嵌入式实时操作系统,具有良好的可扩展性和可移植性,被广泛的应用到各种嵌人式处理器上。μCOS-Ⅱ操作系统拥有可固化,可裁剪,可剥夺性的实时内核,可同时管理64个系统任务。利用移植μCOS-Ⅱ操作系统的嵌入式微处理器来设计和开发产品,对于提高产品的
[单片机]
μC/OS-Ⅱ在<font color='red'>ARM</font>系列单片机S3C44B0x上的移植
苹果广告暗示iPhone将采用Arm处理器
北京时间1月12日消息,据国外媒体报道,苹果近日对外展示了iPhone智能手机后,外界非常关注该机型将采用何种处理器。而苹果网站上的一则招聘广告暗示,iPhone很可能采用Arm处理器。 这则招聘网络工程师的广告显示,希望熟悉Mac OS和嵌入平台特别是Arm处理器的人才加入苹果。一些分析人士称,Arm处理器能满足智能手机任务处理需求,且能耗较低,目前已占据智能手机处理器市场的优势地位,故而iPhone采用Arm也在情理之中。如果iPhone采用Arm处理器,将代表苹果Mac OS X操作系统的最新发展方向。目前Mac OS已可应用于英特尔的x86和IBM的PowerPC处理器,而Arm无疑将代表苹果操作系统的第三个平台。 市场
[焦点新闻]
基于Linux嵌入式操作系统掌上娱乐系统设计方案
近年来,随着微处理器技术、DSP技术、多媒体编解码技术以及嵌入式技术的发展,多媒体娱乐终端已经成为消费性电子产品的热点。同时,逐渐成熟的市场随着MP3在市场上取得的巨大成功,以及MP4、数字电视、3G通讯等相关技术的起步,在未来几年内都将会得到快速发展。 嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 多媒体终端正是数字信息产业的一个重要组成部分,所以在这个背景下,MultimediaTerminal蕴含着极大地发展潜力。 本文是基于Linux嵌入式操作系统在UP-TECHS3C2410DVK1。1开发平台下设计并实现了一个高
[单片机]
基于<font color='red'>Linux</font>嵌入式操作系统掌上娱乐系统设计方案
ARM与多家合作伙伴共同发起人工智能生态联盟
ARM与多家生态系统合作伙伴发起ARM人工智能生态联盟(ARM AI Ecosystem Consortium,简称AIEC)。联盟旨在联合产业链上下游合作伙伴,围绕以具体应用场景部署为目标,建立以数据、算法、芯片为支撑的互动创新生态体系,拉通云端和终端,加速人工智能产业化。上海市经济信息化委员会主任陈鸣波以及各发起企业代表出席了今天在上海举行的发起仪式。 随着算法、计算能力和大数据这三大人工智能要素的发展,人工智能范式迁移已现端倪,技术和产业两个维度的“奇点时刻”正在临近。IDC预计到 2020 年全球 AI 市场将达到 470 亿美元,相对于2016 年全球 AI 市场近80亿美元的规模,复合年均增长率为 55.1%
[物联网]
<font color='red'>ARM</font>与多家合作伙伴共同发起人工智能生态联盟
ARM指令中的立即数
在 ARM 数据处理指令中, 当参与操作的第二操作数为立即数时, 每个立即数都是采用一个8位的常数循环右移偶数位而间接得到, 其中循环右移的位数有一个4位二进制的2倍表示. 则有效立即数可表示为: := immed_8; 循环右移(2 rotate_imm). 其中: 代表立即数, immed_8 代表8位常数, 即所谓的 8位图 , rotate_imm 代表4位的循环右移值. 这样一来出现了一个问题: 尽管表示的范围变大了, 但是12位所能表现的数字的个数是一定的. 因此, ARM 规定并不是所有的32位常数都是合法的立即数, 只有通过上面的构造方法得到的才是合法的立即数, 编译的时候才不会报错. 举个例子吧. 0x3FC(00
[单片机]
基于ARM9的船载海水监测系统设计
0 引言 海岸带是海洋中对人类活动最为敏感的部分,人类活动会对其生态系统的结构和功能产生严重影响。这使得海岸带成为海洋生态环境脆弱区。因此,海岸带的安全与管理已成为国际热门研究领域。海岸带的科学管理是建立在大量数据的基础上进行的。传统的海岸带调查,需要大量的人力物力,而且获得的数据非常有限,高通量海岸带数据获取已成为制约海岸带科学管理的主要瓶颈。 以美国和欧盟为代表的海洋研究水平较高的国家,开发了多种形式的海洋监测系统,如浮标(Buoy)、拖曳式监测船(Tow)、水下滑翔机(Glider)、卫星遥感、海底观测站等,来获取海量数据。 在此,介绍一种新的海洋数据采集方法,并研制出一套采集系统——船载监测系统(Automate
[单片机]
基于<font color='red'>ARM</font>9的船载海水监测系统设计
生态系统更完整 ARM服务器阵营声势大涨
        安谋国际(ARM)架构处理器将加速渗透伺服器市场。ARM近期联合伺服器上、下游供应链业者,共同推出伺服器基础系统架构(SBSA),可望解决目前ARM架构伺服器软硬体开发无标准可循的问题,从而壮大ARM阵营在伺服器市场的发展势力。 安谋国际(ARM)伺服器阵营正在逐渐壮大。身为行动装置处理器核心霸主的ARM,为进军伺服器市场,已积极拉拢、整合上下游供应链业者,壮大ARM架构在伺服器市场的声势。   事实上,今年2月上旬,安谋国际即特别针对ARMv8-A架构的64位元处理器,发布全新的伺服器基础系统架构(Server Base System Architecture, SBSA)规格(图1),期解决目前ARM架构伺服器
[手机便携]
AMD从ARM手中获得安全芯片授权
    6月13日消息,据国外媒体报道,芯片厂商AMD和ARM今日宣布,AMD将从ARM手中取得一款微处理器的授权,以提升x86芯片的安全性能。   ARM公司2004年起便开始推广名为TrustZone的安全技术,通过该技术,芯片中可以划定一块安全区域,攻击者无法修改其中的数据,该技术对于手机上的金融交易很有意义。AMD管理层透露,该公司将把取得授权、可运作TrustZone的ARM核心嵌入其处理器中。   这两家公司是在西雅图召开的一次技术会议上宣布这一消息的。分析人士指出,AMD的做法意在与英特尔竞争,后者已收购了著名安全软件厂商迈克菲,并将在芯片中提升安全功能。   AMD和ARM的协作是不同企业将不同芯片整合成一件产品的典
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved