当前位置:   article > 正文

imx6ull uboot使用tftp加载内核zImage及设备树dtb文件

tftp加载内核

在基于嵌入式linux开发时,经常要烧写内核代码及设备数文件,而mfgtools工具的烧写速度台慢,浪费大量时间,在观看左盟主的imx6ul视频驱动开发视频时发现他是用tftp自动加载内核或设备数,现将内容整理如下。

1、在Ubuntu系统中搭建tftp服务

1)安装tftp

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
  • 1
  • 2

2)建立tftp目录,并修改权限

sudo mkdir /home/tftpboot 
sudo chmod 777 /home/tftpboot
  • 1
  • 2

这样就在电脑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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

完了以后启动 tftp 服务,命令如下:

sudo service tftpd-hpa start
  • 1

打开/etc/default/tftpd-hpa 文件

sudo vi /etc/default/tftpd-hpa
  • 1

将其修改为:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/tftpboot"		#是tftp传输目录
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure -c"			#左盟主使用的是TFTP_OPTIONS="-l -c -s",本人没有研究
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后输入如下命令,重启 tftp 服务器:

sudo service tftpd-hpa restart
  • 1

tftp 服务器已经搭建好了,接下来就是使用了。

2、开发板u-boot中的网络设置

在这里插入图片描述
在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
  • 1
  • 2
  • 3
  • 4
  • 5

设置完成后,保存环境变量

=> saveenv
  • 1

注意,网络地址环境变量的设置要根据自己的实际情况,确保 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 的话会失败!

2、tftp传文件

将zImage下载到DRAM的0X80800000地址处,将设备树dtb下载到 DRAM 中的 0X83000000 地址处,之后命令 bootz 启动,命令如下:

=> tftp 80800000 zImage
=> tftp 83000000 imx6ul_topeet_nand.dtb
=> bootz 80800000 - 83000000  
  • 1
  • 2
  • 3

也可将以上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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

设置环境变量bootcmd前截图
在这里插入图片描述
修改环境变量bootcmd后截图
在这里插入图片描述
修改环境变量bootcmd成功后,启动

=> boot
  • 1

操作详见:正点原子【第三期】手把手教你学Linux之系统移植和根文件系统构建篇P8 第3.4讲,以及《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.71》,30.4相关章节。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/688815
推荐阅读
相关标签
  

闽ICP备14008679号