首先我们看一下uboot启动的时候打印的信息见下图:红线部分表示flash总共有32M,那么我们在device-tree中对flash
分区时就不能超过32M,否则就会出现下图这种类似的错误:分区没有被更新!
这种情况一般是flash的分区不正确或者该分区小于实际文件的大小导致无法加载。
接下来以我做的实例来为大家讲解:
本实例需要将四个文件固化到flash中:BOOT.BIN(5 M),image.ub(9.9M),rootfs.tar.gz(5.8M),system.dtb(20kb)。这四个文件的总共大小不能超过32M,否则就不能将文件固化到flash中,分区要比实际文件稍微大一 点,这样避免不必要的错误。下图则是本实例对flash的分区:
其中我还分配了一个bootenv分区,用来加载环境变量使用,暂时用不到就不做讲解。从上图可以看出所分区间比实际文件都要 大,但总共的长度不会超过32M,特别说明一下分区“spare”,这个分区是对flash剩下的储存区间的一个命名,这样确保flash已经被全部正确分区。
注意:首地址不能出错,否则也是徒劳无功。
关于设备树的规则写法讲解请点击链接:https://elinux.org/Device_Tree_Usage#Notes (转载网址)
前面提及到的以太网MAC adress,设备树里面需要写出来如下图:
dtsi文件的路径:<project_root-path>/components/plnx_workspace/device-tree-generation 下 system-conf.dtsi
这个文件是系统自动生成的;当你使用命令petalinux-config在弹出的对话框中选择“-*- Subsystem AUTO Hardware Settings ---> ”,在选择“Flash Settings ---> ”,出现的对话框根据你的分区情况进行设置分区名字,分区大小(0x****)十六进制格式。如下图:
----------------------------------------------------------参考--------------------------------------------------------------
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启动。如下图视:
所有选项配置完成后执行Save and Exit ,在工程路径:
<project_root-path>/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的下载速率与分区的正确性有关,烧写完成重新给开发板上电,串口打印如下信息:
如果flash中已经有了镜像文件,在“Hit any key to stop autoboot: 0”倒计时完后系统将会自启动,如果按回车则进入uboot界面;我们在uboot界面使用命令“print”查看我们的所有环境变量信息,内容如下图:
注意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分区,串口打印信息如下,则表示成功,注意红线勾画信息:
如果出现如下图打印的信息则表示没有成功,还需要进行修改:
当我们把四个文件都固化到flash中对应的分区后,给板子重新上电,固化到flash中的文件掉电后不会丢失,DDR中的文件掉电就会丢失,重启观察串口打印信息,在“Hit any key to stop autoboot: 0”执行完后系统自动启动,打印出启动过程信息如下图(省略图):
在过程中会打印出device-tree中对flash的分区信息,如下:
进入linux系统的登录名和密码都是“root”。
————————————————
版权声明:本文为CSDN博主「Challenge_and_smiles」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Challenge_and_smiles/article/details/79309010