前提条件
- 开发板和主机相互ping通,主机IP:192.168.0.175,开发板IP:192.168.0.111 。
- 主机已经单间NFS网络文件系统,用于挂载根文件系统
- 主机与用户端建立TFTP服务,用于加载内核和设备树
搭建网络环境
搭建NFS服务
已写
搭建TFTP服务
安装配置xinetd
- 安装软件
$ sudo apt-get install xinetd
- 查询/etc/下是否存在xinetd.conf文件,没有的话新建一个
$ ls /etc/xinetd.conf
- 修改 xinetd.conf
$sudo vi /etc/xinetd.conf
xinetd.conf
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
# 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
}
includedir /etc/xinetd.d
- 新建TFTP工作目录
$ mkdir /home/book/arm/imx6ull/TFTP
& sudo chmod 777 /home/book/arm/imx6ull/TFTP
- 安装tftp-hpa和tftpd-hpa服务程序
$ sudo apt-get install tftp-hpa tftpd-hpa
- 配置
$ sudo vi /etc/default/tftpd-hpa
tftpd-hpa
1 # /etc/default/tftpd-hpa
2
3 TFTP_USERNAME="tftp"
4 TFTP_DIRECTORY="/home/book/arm/imx6ull/TFTP"
5 TFTP_ADDRESS=":69"
6 TFTP_OPTIONS=" -l -c -s"
- 配置/etc/xinetd.d/tftp文件
$ sudo vi /etc/xinetd.d/tftp
1 servicetftp
2 {
3 socket_type = dgram
4 wait = yes
5 disable = no
6 user = root
7 protocol = udp
8 server = /usr/sbin/in.tftpd
9 server_args = -s /home/book/arm/imx6ull/TFTP -c
10 #log_on_success += PID HOST DURATION
11 #log_on_failure += HOST
12 per_source = 11
13 cps =100 2
14 flags =IPv4
15 }
- 重启tftpd-hpa
$ sudo service tftpd-hpa restart
- 重启xinetd服务
$ sudo service xinetd restart
- 测试TFTP
在TFTP文件夹新建文件test.c
在开发板中新建文件夹TFTP,使用如下命令下载test.c文件
$ tftp -g -r test.c 192.168.0.175
下载完成查看文件内容无误,说明TFTP搭建成功。
网络加载内核和设备树
文件准备
- 将编译生成的内核文件zImage和设备树文件imx6ull-14x14-evk-emmc-hdmi.dtb拷贝到TFTP文件夹下。
Uboot设置环境变量
- 设置IP,联通网络。
=> setenv serverip 192.168.0.175
=> setenv ipaddr 192.168.0.111
=> setenv ethaddr 08:00:00:00:22:01
=> setenv gatewayip 192.168.0.1
=> setenv netmask 255.255.255.0
serverip :TFTP服务器IP,即主机(ubuntu)IP。
ipaddr :开发板IP
ethaddr :mac地址
gatewayip :网关
netmask :子网掩码
设置完成后,开发板ping主机,ping通就说明网络通了。
- 设置mmcboot,从网络加载内核和设备树文件。
setenv mmcboot 'echo Booting from mmc ...; run mmcargs; tftp ${loadaddr} zImage;tftp ${fdt_addr} imx6ull-14x14-evk-emmc-hdmi.dtb; bootz ${loadaddr} - ${fdt_addr};'
- 保存环境变量
saveenv
- 文件系统固化到emmc中
重启开发板
重启后即可看到开发板从网络加载内核和设备树文件。
reading zImage
6992344 bytes read in 169 ms (39.5 MiB/s)
Booting from mmc ...
FEC1 Waiting for PHY auto negotiation to complete.... done
Using FEC1 device
TFTP from server 192.168.0.175; our IP address is 192.168.0.111
Filename 'zImage'.
Load address: 0x80800000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######################
309.6 KiB/s
done
Bytes transferred = 6992344 (6ab1d8 hex)
Using FEC1 device
TFTP from server 192.168.0.175; our IP address is 192.168.0.111
Filename 'imx6ull-14x14-evk-emmc-hdmi.dtb'.
Load address: 0x83000000
Loading: ###
600.6 KiB/s
done
Bytes transferred = 40618 (9eaa hex)
Kernel image @ 0x80800000 [ 0x000000 - 0x6ab1d8 ]
## Flattened Device Tree blob at 83000000
Booting using the fdt blob at 0x83000000
Using Device Tree in place at 83000000, end 8300cea9
Starting kernel ...
网络挂载NFS根文件系统
暂未成功