本文内容来自对 《朱有鹏嵌入式linux核心课程》学习总结
1. tftp 下载指令
tftp
- uboot 本身主要目标是启动内核,为了完成启动内核必须要能够部署内核,uboot 为了部署内核就需要将内核镜像从主机中下载过来然后烧录到本地 flash 中。uboot 如何从主机(windows 或者虚拟机 ubuntu)下载镜像到开发板上?有很多方式,主流方式是:fastboot 和 tftp。
fastboot
的方式是通过 USB 线进行数据传输。
tftp
的方式是通过有线网络的。典型的方式就是通过网络,fastboot 是近年才新发展的。 - tftp 方式下载时实际上 uboot 扮演的是 tftp 客户端程序角色,主机 windows 或 虚拟机 ubuntu 中必须有一个 tftp 服务器,然后将要下载的镜像文件放在服务器的下载目录中,然后开发板中使用 uboot 的 tftp 命令去下载即可。
- 有些人习惯在 windows 中搭建 tftp 服务器,一般是用一些软件来搭建(譬如 tftpd32,使用起来比较简单);有些人习惯在linux 下搭建 tftp 服务器,可以参考网盘中的虚拟机下载目录下的一个教程《嵌入式开发环境搭建14.04.pdf》,这里面有 ubuntu 中搭建 tftp 服务器的教程,也可以自己上网搜索教程尝试。(如果你直接就用我的虚拟机,那就已经搭建好了,不用再搭建了;如果是自己新装的那就参考搭建文档;如果你的版本和我的不一样那搭建过程可能不一样)
- 我的虚拟机搭建的时候设置的 tftp 下载目录是 /tftpboot,将要被下载的镜像复制到这个目录下。
- 检查开发板 uboot 的环境变量,注意 serverip 必须设置为虚拟机 ubuntu 的 ip 地址。(serverip 这个环境变量的意义就是主机 tftp 服务器的 ip 地址)
- 然后在开发板的 uboot 下先 ping 通虚拟机 ubuntu,然后再尝试下载:
tftp 0x30000000 zImage-qt
(意思是将服务器上名为 zImage-qt 的文件下载到开发板内存的 0x30000000 地址处。) - 镜像下载到开发板的 DDR 中后,uboot 就可以用
movi
指令进行镜像的烧写了。
注意:
- 如果你是用的 windows 下的 tftp 服务器,那 uboot 的 serverip 就要设置为和 windows 下 tftp 服务器的 ip 地址一样(windows 下的 tftp 服务器软件设置的时候就有个步骤让你设置服务器的 ip 地址,这个 ip 地址和主机 windows 必须在同一个网段)。
- 整个过程中间环节比较多,实际做的时候可能最后会下载不下来。这时候可能的问题非常多。对照课程所计思路来排查。(譬如:第一步应该保证uboot 和 ubuntu 可以 ping 通,第二步再保证 ubuntu 中 tftp 服务器搭建没错;第三步再实现 tftp 下载。如果第一步有问题参考网络设置部分,第二步有问题(tftp 本地测试下载OK,但是开发板就是不行),有一个解决方案就是用 windows 下的 tftp 服务器)
2. nfs 启动内核命令
(1)uboot 中也支持 nfs 命令。