whilebreak

CH08 QSPI启动并从EMMC运行APP

0
阅读(2271)

版本信息:

版本

REV2018

时间

05/22/2018

XILINX ZYNQ LINUX

基于米联MZ7X系列

电子版自学资料

常州一二三电子科技有限公司

溧阳米联电子科技有限公司

版权所有

米联客学院04QQ群:516869816

米联客学院03QQ群:543731097(半满)

米联客学院02QQ群:86730608(满)

米联客学院01QQ群:34215299(满)

版本

时间

描述

Rev2018

2018-05-22

采用批处理文件,自动化管理,侧重基础和应用

感谢您使用米联客ZYNQ系列开发板,以及配套教程。本教程将对之前编写的《修炼秘籍》部分内容做出改进,并且增加新的课程内容。本教程不仅仅适合用于米联客开发板,而且可以用于其他的ZYNQ开发板。

软件版本:VIVADO2017.4(提供安装好环境的虚拟机)

版权声明:

本手册版权归常州一二三电子科技有限公司/溧阳米联电子科技有限公司所有,并保留一切权利,未经我司书面授权,擅自摘录或者修改本手册部分或者全部内容,我司有权追究其法律责任。

版主大神们都等着大家去提问--电子资源论坛 www.osrc.cn

扫描以下二维码注册论坛:www.osrc.cn

clip_image002

微信公众平台:电子资源论坛

clip_image004
目录

XILINX ZYNQ LINUX............................................................................................................................... 1

基于米联MZ7X系列..................................................................................................................................... 1

CH08 QSPI启动并从EMMC运行APP............................................................................................................. 5

8.1 概述................................................................................................................................................... 5

8.2 TF卡启动系统自动运行EMMC的APP............................................................................................... 5

8.3 make_rootfs.sh..................................................................................................................................... 6

8.4 编译................................................................................................................................................... 6

8.5 测试................................................................................................................................................... 7

8.6 QSPI启动并自动运行EMMC的APP................................................................................................... 7


CH08 QSPI启动并从EMMC运行APP

8.1 概述

在前一节课,我们必须手动挂载TF卡到mnt,然后输入./a.out程序才能启动。而在嵌入式系统里面,我们很多时候需要实现开机启动程序。很多时候我们会把程序固化到FLASH,然后从EMMC启动APP程序。除了MZ701Amini的开发板没有EMMC其他所有开发板的核心版都带了EMMC。

8.2 TF卡启动系统自动运行EMMC的APP

修改在第七节课用到的开机自动格式化EMMC的脚本,修改后的脚本源码如下

case "$1" in

start)

echo "开始挂载EMMC,创建路径/mnt/emmc"

mkdir -p /mnt/emmc

mount -t ext2 /dev/mmcblk1p1 /mnt/emmc

ret=$?

if [ $ret -ne 0 ]; then

echo "EMMC正在格式化..."

echo -e "n \n p \n 1 \n \n \n w \n" | fdisk /dev/mmcblk1

mkfs.ext2 /dev/mmcblk1p1

mount -t ext2 /dev/mmcblk1p1 /mnt/emmc

fi

echo "EMMC挂载成功!"

if [ -f "/mnt/emmc/a.out" ]; then

cd /mnt/emmc

./a.out

else

echo "开始挂载TF,创建路径tmp"

mkdir -p /tmp

mount /dev/mmcblk0p1 /tmp

if [ -f "/tmp/a.out" ]; then

cp /tmp/a.out /mnt/emmc/a.out

echo "程序从TF卡复制到EMMC成功"

cd /mnt/emmc

./a.out

fi

fi

;;

stop)

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

exit $?

在开机后,首先会尝试挂载到 /mnt/emmc路径,如果挂载不成功,就格式化EMMC。然后格式化。之后判断EMMC里面是否有a.out的应用程序。如果有就运行a.out否则就会挂载TF卡并且从TF卡复制a.out程序到EMMC,然后再在EMMC里面启动a.out.

8.3 make_rootfs.sh

修改make_rootfs.sh批处理命令(CH06已经做好)

通过sudo cp ${script_dir}/S60mount_emmc.sh /${ZN_ROOTFS_MOUNT_POINT}/etc/init.d/S60mount_emmc.sh 复制S60mount_emmc.sh文件到开机自动启动的路径下。

clip_image006

8.4 编译

之后执行以下指令

cd /mnt/workspace/osrc/scripts

source settings64.sh

make_rootfs.sh

执行完成后查看ramdisk文件系统是否有S60mount_emmc.sh文件了

执行以下指令

mount_roots.sh

查看路径

ls /mnt/workspace/osrc/boards/mz7x/mylinux/output/rootfs/etc/init.d

可以看到S60mount_emmc.sh已经存在于ramdisk中了

clip_image008

执行

umount_rootfs.sh

然后执行

make_sdcard_image.sh

插入SD卡后执行

deploy_sdcard_image.sh

8.5 测试

拔掉TF卡插入到开发板,开发板以SD启动模式,接通USB串口,打开putty软件查看串口输出,通电。可以看到EMMC挂载成功了,并且运行了hello,world程序。由于笔者已经做过一遍,所以下面的打印结果直接从EMMC挂载后,输出了。如果你是第一次做这个实验,还会有更多关于EMMC格式化,复制a.out程序到emmc的过程。

clip_image010

8.6 QSPI启动并自动运行EMMC的APP

从QSPI启动LINUX然后运行EMMC的应用程序,是很多嵌入式设备的最佳方案,因为EMMC是焊接在核心板上的,比插卡的TF卡更加可靠。前面的内容已经制作成功了,所以现在读者只要执行以下几条简单的指令把嵌入式LINUX烧录到FLASH就行了。

cfg_uboot.sh
make_uboot.sh
make_qspi_image.sh

1、 复制qspi_image.bin到TF卡入下图。

clip_image012

2、插入TF卡到开发板,模式开关切换到SD模式,串口接通到LINUX,在控制台输入
cd /mnt/workspace/osrc/scripts
open_serial_console.sh
打开串口控制台然后给开发板通电。
在控制台可以看到串口的打印信息,启动完成后输入
ls/dev查看设备,入下图所示,mmcblk0就是我们的TF,其中分区mmcblk0p1就是boot分区,里面有我们的linux系统和qspi_image.bin
clip_image014
执行以下指令完成烧录到QSPI
# mount /dev/mmcblk0p1 /mnt
# cd /mnt
# ls
# dd if=/mnt/qspi_image.bin of=/dev/mtdblock0
clip_image016
开发板断电,切换模式开关到QSPI模式,然后通电,可以看到开发板从QSPI正常启动了,并且输出了helloworld

clip_image017