简介
以下介绍的裸机开发均基于i.MX6 Platform SDK完成,最后的版本于2013年发布,在使用gcc9编译时会遇到一些小问题,这里不做具体介绍。所有的开发均在Ubuntu 20.04上完成。目标平台为i.MX6D/Q,大部分也适用于i.MX6S/DL,但是对于i.MX6UL/ULL会需要较大改动。
编译与下载
PlatformSDK的Makefile中已经包含了产生目标镜像的代码,直接编译即可产生可以烧写进SD卡或者通过uuu载入的镜像,SPI Flash有待研究。(uuu是代替了MfgTools的跨平台i.MX USB烧录工具,可支持i.MX6\7\8)
可以直接使用如sudo uuu application.bin
的命令下载程序至RAM运行。如果需要写成脚本,可以参考如下的写法:
uuu_version 1.2.135 SDP: boot -f path_to_the_application.bin SDP: done
如果需要使用JTAG下载,则需要单独编写初始化DDR内存的初始化脚本,暂未进行测试。
串口
在EVK上默认调试串口为UART4,如果实际使用的板子并非使用UART4,则需要修改成板子上对应使用的串口。定义位于board/common/hardware_modules.c中。
内存配置
DDR控制器配置位于启动镜像的DCD区域中。如果使用的内存与EVK不同,则通常需要修改DCD配置。这部分数据位于board/mx6dq/board/dcd.c中。可以考虑使用官方的Programming Aid工具和DDR Stress Test工具来产生合适的DDR控制器配置。
不同板子拥有不同的内存容量。通常会区分出一部分不可cache内存用作DMA使用。主内存映射代码位于sdk/core/src/mmu.c中,具体的DMA内存设定定义在apps/common/platform_init.c中。以下为我在1GB RAM板子上使用的内存分割方案,仅供参考:
mmu_map_l1_range(0x10000000, 0x10000000, 0x20000000, kOuterInner_WB_WA, share_attr, kRWAccess); // First 512MB
mmu_map_l1_range(0x30000000, 0x30000000, 0x20000000, kNoncacheable, kShareable, kRWAccess); // Last 512MB