uBoot使用tftp的方式加载Linux内核文件

时间:2022-07-17 03:43:05

这里就来介绍tftp方式从linux主机下载文件到开发板里运行;需要在主机linux系统里安装tftp服务器。

在Ubuntu中安装tftp服务器的方法如下:

1) 下载并安装程序

sudo apt-get install tftp tftpd

2) 建立tftp服务器目录

sudo mkdir -p /work/tftpboot
sudo chmod 777 /work/nfs

接着修改tftp服务器配置的目录:

cat /etc/xinetd.conf 
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/

defaults
{
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /work/tftpboot
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info

}

3) 重新启动服务

sudo /etc/init.d/xinetd restart
sudo in.tftpd –l /work/tftpboot

4) 测试tftp服务器

在/tftpboot目录下面建立一个文件:

cd /work/tftpboot
touch testfile

在进入另外一个目录里面:

tftp 127.0.0.1
tftp>get testfile
Transfer timed out
tftp>

这时这个目录下面虽然能看到testfile文件,但服务器还是安装失败了。

这时如果在u-boot上下载的话:

tftp 0x84000000 file

 会报错:Retry count exceeded; starting again ,这时的报错,就不是u-boot源码的问题啦。

 

苦搜一番,发现还有个tftpd-hpa的东西,嗯,尝试一波,先卸载掉之前已经安装的tftp tftpd

sudo apt-get remove tftp
sudp pat-get remove tftpd

 

1.然后安装tftp-hpa,tftpd-hpa,xinetd

sudo apt-get install tftp-hpa tftpd-hpa xinetd

 2.配置/etc/default/tftpd-hpa内容如下:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/work/tftpboot"   //修改成自己要使用的tftpboot目录
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -c"   //-c 表示可以创建文件 -c  create

 3.重启服务

sudo /etc/init.d/tftpd-hpa start

 4.测试tftp

root@Linux:/# tftp localhost
tftp> get zImage
tftp> q

 可以在当前目录下发现多了zImage文件。配置完成。

 

2,uboot网络配置及镜像下载及加载与写入flash

(1)网络配置

进入uboot命令行界面

//设置ip地址
$ setenv ipaddr 192.168.200.255 
//设置网关地址
$ setenv gatewayip 192.168.0.1
//设置tftp服务端ip地址(pc端地址)
$ setenv serverip 192.168.200.222
//保存设置
$ saveenv
//查看当前设置,如下图所示
$ pri

 (2)tftp下载调试

1.下载内核

tftpboot 0x83000000 zImage

 成功后如下图:

uBoot使用tftp的方式加载Linux内核文件

2.下载设备树

tftpboot 0x84000000 myd-y6ul-gpmi-weim.dtb

 

接下来便是启动测试:

bootz 0x83000000 - 0x84000000

启动成功;

将调试好的内核和设备树写到NandFlash中:

烧写内核:

uBoot使用tftp的方式加载Linux内核文件

 

烧写DTB:

 uBoot使用tftp的方式加载Linux内核文件

接下来重启就OK了。

至于上面地址中的确认,如果u-boot支持了mtdparts,可以使用该命令来查看,或是直接查看<board.h>中mtdparts来确认;

uBoot使用tftp的方式加载Linux内核文件

 既然支持了mtdparts,可以使用erase 带分区名称直接操作,就更方便了。