硬件平台:迅为iTOP-i.MX6ULL开发板
使用网络方式调试 Linux 非常方便,下面开始介绍用 tftp 下载 Linux 内核镜像,设备树,然后使用 NFS
网络挂载根文件系统,成功后可以在 PC 机上调试开发板。
文档中使用的开发环境:
Ubuntu16.04 LTS
迅为 i.MX6ULL 终结者开发板
开发板 uboot 使用迅为搭建好的支持网络的版本,Net 为 FEC1,如图 79.1:
图 79.1
根文件系统使用的是 终结者 ULL 光盘资料i.MX6ULL 终结者光盘资料 8_开发板系统镜像 3_文件系
统镜像 2_Buildroot 文件系统 ootfs.tar.bz2。
此外,开发板和 Ubuntu 要在在同一网关,本文档 Ubuntu 的 IP 地址为 192.168.1.12,开发板的 IP 地址
为 192.168.120,关于网络配置不再赘述,Ubuntu 设置如下:
79.1 配置开发板网络
网线连接口如图 79.1.1:
图 79.1.1
进入命令行后,输入“?”或 “help”查看 uboot 命令,使用 printenv 查看环境变量;我们在终端输入:
setenv serverip 192.168.1.12
服务器的 IP 地址(Ubuntu)
setenv gatewayip 192.168.1.1
网关
setenv
ipaddr 192.168.1.120
开发板的 ip 地址
setenv
netmask 255.255.255.0
子网掩码
setenv ethaddr 42:03:07:3B:15:5F
saveenv
保存环境变量
reset
重启
完成后,输入“ printenv serverip ipaddr gatewayip netmask ”,显示如图 79.1.2:
图 79.1.2
测试与服务器的网络是否畅通,输入“ ping 192.168.1.12 ”,显示如图 79.1.3:
图 79.1.3
出现这样的结果表示网络已通,可以进行下一步了。
79.2 tftp 服务搭建
tftp 是一个简单的基于 udp 的文本文件传输协议,我们用它将内核镜像和设备树下载到开发板内存中,
并指定地址,只在 Ubuntu 上配置好 tftp 服务器即可。
1. 在家目录下创建文件夹:mkdir tftpboot ,
2. 修改文件夹权限:chmod 777 tftpboot
3. 下载:sudo apt-get install tftp-hpa tftpd-hpa
4. 修改配置文件:sudo vim /etc/default/tftpd-hpa ,如图 79.2.1
图 79.2.1
5. 启动:sudo service tftpd-hpa restart
6. 将 Linux 内核镜像 zImage,设备树拷贝到 tftpboot 文件夹下,
图 79.2.2
7. 测试:在开发板输入“ tftp 0x80000000 zImage ”,显示如图 79.2.3:
图 79.2.3
出现上图所示的结果说明 tftp 搭建成功。
79.3 nfs 服务搭建
我们将开发板的文件系统放在 PC 端(Ubuntu),开发板的文件系统类型设置为 nfs,就可以挂载文件
系统了。具体步骤(在 Ubuntu 上操作):
1. 安装 nfs 服务:sudo apt-get install nfs-kernel-server
2. 创建文件夹,存放开发板的根文件系统:mkdir nfs_rootfs ,chmod 777 nfs_rootfs 。
3. 更改配置文件:sudo vi /etc/exports ,文件末尾添加:
/home/ubuntu/nfs_rootfs *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
前面路径修改为自己的路径,* 含义为所有的用户,*和后边的左括号"("之间不要出现空格。修改为图 79.3.1
所示:
图 79.3.1
rw :读写访问
sync :所有数据在请求时写入共享
async :NFS 在写入数据前可以相应请求
secure :NFS 通过 1024 以下的安全 TCP/IP 端口发送
insecure :NFS 通过 1024 以上的端口发送
wdelay :如果多个用户要写入 NFS 目录,则归组写入(默认)
no_wdelay :如果多个用户要写入 NFS 目录,则立即写入,当使用 async 时,无需此设置。
no_hide 共享 NFS 目录的子目录
subtree_check 如果共享/usr/bin 之类的子目录时,强制 NFS 检查父目录的权限
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录。
no_all_squash 保留共享文件的 UID 和 GID
root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限 no_root_squas root 用户具有根目录
的完全管理访问权限
4. 重启 nfs 服务
sudo service nfs-kernel-server restart
sudo /etc/init.d/nfs-kernel-server restart ,如图 79.3.2:
图 79.3.2
出现上图所示说明搭建成功。
5.
将文件系统压缩包解压后的文件放到该目录下。
图 79.3.3
79.4 设置自启动参数
bootcmd 和 bootagrs 是两个很重要的环境变量,bootcmd 保存着 uboot 启动命令,bootargs 保存着一些
参数,这些参数会传递给 Linux 内核。
设置自启动模式命令(启动内核设备树),我们把 PC 端准备好的内核和设备树下载到开发板的内存,不用
再往 eMMC 或 NAND 中烧写调试起来非常方便:
setenv bootcmd 'tftp 80800000 zImage; tftp 83800000 imx6ul_topeet_nand.dtb; bootz 80800000 -
83800000’
保存环境变量 saveenv,
zImage 为内核镜像,下载到首地址为 0x80800000 的内存空间;
topeet_emmc_1024x600.dtb 为设备树,根据实际屏幕型号烧写设备树
bootz 根据内核镜像地址和设备树地址加载启动,注意“ - ”左右有空格
注意:目前完全支持 eMMC 版本,可正常开机自启动,NAND 开发板如果使用 tftp 传输内核和设备树
每次开机都要重新输入此命令。
设置网络启动参数(启动文件系统):
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.12:/home/ubuntu/nfs_rootfs
ip=192.168.1.120:192.168.1.12:192.168.1.1:255.255.255.0::eth0:off’
nfsroot 后的参数为 PC 端的 nfs 文件夹路径,读者根据自己需要配置,格式为:
nfsroot=NFS 服务器 IP(Ubuntu 的 IP):文件系统的绝对路径。
ip 后的参数为开发板网络信息,填写格式:
ip=开发板 IP:服务器 IP:网关,子网掩码::eth0:off
注意空格,字母和标点符号都是英文。
图 79.4.1
保存:saveenv
输入“boot”启动,自动进入网络系统。
打印出下载内核设备树信息:
图 79.4.2
启动文件系统会显示出挂载 NFS 文件系统信息:
图 79.4.3
成功后输入用户名 root ,密码 topeet ,进入系统,在 Ubuntu 的 nfs_rootfs 创建文件 sss,开发板
上也会有相应的文件如图 79.4.4:
图 79.4.4
图 79.4.5
可能出现的错误:
图 79.4.6
出现这种错就是文件系统没挂载成功,最大可能是 netargs 参数输错了,检查 bootargs 命令,检查 Ubuntu
配置文件,重启 NFS。
如果开发板连得 PC 机可以在 windows 上找到虚拟机用的网卡,设置为为百兆全双工。
图 79.4.7
右击以太网图标,点击配置,找到 高级下的连接速度和双工模式,选择 100Mbps 全双工。
图 79.4.8
使用 prientenv 查看环境变量,如图 79.4.9:
图 79.4.9
如果环境变量不知道哪错了可以重置环境变量,重置环境变量命令:
env default -a