IMX6ULL裸机启动,IMX6ULL运行freeRtos, 源代码分析

本文详细介绍了IMX6ULL芯片的裸机启动过程,包括从不同介质加载代码的差异,以及启动时的内存布局。同时,讲解了如何将FreeRTOS操作系统应用到IMX6ULL上,通过SDK提供的示例进行编译和下载,并讨论了代码重定位的问题。此外,还提及了在FreeRTOS基础上运行 lwip 的可能性。
摘要由CSDN通过智能技术生成

IMX6ULL裸机启动,IMX6ULL运行freeRtos,源代码分析


裸机启动部分

在这里插入图片描述
imx6ull中根据运行代码位置的不同RAM/flash/SD卡,上电会先运行片上ROM中的代码,搬运的数据大小是不同的,代码也不是存储在0地址处的。如下图,比如从sd中运行代码,代码IVToffset大小1k,initloadSize为4k。在这里插入图片描述
实质上应用程序前红色框中的大小有3k,可以配置启动信息,入口地址,初始化设备,基本的时钟,DDR要先初始化才能使用吧。具体的可以参考其他资料如百问网的imx6ull手册
在这里插入图片描述
韦老师的裸机代码中,写好的程序是调用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
// -e 0x80200000程序会被搬运到的位置

其他的开发板如,原子的imxdownload工具中直接固定了加载地址为0X87800000,链接脚本中也是这个地址,如不地址不相同,就会牵扯到代码重定位的问题。
在这里插入图片描述在这里插入图片描述

但也有可能有人设置的就是不一样的地址,照样能跑下去,这就要看start.s中的跳转指令是

	ldr sp, =main		/* 跳转到main函数 		 */
	b main				/* 跳转到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

代码重定位

关于代码重定位。

API总览

在这里插入图片描述

freertos源代码分析

后面尽量每个函数分析一遍

任务切换

在这里插入图片描述

vTaskDelay

在这里插入图片描述

xQueueGenericReceive

在这里插入图片描述

xQueueGenericSend

在这里插入图片描述

参考

PlantUML 语言参考指引
PlantUML 快速入门指南
FreeRTOS开发者文档

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值