I.MX6ULL开发板
启动模式设置步骤
- SD/eMMC:位宽(BT_CFG2[5] )
2. I.MX6ULL镜像文件分析(类似于单片机的bootloaer)
开发板启动分析:首先自带的boot ROM程序会读取外部存储器中的IVT表与DCD数据,获取Boot data数据与DCD数据,就知道了内存的信息与时钟等硬件寄存器信息,与镜像加载的地址与大小,便把外部存储器的镜像加载到内存中。
boot ROM程序:存在与芯片内部得一段代码
选择内部启动方式,启动boot ROM程序
- 初始化时钟、外部DDR3
- 从外部存储介质加载代码
1. 五要素,
- 空偏移:就是外部存储器并不是从00000开始的,会有一定的偏移
- 芯片厂商设定
- Image vector table,简称IVT
- 关键数据位置
- Boot data:启动数据
- 镜像加载地址、大小
- Device configuration data:简称DCD
- 保存关键外设的寄存器配置信息(时钟、DDR3相关)
- bin文件
- 真正程序文件
8.7.1 Image Vector Table and Boot Data
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iLAU0nu6-1616986570694)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704091452248.png)]
(1)空偏移
镜像不是从介质头部开始存储的,不同介质分别对应一段偏移地址
8.7.1 Image Vector Table and Boot Data
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLwSDwMM-1616986570695)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704092110555.png)]
- Boot Device Type:不同启动介质
- Image Vector Table Offset :镜像有效数据偏移位置
- Initial Load Region Size:boot rom程序读取程序大小
(2)IVT表
记录关键数据的位置
8.7.1.1 Image vector table structure
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LwYEZNY-1616986570696)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704093152444.png)]
- header:IVT的长度、大小
- entry:程序运行地址
- dcd:内存中DCD数据地址
- boot data:内存中boot data地址
- self:内存中IVT自己所在地址
(3)Boot data
记录"镜像"在内存中的加载地址和大小
8.7.1.2 Boot data structure
[外图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnqPeKdL-1616986570697)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704094321719.png)]
- start:镜像在内存中的加载地址,包括空偏移
- length:镜像长度,包括空偏移
(4)DCD表
外设寄存器配置信息,初始化关键外设
8.7.2 Device Configuration Data (DCD)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yCtaenNo-1616986570698)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704100124427.png)]
- Header:记录DCD大小、版本
- CMD:寄存器初始化列表
Table 8-28. Write data command format
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-roqfr3AT-1616986570699)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704100650049.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MMfOUsCw-1616986570700)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704100705185.png)]
- Tag:DCD命令,一般为写寄存器
- Length:表示命令的大小
- Parameter:设置写寄存器方式(写值/清位/设置位)
- Address:寄存器地址,主要是时钟、DDR3相关外设地址
- Value:具体置
3. SDK方式烧录镜像
1. 获取NXP官方SDK
- 官方网站:
https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-6-processors/i-mx-6ull-single-core-processor-with-arm-cortex-a7-core:i.MX6ULL?&tab=Design_Tools_Tab& - 野火大学堂
Linux系统开发板->i.MX 6ul系列开发板->基本资料->
embed_linux_tutorial\base_code\bare_metal\sdk_nxp
2. Linux安装SDK
./XXX.run
3. SDK中镜像相关工具
(1)说明文档
tools\imgutil\readme.txt
(2)使用要点
tool/imgutil
- 复制bin文件到imgutil/evkmcimx6ull文件下,并重命名为sdk20-app.bin
- 执行编译命令,得到img文件
- flash:mkimage.sh flash
- sd:mkimage.sh sd
4. mkimage.sh
- 根据dcd.config文件,由dcdgen.bin程序生成DCD表
- imgutil.bin程序生成img可烧录镜像
5. 野火烧录工具
embed_linux_tutorial\base_code\bare_metal\download-tool
4.ARM-V7架构
1. 运行模式
User(USR):用户模式
linux系统用户进程,资源访问受限System(SYS):系统模式
linux内核就是运行在系统模式下面的:共用寄存器,资源自由访问IRQ:一般中断模式
硬件产生中断信号FIQ:快速中断模式
时间紧急的中断,高速信号的传输、采集Supervisor(SVC):管理模式
默认模式,系统初始化,软中断Abort(ABT):数据访问终止模式
非法访问地址或寄存器、段错误Undef(UND):未定义指令模式
程序跑飞、篡改Monitor:用于用户安全扩展模式
Hyp :用于虚拟化扩展
2. 寄存器组
通用寄存器
- r0~r3:用来传递函数参数、暂存数据
- r4~r11:用来保存被调函数的局部变量、暂存数据 (放在寄存器的值速度要更快一些)
- r12:记录函数调用过程中上一次sp指针的值
- r13(sp):函数堆栈寄存器(指向堆栈的指针)
- r14(lr):记录函数返回地址(比如在执行完中断后,要再执行之前的程序,这就保存了函数的返回地址)
- r15(pc):程序计数器(就是指向程序指令的指针,指向谁,就执行相对应的指令)
程序状态寄存器
- cpsr:该寄存器包含运算标志位(比如加减时候需要进位等)、中断禁止位、当前运行模式标志(就是记录当前CPU的状态,比如用户模式、系统模式)等一些状态位以及一些控制位
- spsr:发生异常切换模式时,将cpsr复制到发生异常的模式下的spsr(就是程序状态复制寄存器)
系统寄存器
cp15协处理器:内存、缓存、中断等
5. VSCode编辑器
1. 启动
code
2. 使用特点
- 无需新建项目,直接打开文件夹
- 不同目录下的文件夹,可保存在工作区
- 默认预览模式
3.推荐插件
- c/c++:函数跳转、自动补全
- Chinese:中文
- material theme UI
- CodeSpell Checker:拼写检查
- Bracket Pair Colorizer:括号着色器
- rainbow-highlighter:变量彩虹高光
- shift + alt + z
- shift + alt + a
4. 高效工作
- 移动光标到行首:home
- 移动光标到行尾:end
- 跳转文档头部:ctrl+home
- 跳转文档尾部:ctrl+end
- 花括号跳转:ctrl+shift+\
- 文件跳转:ctrl+p
- 行跳转:ctrl+g
- 批量修改:F2