从网络启动 linux 系统的唯一目的就是为了调试!不管是为了调试 linux 系统还是 linux 下的驱动。每次修改 linux 系统文件或者 linux 下的某个驱动以后都要将其烧写到 EMMC 中去测试,这样太麻烦了。我们可以设置 linux 从网络启动,也就是将 linux 镜像文件和根文件系统都放到 Ubuntu 下某个指定的文件夹中,这样每次重新编译 linux 内核或者某个 linux 驱动以后只需要使用 cp 命令将其拷贝到这个指定的文件夹中即可,这样就不用需要频繁的烧写 EMMC,这样就加快了开发速度。
| 配置网络
uboot是支持网络的,在移植uboot的时候一般都要调通网络功能,因为在移植linuxkernel的时候需要使用到uboot的网络功能做调试。uboot支持大量的网络相关命令,比如 dhcp、ping、nfs 和 tftpboot。
(启动时打印信息)
(网络相关的变量)
1、连接网线,网线一定要接在左边那个网口,uboot的FEC1就是这个网口;
2、 配置uboot的网络,把下面命令全部输入uboot面板中;
setenv ipaddr 192.168.2.50 //开发板 IP 地址 setenv ethaddr b8:ae:1d:01:00:00 //开发板网卡 MAC 地址 setenv gatewayip 192.168.2.1 //开发板默认网关 setenv netmask 255.255.255.0 //开发板子网掩码 setenv serverip 192.168.2.55 /服务器地址,也就是 Ubuntu 地址 saveenv //保存环境变量
上面的配置不一定适合所有,请根据实际网络进行配置:
Windows电脑的cmd中的ipconfig指令来查看;
linux的电脑使用ifconfig指令来查看;
注意:虚拟机中的ubuntu要使用【桥接】,然后在【虚拟网络编辑器】中添加桥接的网络,不懂就百度一下,一定要保证物理机和虚拟机的网络在同一个网段,并且能ping通,若ping不通物理机,可以关闭【防火墙】再尝试;
3、测试是否ping通
| 搭建TFTP服务
tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器,需要安装 tftp-hpa 和 tftpd-hpa,命令如下:
sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd
TFTP也需要一个文件夹来存放文件,在用户目录下新建一个目录,示例命令如下:
// 创建文件夹 mkdir /home/noah/linux/tftpboot // 赋予权限 chmod 777 /home/noah/linux/tftpboot
最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行创建,然后在里面输入如下内容:
server tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /home/noah/linux/tftpboot/ disable = no per_source = 11 cps = 100 2 flags = IPv4 }
配置完后启动tftp服务,命令如下:
sudo service tftpd-hpa start
打开/etc/default/tftpd-hpa文件,将其修改为如下所示内容:
# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/home/noah/linux/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="-l -c -s"TFTP_DIRECTORY 就是上面创建的 tftp 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。 最后输入如下命令, 重启 tftp 服务器:
sudo service tftpd-hpa restarttftp 服务器已经搭建好了,接下来就是使用了。 | 测试验证 将 zImage 镜像文件拷贝到 tftpboot 文件夹中,并且给予 zImage 相应的权限,命令如下:
chmod 777 zImage
uboot串口交互指令中的「tftp命令格式」如下:
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
loadAddress:文件在DRAM中的存放地址;
[[hostIPaddr:]bootfilename]:要从Ubuntu中下载的文件;
注意:tftp传输文件,不需要输入文件在Ubuntu中的完整路径,只需要输入文件名即可。
比如我们现在将 tftpboot 文件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处,命令如下:
tftp 80800000 zImage
| 启动Linux
1、设置环境变量,命令如下:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw' setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-evk-emmc.dtb; bootz 80800000 - 83000000' saveenv
2、通过tftp将zImage和设备树下载到板子的RAM中,命令如下:
tftp 80800000 zImage tftp 83000000 imx6ull-14x14-evk-emmc.dtb
使用到的文件有「野火提供的yocto的zImage和dtb文件」,可以在野火公开文件包中找到;
3、启动内核,命令如下:
bootz 80800000 - 83000000
4、启动成功
至此,uboot的移植基本完成,可以启动Linux内核。启动内核之后,uboot的使命就完成了。
全部0条评论
快来发表一下你的评论吧 !