IMX6ULL裸机启动,IMX6ULL运行freeRtos
裸机启动部分
![在这里插入图片描述](https://img-blog.csdnimg.cn/0616e37bd65e4f6480f1fda9a6187636.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAemhvdV8yMDE4,size_20,color_FFFFFF,t_70,g_se,x_16)
imx6ull中根据运行代码位置的不同RAM/flash/SD卡,上电会先运行片上ROM中的代码,搬运的数据大小是不同的,代码也不是存储在0地址处的。如下图,比如从sd中运行代码,代码IVToffset大小1k,initloadSize为4k。![在这里插入图片描述](https://img-blog.csdnimg.cn/11772cbfafd5480895889b18250f143a.png)
实质上应用程序前红色框中的大小有3k,可以配置启动信息,入口地址,初始化设备,基本的时钟,DDR要先初始化才能使用吧。具体的可以参考其他资料如百问网的imx6ull手册
![在这里插入图片描述](https://img-blog.csdnimg.cn/e77ae09c20494b7f9b9994ac36dcb483.png)
韦老师的裸机代码中,写好的程序是调用mkimage给app程序加上特有的头部信息,配合其开发的烧录工具100ask_imx6ull_flashing_tool可以下载到ram运行(*.imx文件)。如果想下载sd中,需要在imx文件前面加上1k的偏移(image vector table offset)
mkimage -n ./tools/imximage.cfg.cfgtmp -T imximage -e 0x80200000 -d led.bin led.imx
其他的开发板如,原子的imxdownload工具中直接固定了加载地址为0X87800000,链接脚本中也是这个地址,如不地址不相同,就会牵扯到代码重定位的问题。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9a97ff2343974841ad04078600eb72a1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAemhvdV8yMDE4,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/58e217692e6f48a88f69786dca428c68.png)
但也有可能有人设置的就是不一样的地址,照样能跑下去,这就要看start.s中的跳转指令是
ldr sp, =main
b main
链接地址和加载地址不一样的情况:
如果是第一行的话就无法运行,地址相关代码
如果第二行的话就代码可以部分运行,比如打印定义好的全局变量就不正常了,data区没有搬运到相应的链接地址去。
IMX6ULL运行freeRtos
imx6ull有官网的skd,里面已经有一些例子。
第一步:
SDK_2.2_MCIM6ULL/boards/evkmcimx6ull/demo_apps/hello_world/armgcc中直接运行 ./build_ddr_debug.sh
SDK_2.2_MCIM6ULL/boards/evkmcimx6ull/demo_apps/hello_world/armgcc# ./build_ddr_debug.sh
第二步:
mkimage -n ./tools/imximage.cfg.cfgtmp -T imximage -e 0x80002000 -d led.bin led.imx
注意:-e 地址 为 0x80002000
第三步:
利用100ask_imx6ull_flashing_tool下载到imx6ull上面运行就会看到串口打印的
hello world.
FreeRtos
买到板子之后不久就一直想在imx6ULL上面跑rtos,结果也没找到啥教程,有人说cortexa7的可以参看a9的移植,无奈还是懵,后来想看看freertos源码之后在动手,结果发现简单看了源码还是菜到没头绪。
中间玩玩裸机程序,突然有两天就想研究一下,imx上程序从编译好到下载到板子上是怎么运行的,为啥我编译的sdk代码不可以用,后面就发现rtos的demo代码可能启动位置不对,根据连接脚本中的信息链接地址为0x80002000
SDK_2.2_MCIM6ULL/boards/evkmcimx6ull/rtos_examples 目录中有些例子,只要编译后,加上imx头部信息,就可以愉快的在imx6ull上面跑freertos了,
后续看看我的板子怎么能在freertos基础上跑lwip
代码重定位
关于代码重定位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)