目录
注:该方案在本机环境下搭建成功,只是验证了一种可行性,很可能不具有通用性,只是记录一下自己得设置过程。
本机环境:
- win10 wsl Ubuntu 18.04
- wifi 环境 + 一根网线(无路由器)
- 原厂系统(需 uboot 支持网络)的基础上通过网络启动 pc 上准备好的内核和文件系统
1. 设置桥接
这里可能出问题,网络不能识别,我的情况是需要在未连接开发板的情况下设置桥接,然后连接开发板,如果 WLAN 断掉,尝试点击 wifi 图标重新连接,最终效果如上图。
2. 进入 uboot ,尝试 ping 通 pc
由于开发板本身没有 IP 地址,需要在 uboot 中进行设置,由于家里 wifi 都是私网,网段一般默认都是 192.168.1.x,网关 192.168.1.1 ,可以根据情况类似下面进行设置:
setenv ipaddr 192.168.1.50 # 开发板 ip 地址,需要和 pc 在一个网段下,且不能和其他设备冲突
setenv ethaddr 00:04:9f:04:d2:35 # MAC 地址,如果网段下有多个开发板,需要保证每个都不一样
setenv gatewayip 192.168.1.1 # 网关
setenv netmask 255.255.255.0 # 子网掩码
setenv serverip 192.168.1.8 # pc 的 ip 地址,在 windows 命令行用 ifconfig 查看
saveenv # 保存设置
上面是我的配置,设置好后,在 uboot 中用 print
命令可以查看这些配置,同时 ping 通主机的结果如下:
注意,如果 ping 不通,可以尝试将防火墙关闭。
3. 在 ubuntu 下搭建 TFTP 服务器并开启
首先安装 tftp-hpa,tftpd-hpa 和 xinetd;
然后创建在 pc 下创建一个 tftp 文件夹,将内核镜像和设备树放进去(确保有执行权限);
添加配置文件(路径:/etc/xinetd.d/tftp
)如下:
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
sserver_args = -s /mnt/f/Ubuntu/tftp # 自定义文件夹
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
开启 tftp 服务:sudo service tftpd-hpa start
修改/etc/default/tftpd-hpa
文件内容如下:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/mnt/f/Ubuntu/tftp" # 自定义文件夹
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
重启 tftp 服务 sudo service tftpd-hpa restart
。
4. 设置 bootcmd 和 bootargs ,使得通过 tftp 加载内核和设备树
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rwx nfsroot=192.168.1.8:/rootfs ip=192.168.1.50:192.168.1.8:192.168.1.1:255.255.255.0::eth0:off'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 topeet_emmc_4_3.dtb; bootz
80800000 - 83000000'
saveenv
名称根据情况修改,这里报错 Bad Linux ARM zImage magic!
显示是内核出问题,但也可能是设备树出问题。
注:重新烧写系统后需要重新设置 uboot 的各种参数。
5. 搭建 nfs 服务,挂载文件系统(失败)
参照这篇文章 ,是可以搭建出 nfs 服务的(家庭版),企业版,专业版自带有 nfs 服务,但也需要手动开启。
这里失败原因是:使用 busybox 生成的文件系统,其中文件有大量的软链接,在windows下这些文件格式都是不支持的,所以虽然挂载成功,但是共享到板子上并不能执行:
这里注意,如果出现 uboot 中,nfs 不正常,尝试在 henaWin 中设置 nfs 版本为 V2 。
6. 采用 OTG 烧写系统,在板子上搭建 FTP 服务进行板子和 pc 之间的文件传输
原来打算用 tftp 加载内核和设备树,通过 nfs 挂载文件系统,通过上面的尝试,证明行不通,转而采用正点原子教程(【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.3.pdf)附录中提供的方法,在板子上搭建 FTP 服务,通过 FIleZilla 软件,实现板子和 pc 之间文件的传输。
步骤:
- 使用 mfgtool 工具将板子官方的完整系统烧写进板子,用网线连接笔记本,设置好网络,保证板子和 pc 能互相 ping 通。
- 在 wsl 中编译好 vsftpd 和 vsftpd.conf 这两个文件,用 U 盘传给板子
- 在板子上进行后续各种修改和配置的操作,以开发手册为准
注:过程中遇到下面的错误,按照百度到的结果设置仍然不对,最后发现是由于 passwd 文件设置错误
这里红框前面部分从 wsl 中拷贝过来也是需要修改的,不能光注意红框部分。
小结
通过以上步骤,虽然没有能够使用 nfs 挂载文件系统,但也能够在 wsl 环境下,实现板子和 pc 之间方便的文件传输,而且不需要路由器,只要有 wifi 环境就够,还是比较简单好用的。