uBoot使用tftp的方式加载Linux内核文件
这里就来介绍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
成功后如下图:
2.下载设备树
tftpboot 0x84000000 myd-y6ul-gpmi-weim.dtb
接下来便是启动测试:
bootz 0x83000000 - 0x84000000
启动成功;
将调试好的内核和设备树写到NandFlash中:
烧写内核:
烧写DTB:
接下来重启就OK了。
至于上面地址中的确认,如果u-boot支持了mtdparts,可以使用该命令来查看,或是直接查看<board.h>中mtdparts来确认;
既然支持了mtdparts,可以使用erase 带分区名称直接操作,就更方便了。
把喜歡的事情做到極緻。