基于petalinux对flash的分区

首先我们看一下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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容