菲洛嘉青春动能素135HA FILLMED® NCTF 135HA LED指示灯的常见故障分析 智微智能 Elkhartlake K075终端,零售产业新选择 天空蓝拓客管理系统详细介绍版 muso公链项目 天使计划 是什么?[秘] 独家揭秘最前沿的家装“黑科技”——掌赋 天博体育欧洲杯特辑,东道主法兰西的失意2016 亚马逊的送货侦察员 学习听起来像挡泥板 Google Comics Factory使ML变得容易 笑着说-男性或女性 Amazon Rekognition中更好的人脸检测 关于Spaun的真相-大脑模拟 两个聊天机器人彼此聊天-有趣又怪异 GANPaint:将AI用于艺术 WCF和WF给予社区 从耳朵到脸 所有神经网络的深层缺陷 蠕虫在尾巴上平衡杆子 Kickstarter上的OpenCV AI套件 TensorFlow-Google的开源AI和计算引擎 众包取代新闻工作者 Google的DeepMind学会玩街机游戏 哑机器人V智能机器人 .NET与.NET 5融为一体 Google的深度学习-语音识别 LInQer将.NET LINQ移植到Javascript 机器人TED演讲-新的图灵测试? GAN的发明者加入苹果 您的智能手机会监视您键入的内容 人工智能帮助改善国际象棋 Zalando Flair NLP库已更新 TensorFlow 1.5包含移动版本 AlphaGo输了一场比赛-比分3-1 虚拟机器学习峰会 Microsoft开源AI调试工具 SharePoint走向移动 F#4.0发出文化变革的信号 克里斯蒂拍卖AI艺术品 人工智能如何区分 Facebook在蒙特利尔的新AI实验室 Mozilla想要您的声音 微软使用极深的神经网络赢得ImageNet 建立AI合作伙伴关系 .NET Core 3-Microsoft几乎回到了起点 神经网络-更好的销售商? Google使用AI查找您的住所 虹膜-适用于Android的Siri证明苹果没有优势 TensorFlow 2提供更快的模型训练 深度学习研究人员将为Google工作
您的位置:首页 >物联网 >

【北京迅为】i.MX6ULL终结者编译LED汇编程序

我们在Ubuntu下通过vim编辑好LED的汇编程序(6.6章节),然后保存并退出。然后我们使用arm交叉编译器来编译该程序,我们在终端输入“arm-linux-gnueabihf-gcc -g -c led.s -o led.o”命令,把led.s编译成led.o,其中的“-g”参数是产生调试信息,可以使用GDB来调试代码。“-c”参数是编译源文件,不链接。“-o”参数是指定产生的文件名称,我们指定生成led.o,运行效果如图 1所示: 在这里插入图片描述

图 1

我们可以看到通过arm交叉编译生成了led.o文件,这个文件相当于中间文件,我们还需要把编译生成的.o文件链接起来生成可执行文件(我们这里只有一个led.o,对于有的工程可能会生成多个.o文件)。

接下来我们使用交叉编译器的“arm-linux-gnueabihf-ld”命令来把“.o”文件链接起来。链接的目的就是把我们的程序固定到某个地址,这样cpu在运行的时候就可以通过链接地址找到我们的程序,并运行它。在链接之前我们需要先了解下i.MX6ULL的启动,i.MX6ULL支持SD卡,EMMC,NAND等方式启动,i.MX6ULL启动的时候首先将代码从SD卡,EMMC,NAND中拷贝到运行地址,然后开始从运行地址处开始运行, i.MX6ULL芯片内部有128K的RAM(0X900000~0X91FFFF),另外外部扩展了DDR,所以i.MX6ULL的链接地址可以是内部的RAM,也可以是外部的DDR。我们所有的例程都是链接到DDR中,其地址为0X87800000。i.MX6ULL终结者开发板的DDR有两种:256MB和512MB,起始地址都是0X80000000。256MB的终止地址是0X8FFFFFFF,512M的终止地址是0X9FFFFFFF,之所以选择地址0X87800000,是因为后面我们要学的Uboot链接地址也是0X87800000。所以为了学习方便,我们统一使用0X87800000地址。

下面我们开始使用arm-linux-gnueabihf_ld命令将前面我们生成的“led.o”文件链接到0X87800000地址处,我们在终端输入“arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf”,其中的“-Ttext”指定链接地址(0X87800000),“-o”生成链接文件名,运行效果如图 2所示: 在这里插入图片描述

图 2

我们需要把链接文件转换成“.bin”文件,然后烧写到EMMC,才能运行。 接下来我们使用“arm-linux-gnueabihf-objcopy”命令将链接文件led.elf转换成“led.bin”文件。我们在终端输入“arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin”命令,其中“-O”指定以什么格式输出(binary表示二进制输出),“-S”表示不要复制源文件中的重定位信息和符号信息,“-g”表示不复制源文件中的调试信息,运行效果如图 3所示: 在这里插入图片描述

图 3

至此我们生成了最终的可执行程序“led.bin”文件。 我们可以总结下,为了生成led.bin文件,我们分别使用了命令: arm-linux-gnueabihf-gcc -g -c led.s -o led.o arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

为了编译方便,我们可以使用Makefile来编译我们的led汇编程序,首先我们在led工程目录下使用“touch Makefile”命令创建Makefile文件,如图 4所示: 在这里插入图片描述

图 4

然后使用vim编辑器打开Makefile文件,输入下面的命令: led.bin:led.s arm-linux-gnueabihf-gcc -g -c led.s -o led.o arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin clean: rm -rf *.o led.bin led.elf 添加完上面的命令,保存并退出,然后在led工程目录下执行“make”命令编译led.S,过程如图 5所示: 在这里插入图片描述

图 5

如果要清除工程,我们在终端执行“make clean”即可。

至此关于arm交叉编译器的使用,我们就先介绍到这里。编译生成了led.bin执行文件,下一步我们还需要给led.bin文件添加一些数据头才能执行。我们为用户提供了添加数据头的工具“create_imx”(光盘资料的“i.MX6UL终结者光盘资料\01_开发及烧写工具\2.裸机镜像制作工具”目录下),我们通过ssh工具拷贝该文件到led工程目录下,然后在终端输入命令“./create_imx led.bin”,生成bare.imx文件,如图 6所示: 在这里插入图片描述

图 6

现在我们开始使用MFG烧写工具来烧写(光盘资料的“i.MX6UL终结者光盘资料\01_开发及烧写工具\ 3.mfgtools_for_6ULL”文件夹),首先我们进到该文件夹,我们修改“cfg.ini”文件,如果您的板子是EMMC版本(8G flash容量),按照图 7的方式修改: 在这里插入图片描述

图 7

如果您的板子是NAND版本(512MB flash容量)(NAND版本的裸机验证我们需要使用一张TF卡),按照图 8所示修改: 在这里插入图片描述

图 8

修改完“cfg.ini”配置文件,然后我们在Ubuntu系统生成的“bare.imx”文件通过ssh工具拷贝到MFG烧写工具的“Profiles\Linux\OS Firmware\files\linux\”目录下,如图 9所示: 在这里插入图片描述

图 9

然后我们鼠标双击打开MFG烧写工具,如图10所示: 在这里插入图片描述

图 10

MFG烧写工具打开以后,我们使用开发板配带的USB数据线,连接开发板的OTG接口和PC的USB接口,使用开发板配带的电源连接到开发板的电源接口,然后开发板的拨码开关设置成USB启动,如图 11所示: 在这里插入图片描述

图 11

(如果我们使用的是NAND版本的开发板,我们需要先拔掉TF卡)然后按下开发板的电源开关,使开发板上电,此时我们会看到MFG烧写工具识别到开发板,如图 12所示: 在这里插入图片描述

图 12

(如果我们使用的是NAND版本的开发板,我们需要插入TF卡),然后我们点击MFG烧写工具的“Start”按钮,开始烧写镜像,如图 13所示: 在这里插入图片描述

图 13

等到进度条显示绿色,烧写完成,如图 14所示: 在这里插入图片描述

图 14

然后我们在按下开发板的电源按键给开发板断电,然后修改拨码开关设置正常启动。 如果您的板子是EMMC版本(8GB Flash存储),拨码开关如图 15所示: 在这里插入图片描述

图 15

如果您的开发板是NAND版本(512M Flash存储),拨码开关如图 16所示(设置成TF卡启动模式): 在这里插入图片描述

图 16

最后我们在按下开发板的电源开关,给开发板上电,此时我们会看到开发板的LED2被点亮了,如图 17所示: 在这里插入图片描述

图 17

本节我们详细的介绍了如何编译代码,并且如何使用MFG烧写生成的镜像到开发板的Flash里面,并最终运行测试。后面我们的程序都是用MFG工具进行代码的烧写。

在这里插入图片描述

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。