本文主要是介绍正点原子阿尔法板子在uboot用tftp下载裸机程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近在学正点原子阿尔法开发板的linux教程,裸机教程需要把SD卡连接到虚拟机,然后把裸机程序写到SD卡,然后再把SD卡插到开发板。感觉很麻烦。
所以我想在uboot用tftp把编译好的裸机bin文件下载到SDRAM,然后在uboot中直接运行裸机程序。
缺点就是断上电需要重新下载bin文件。
下面讲下实现步骤。
1、ubuntu系统搭建tftp服务。
2、开发板设置ip环境。
3、编译裸机程序。
4、tftp下载程序到开发板并运行。
ubuntu搭建tftp服务
参考原子给的教程对应章节即可,如下图。
需要补充的是,我遇到的问题是tftp服务启动失败,可能是之前ubuntu之前有tftp,反正按照百度,我把tftp-hpa,tftpd-hpa,xinetd卸载,重新安装后,就可以正常启动了。具体见我的前一篇博客。
开发板设置ip环境
参考原子给的教程对应章节即可,如下图。
编译裸机程序
方便起见,直接拿原子写好的例程进行验证。原子说下载 “实验 13_printf”。
ok,下载进去,go 87800000,确实可以运行。
然后我按照同样的方法,运行ledc.bin死活不行。我对比了printf例程和ledc例程的差异,发现在start.S中略有差异。在printf例程中多了下面这段代码
cpsid i /* 关闭全局中断 *//* 关闭I,DCache和MMU * 采取读-改-写的方式。*/mrc p15, 0, r0, c1, c0, 0 /* 读取CP15的C1寄存器到R0中 */bic r0, r0, #(0x1 << 12) /* 清除C1寄存器的bit12位(I位),关闭I Cache */bic r0, r0, #(0x1 << 2) /* 清除C1寄存器的bit2(C位),关闭D Cache */bic r0, r0, #0x2 /* 清除C1寄存器的bit1(A位),关闭对齐 */bic r0, r0, #(0x1 << 11) /* 清除C1寄存器的bit11(Z位),关闭分支预测 */bic r0, r0, #0x1 /* 清除C1寄存器的bit0(M位),关闭MMU */mcr p15, 0, r0, c1, c0, 0 /* 将r0寄存器中的值写入到CP15的C1寄存器中 */cpsie i /* 打开全局中断 */
按照同样的位置,把这段代码加到了ledc.bin工程的start.S文件,修改后如下,
tftp下载程序到开发板并运行
根据以上修改后的代码,make clean,然后make,将生成的ledc.bin文件拷贝到tftpboot目录下,
然后在开发板用tftp下载bin程序,然后go运行即可。
tftp 87800000 ledc.bin
go 87800000
这篇关于正点原子阿尔法板子在uboot用tftp下载裸机程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!