zoukankan      html  css  js  c++  java
  • 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 p 1 w " | 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
     
    执行以下指令完成烧录到QSPI
    # mount /dev/mmcblk0p1 /mnt
    # cd /mnt
    # ls
    # dd if=/mnt/qspi_image.bin of=/dev/mtdblock0

     
    开发板断电,切换模式开关到QSPI模式,然后通电,可以看到开发板从QSPI正常启动了
    ,并且输出了helloworld

     

  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/milinker/p/9192807.html
Copyright © 2011-2022 走看看