赞
踩
在基于嵌入式linux开发时,经常要烧写内核代码及设备数文件,而mfgtools工具的烧写速度台慢,浪费大量时间,在观看左盟主的imx6ul视频驱动开发视频时发现他是用tftp自动加载内核或设备数,现将内容整理如下。
1、在Ubuntu系统中搭建tftp服务
1)安装tftp
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
2)建立tftp目录,并修改权限
sudo mkdir /home/tftpboot
sudo chmod 777 /home/tftpboot
这样就在电脑Ubuntu中创建了一个名为tftpboot的目录,路径为/home/tftpboot。
注意!我们要给 tftpboot 文件夹权限,否则的话 uboot 不能从tftpboot 文件夹里面下载文件。
3)配置tftp
安装完成以后新建文件/etc/xinetd.d/tftp,然后在里面输入如下内容:
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
完了以后启动 tftp 服务,命令如下:
sudo service tftpd-hpa start
打开/etc/default/tftpd-hpa 文件
sudo vi /etc/default/tftpd-hpa
将其修改为:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/tftpboot" #是tftp传输目录
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure -c" #左盟主使用的是TFTP_OPTIONS="-l -c -s",本人没有研究
最后输入如下命令,重启 tftp 服务器:
sudo service tftpd-hpa restart
tftp 服务器已经搭建好了,接下来就是使用了。
在u-boot中设置一下几个环境变量
=> setenv ipaddr 192.168.1.230
=> setenv ethaddr 08:90:90:90:90:90
=> setenv gatewayip 192.168.1.1
=> setenv netmask 255.255.255.0
=> setenv serverip 192.168.1.61
设置完成后,保存环境变量
=> saveenv
注意,网络地址环境变量的设置要根据自己的实际情况,确保 Ubuntu 主机和开发板的 IP地址在同一个网段内,比如我现在的开发板和电脑都在192.168.1.0 这个网段内,所以设置开发板的 IP 地址为192.168.1.230,我的 Ubuntu 主机的地址为192.168.1.61,因此 serverip 就是192.168.1.61。 ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个
开发板的话一定要保证每个开发板的 ethaddr 是不同的(可在开发板启动后通过ifconfig查得),否则通信会有问题!设置好网络相关的环境变量以后就可以使用网络相关命令了。
ping服务器地址
从上图可以看出192.168.1.61 这个主机存在,说明 ping 成功, uboot 的网络工作正常。
注意!只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
将zImage下载到DRAM的0X80800000地址处,将设备树dtb下载到 DRAM 中的 0X83000000 地址处,之后命令 bootz 启动,命令如下:
=> tftp 80800000 zImage
=> tftp 83000000 imx6ul_topeet_nand.dtb
=> bootz 80800000 - 83000000
也可将以上3条指令通过setenv设置到环境变量bootcmd中
=> setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ul_topeet_nand.dtb; bootz 80800000 - 83000000'
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x400000 -- 100% complete.
Writing to NAND... OK
设置环境变量bootcmd前截图
修改环境变量bootcmd后截图
修改环境变量bootcmd成功后,启动
=> boot
操作详见:正点原子【第三期】手把手教你学Linux之系统移植和根文件系统构建篇P8 第3.4讲,以及《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.71》,30.4相关章节。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。