device-tree中对spi-flash的分区

    Notice:本文主要分析在device-tree中对flash的分区,过程中会提及到其它问题,并且有解决办法。

问题一:ethernet@e000b000 Waiting for PHY auto negotiation to complete......... TIMEOUT !

             问题描述的是“等待PHY自动协商完成.........超时!”

Solution:1、在vivado工程里面双击zynq IP核,在弹出的窗口左边选择Periheral I/O Pins,此时右边会出现管脚分配方

格表,  选择Ethernet0或者Ethernet1,这里根据实际开发板使用的网口端口号确定,默认使用Ethernet0。如下图:

      device-tree中对spi-flash的分区_第1张图片

              2、在petalinux工程中使用命令“petalinux-config”进行配置,在弹出的界面中选择“Subsystem AUTO Hardware Settings ”,在选择“Ethernet Settings  --->  ”,接着选择“Primary Ethernet (ps7_ethernet_0)  --->”最后 选 择“ps7_ethernet_0 ”,Save and Exit回到上一级,设置“ (00:0a:35:00:1e:53) Ethernet MAC address”,这个地址在设备树中需要,一次见下图:

      device-tree中对spi-flash的分区_第2张图片

      device-tree中对spi-flash的分区_第3张图片

      device-tree中对spi-flash的分区_第4张图片

              3、最后检查网线是否连接上服务主机,是否连接好,可以使用命令“ping  ”查看联通状态,如果连接正常则出现下图状态,alive表示在线状态。

                                                                    


问题二:对flash的分区。

        首先我们看一下uboot启动的时候打印的信息见下图:红线部分表示flash总共有32M,那么我们在device-tree中对flash 

      device-tree中对spi-flash的分区_第5张图片

分区时就不能超过32M,否则就会出现下图这种类似的错误:分区没有被更新!

      device-tree中对spi-flash的分区_第6张图片

这种情况一般是flash的分区不正确或者该分区小于实际文件的大小导致无法加载。

接下来以我做的实例来为大家讲解:

本实例需要将四个文件固化到flash中:BOOT.BIN(5 M),image.ub(9.9M),rootfs.tar.gz(5.8M),system.dtb(20kb)。这四个文件的总共大小不能超过32M,否则就不能将文件固化到flash中,分区要比实际文件稍微大一  点,这样避免不必要的错误。下图则是本实例对flash的分区:

      device-tree中对spi-flash的分区_第7张图片

其中我还分配了一个bootenv分区,用来加载环境变量使用,暂时用不到就不做讲解。从上图可以看出所分区间比实际文件都要 大,但总共的长度不会超过32M,特别说明一下分区“spare”,这个分区是对flash剩下的储存区间的一个命名,这样确保flash已经被全部正确分区。

注意:首地址不能出错,否则也是徒劳无功。

          关于设备树的规则写法讲解请点击链接:https://elinux.org/Device_Tree_Usage#Notes (转载网址)

前面提及到的以太网MAC adress,设备树里面需要写出来如下图:

      

dtsi文件的路径:/components/plnx_workspace/device-tree-generation 下 system-conf.dtsi

这个文件是系统自动生成的;当你使用命令petalinux-config在弹出的对话框中选择“-*- Subsystem AUTO Hardware Settings  ---> ”,在选择“Flash Settings  ---> ”,出现的对话框根据你的分区情况进行设置分区名字,分区大小(0x****)十六进制格式。如下图:

      device-tree中对spi-flash的分区_第8张图片

----------------------------------------------------------参考--------------------------------------------------------------

1M  = 1024 Kb
1Kb = 1024 B(字节)
1MB = 1048576 B(字节)
一个汉字占2个字节
0x20000000  512M
0x10000000  256M
0x01000000  16M

0x00100000  1M

----------------------------------------------------------------------------------------------------------------------------------

设置好Save and Exit 返回上一级,如下图,选择“  [*]   Advanced bootable images storage Settings  --->  ”设置启动位置,所有的文件都选择“ (X) primary flash ”,从flash启动。如下图视:

      device-tree中对spi-flash的分区_第9张图片

      device-tree中对spi-flash的分区_第10张图片

      device-tree中对spi-flash的分区_第11张图片

所有选项配置完成后执行Save   and   Exit ,在工程路径:

/project-spec/meta-user/recipes-dt/device-tree/files  下的system-top.dts文件中一定要包含 system-conf.dtsi文件,你可更改该文件的名称,比如我修改成:zynq_9361.dtsi,那么在system-tpo.dts文件里添加如下一句命令: /include/ "zynq_ad9361.dtsi" 就可以。接下来执行其他命令,配置其它驱动,等等。

提示:BOOT.BIN文件是使用petalinux-package 命令打包的文件,它包含三个文件:zynq_fsbl.elf、system_top.bit、

u-boot.elf,文件名可能与你的不一样,以后缀为主。

        接下来先用JTAG将BOOT.BIN   文件烧写到开发板中,JTAG的下载速率与分区的正确性有关,烧写完成重新给开发板上电,串口打印如下信息:

       device-tree中对spi-flash的分区_第12张图片

如果flash中已经有了镜像文件,在“Hit any key to stop autoboot:  0”倒计时完后系统将会自启动,如果按回车则进入uboot界面;我们在uboot界面使用命令“print”查看我们的所有环境变量信息,内容如下图:

      device-tree中对spi-flash的分区_第13张图片 

      device-tree中对spi-flash的分区_第14张图片

注意ipaddr 是开发板ip地址,serverip是服务主机地址,一定要确保ip地址到网关除都是一样的(192.128.2.xxx)。可以使用命令“ping serverip”查看是否联通。如果以太网连接正常就可以执行命令将文件:BOOT.BIN(5 M),image.ub(9.9M),rootfs.tar.gz(5.8M),system.dtb(20kb)烧写到flashl里面对应的分区了。这里执行命令“run uddate_boot”将BOOT.BIN文件固化到flash的boot分区,串口打印信息如下,则表示成功,注意红线勾画信息:

       device-tree中对spi-flash的分区_第15张图片

如果出现如下图打印的信息则表示没有成功,还需要进行修改:

     device-tree中对spi-flash的分区_第16张图片

当我们把四个文件都固化到flash中对应的分区后,给板子重新上电,固化到flash中的文件掉电后不会丢失,DDR中的文件掉电就会丢失,重启观察串口打印信息,在“Hit any key to stop autoboot:  0”执行完后系统自动启动,打印出启动过程信息如下图(省略图):

       device-tree中对spi-flash的分区_第17张图片

在过程中会打印出device-tree中对flash的分区信息,如下:

      device-tree中对spi-flash的分区_第18张图片

进入linux系统的登录名和密码都是“root”。

        flash的分区大致如此,如果有不同建议,希望读者留言。转载请标明文章出处!


你可能感兴趣的:(petalinux工程创建)