从网络启动linux系统如何做调试

描述

从网络启动 linux 系统的唯一目的就是为了调试!不管是为了调试 linux 系统还是 linux 下的驱动。每次修改 linux 系统文件或者 linux 下的某个驱动以后都要将其烧写到 EMMC 中去测试,这样太麻烦了。我们可以设置 linux 从网络启动,也就是将 linux 镜像文件和根文件系统都放到 Ubuntu 下某个指定的文件夹中,这样每次重新编译 linux 内核或者某个 linux 驱动以后只需要使用 cp 命令将其拷贝到这个指定的文件夹中即可,这样就不用需要频繁的烧写 EMMC,这样就加快了开发速度。

| 配置网络

uboot是支持网络的,在移植uboot的时候一般都要调通网络功能,因为在移植linuxkernel的时候需要使用到uboot的网络功能做调试。uboot支持大量的网络相关命令,比如 dhcp、ping、nfs 和 tftpboot。

Linux系统

(启动时打印信息)

Linux系统

(网络相关的变量)

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通

Linux系统

| 搭建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
}

 

Linux系统

配置完后启动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 restart
  tftp 服务器已经搭建好了,接下来就是使用了。   | 测试验证 将 zImage 镜像文件拷贝到 tftpboot 文件夹中,并且给予 zImage 相应的权限,命令如下:
chmod 777 zImage
 

 

Linux系统

    uboot串口交互指令中的「tftp命令格式」如下:

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
 

 

loadAddress:文件在DRAM中的存放地址;

[[hostIPaddr:]bootfilename]:要从Ubuntu中下载的文件;

注意:tftp传输文件,不需要输入文件在Ubuntu中的完整路径,只需要输入文件名即可。

比如我们现在将 tftpboot 文件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处,命令如下:

 

tftp 80800000 zImage
 

 

Linux系统

    | 启动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

 

Linux系统

4、启动成功

Linux系统

至此,uboot的移植基本完成,可以启动Linux内核。启动内核之后,uboot的使命就完成了。  

      审核编辑:彭静
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分