[X]关闭

CH08 QSPI启动并从EMMC运行APP

文档创建者:uisrc
浏览次数:4259
最后更新:2018-06-17
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文件到开机自动启动的路径下。
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中了
执行
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的过程。
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卡入下图。
2、插入TF卡到开发板,模式开关切换到SD模式,串口接通到LINUX,在控制台输入
cd /mnt/workspace/osrc/scripts
open_serial_console.sh
打开串口控制台然后给开发板通电。
在控制台可以看到串口的打印信息,启动完成后输入
ls/dev查看设备,入下图所示,mmcblk0就是我们的TF,其中分区mmcblk0p1就是boot分区,里面有我们的linux系统和qspi_image.bin
636648418049931729126708.jpg
执行以下指令完成烧录到QSPI
# mount /dev/mmcblk0p1 /mnt
# cd /mnt
# ls
# dd if=/mnt/qspi_image.bin of=/dev/mtdblock0
636648418067901889279159.jpg
开发板断电,切换模式开关到QSPI模式,然后通电,可以看到开发板从QSPI正常启动了,并且输出了helloworld

发表评论已发布 2

uisrc

发表于 2018-6-17 14:21:27 | 显示全部楼层

基于最新的ubuntu16虚拟机(VM14)安装VIVADO2017.4进行嵌入式LINUX开发的更新地址。
-------------------------------------------------------------
视频链接教程:
https://pan.baidu.com/s/11HIvHkjSPaEOASq2lcgVdw 密码:goot
-------------------------------------------------------------
CH01为安装的vivado017.4软件的虚拟机,所有板子可以直接下载使用,省去自己安装麻烦链接:https://pan.baidu.com/s/1-jL8W72IPvwmFbVO56PTwA 密码:aqi0
-------------------------------------------------------------
MZ7100链接:
https://pan.baidu.com/s/1GiYCwXr0HVD4bmIB32kE3A 密码:t0xk
MZ7035链接:
https://pan.baidu.com/s/1fk2NO4yWDHloKfG0fuZtkg 密码:bofr
MZ702N链接:
https://pan.baidu.com/s/1Moirq_PJFoUGmaENEstnmw 密码:m8yd
MZ702A链接:
https://pan.baidu.com/s/18bKCoQYTO4UcLzoF8rlEoA 密码:z9cy
MZ701A链接:
https://pan.baidu.com/s/1vxdTRpkzGH0hS_gWElr5HA 密码:azl8
MZ702B链接:
https://pan.baidu.com/s/1X4BDGTpqayO4qInHdL5IGQ 密码:g6xj
MIZ701N-7020链接:
https://pan.baidu.com/s/15ZqdHQcDf_sBcwqHYfRJxg 密码:e1w7
越努力越幸运!加油!

uisrc

发表于 2018-6-17 14:21:52 | 显示全部楼层

视频已经更新
越努力越幸运!加油!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则