文章目录
前言
买的正点原子的imx6ull板子,最近想看看USB驱动。想着官方提供了IAR裸机代码,里面有成片的示例工程。最后因为买的大板子,没有JTAG接口,所以想着用网口加载编译的目标代码:结果…运行不起来,查找了一下原因,最后将解决方法示下。
一、uboot go/bootelf 命令(工具)
go命令为uboot下跳转运行指定地址的Bin目标码 bootelf命令为Uboot下解析指定地址的elf文件二、目标码加载方式简介
1.通过loady加载bin/elf文件到DDR空间
指令如下(示例):
loady方法 :在secureCRT软件下,在uboot输入loady [load address],将待传递的文件加载到指定的DDR地址
eg: loady 90000000 【回车】
将待传入的文件拖拽到窗口:
选择Ymode,有几种传输方式,可通过选择1024bytes提高传输速率:
传输完成后,该文件将存储在指定的DDR地址,上述示例存储地址为 0X90000000
2.通过网口加载bin/elf文件到DDR空间
指令如下(示例):
tftp方法 :在uboot输入loady [load address] [file name],将待传递的文件加载到指定的DDR地址
eg: tftp 90000000 hello.bin 【回车】
自建一个TFTP服务器,此处条件为已在ubuntu下新建了一个TFTP服务。在uboot下的设置:
设置uboot的TFTP服务地址 setenv serverip 【xxx.xxx.xxx.xxx】
设置uboot的IP地址 setenv ipaddr 【xxx.xxx.xxx.xxx】
将编译完成的目标码放入TFTP服务器的文件夹内,在uboot下输入指令:
tftp 90000000 1.out
此时,在0X90000000处存放着1.out文件。
三、启动目标码方法简介
bin / elf 目标码文件格式区别
bin文件格式为解析过的目标码
elf文件格式为未解析过的目标码
1.bin文件格式启动方式
若加载的文件格式为bin:
指令: go 【load addr】
2.elf文件格式启动方式
若加载的文件格式为elf:
指令: bootelf 【load addr】
四、imx加载裸机代码问题重现
描述:编译IAR工程代码,导入elf格式的目标码到DDR 0x90000000地址,最终bootelf后只运行一半,最终卡死。
五、imx加载裸机代码问题解决方法
注释clock_config_ocram.c文件内的部分代码(BOARD_SetRunClock函数):
该函数运行在ocram内部,详细请见代码工程。