zoukankan      html  css  js  c++  java
  • BoneBlack am335x利用SD卡烧写板卡上的emmc

    参考ti论坛上面的一篇文章:

    链接: https://pan.baidu.com/s/1SLSUbCRrIULJJf_BNI3sEQ 密码: hvem

    自己稍微修改的debrick.sh

    链接: https://pan.baidu.com/s/1pOrEKuhHGa3E0JcU0KUtbw 密码: k9nz

    准备所需工具:

    1、SD卡,4G-Kingston

    2、SD卡读卡器-SSK

    3、PC电脑,电脑预装虚拟机以及Ubuntu系统。

    4、boneblack开发板

    5、预向emmc中烧写的MLO、u-boot.img、uEnv.txt、uImage、am335x-boneblack.dtb ==>  boot_partition.tar.gz

              Self_for_BoneBlack_filesystem ==> rootfs_partition.tar.gz

    其中用到的MLO、u-boot.img、uEnv.txt、uImage、am335x-boneblack.dtb,Self_for_BoneBlack_filesystem都可以自己编译出来。

    6、串口线连接boneblack板卡,利用串口打印信息,方便调试。

     我自己编译好的文件:

    boot_partition.tar.gz制作好的要写入emmc分区1的文件

    链接: https://pan.baidu.com/s/1WU4bxCL1TLuHYuAysLr_ug 密码: ujrj

     rootfs_partition.tar.gz制作好的要写入emmc中的文件系统(在分区2中)

    链接: https://pan.baidu.com/s/1nnbLMIuIslNojVRhXnrNSw 密码: rkkf

     要在SD卡中运行的文件系统:FlasherFS.tar.gz

    链接: https://pan.baidu.com/s/1lMGLR_godXMhQMkC5MzeLg 密码: uqag

    首先进入自己的虚拟机ubuntu系统中打开终端进入存放主要文件的目录:

        cd /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/

        目录下有一下文件:

                   

        运行脚本Download_for_eMMC.sh

        链接: https://pan.baidu.com/s/1cgxBaI_S62MYk2K4fJvjcQ 密码: c3xx

    #!/bin/sh
    
    ##此脚本的目的是将已经编译好的MLO、u-boot.img、uEnv.txt、uImage、am335x-boneblack.dtb等文件压缩后复制到SD卡的文件系统(FlasherFS)中
    ##将要烧写的文件系统(rootfs.partition.tar.gz)也复制到SD卡的文件系统(FlasherFS)中
    ##然后压缩文件系统为FlasherFS.tra.gz
    
    #指定MLO(SPL)的路径
    MLO="/home/zyr/Source_code/u-boot-2016.03/am335x-boneblack/MLO"
    
    #指定u-boot.img的路径
    ubootimg="/home/zyr/Source_code/u-boot-2016.03/am335x-boneblack/u-boot.img"
    
    #指定uEnv.txt的路径
    uEnvtxt="/home/zyr/Source_code/u-boot-2016.03/am335x-boneblack/uEnv.txt"
    
    uEnvtxtemmc="/home/zyr/Source_code/uEnv.txt"
    
    #指定filesystem的路径
    filesystem="/home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/Self-for-Boneblack-filesystem.tar.gz"
    
    #指定Blageboneblackdtb的路径
    Beaglebonedtb="/home/zyr/Source_code/linux-3.14.65/arch/arm/boot/dts/am335x-boneblack.dtb"
    
    #指定uImage的路径
    uImage="/home/zyr/Source_code/linux-3.14.65/arch/arm/boot/uImage"
    
    ##制作烧写emmc的文件系统
    cp -v ${MLO} /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    cp -v ${ubootimg} /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    cp -v ${uImage} /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    cp -v ${uEnvtxtemmc} /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    cp -v ${Beaglebonedtb} /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    sync
    
    ##MLO、u-boot.img、uEnv.txt、uImage、am335x-boneblack.dtb这些文件是要放在emmc中运行的
    tar -cvzf boot_partition.tar.gz MLO u-boot.img uImage uEnv.txt am335x-boneblack.dtb
    sync
    
    rm -f /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/MLO
    rm -f /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/u-boot.img
    rm -f /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/uImage
    rm -f /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/uEnv.txt
    rm -f /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/am335x-boneblack.dtb
    sync
    
    ##制作在emmc中运行的文件系统以及相应的环境变量的设置
    mkdir -p /home/zyr/Source_code/Self_for_BoneBlack_filesystem/opt/backup/uboot/
    cp -v ${MLO} /home/zyr/Source_code/Self_for_BoneBlack_filesystem/opt/backup/uboot/
    cp -v ${ubootimg} /home/zyr/Source_code/Self_for_BoneBlack_filesystem/opt/backup/uboot/
    cp -v ${uEnvtxtemmc} /home/zyr/Source_code/Self_for_BoneBlack_filesystem
    sync
    
    cp -v ${uImage} /home/zyr/Source_code/Self_for_BoneBlack_filesystem/boot/
    cp -v ${uEnvtxtemmc} /home/zyr/Source_code/Self_for_BoneBlack_filesystem/boot/
    mkdir -p /home/zyr/Source_code/Self_for_BoneBlack_filesystem/boot/dtbs/
    cp -v ${Beaglebonedtb} /home/zyr/Source_code/Self_for_BoneBlack_filesystem/boot/dtbs
    sync
    
    ##压缩Self_for_BoneBlack_filesystem(运行在emmc中的文件系统)
    cd /home/zyr/Source_code/Self_for_BoneBlack_filesystem
    tar -cvzf rootfs_partition.tar.gz ./*
    mv rootfs_partition.tar.gz /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    sync
    
    ##将运行在emmc中的系统所需要的boot_partition.tar.gz,rootfs_partition.tar.gz复制到FlasherFS文件系统中
    ##FlasherFS文件系统是运行在SD卡中的里边有烧写emmc的脚本。
    cd /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    cp -v boot_partition.tar.gz /home/zyr/Source_code/FlasherFS/home/root/
    cp -v rootfs_partition.tar.gz /home/zyr/Source_code/FlasherFS/home/root/
    sync
    
    cd /home/zyr/Source_code/FlasherFS
    tar -cvzf FlasherFS.tar.gz ./*
    sync
    
    mv FlasherFS.tar.gz /home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard
    sync
    
    ##tar -cvzf rootfs_partition.tar.gz {filesystem}

          sh Download_for_eMMC.sh

          此脚本的目的:

          1、将MLO、u-boot.img、uEnv.txt、uImage、am335x-boneblack.dtb这些文件压缩成boot_partition.tar.gz

          2、向自制的文件系统中添加MLO、u-boot.img、uEnv.txt、uImage、am335x-boneblack.dtb这些东西,并压缩成 rootfs_partition.tar.gz(在emmc中运行的u- boot、kernel、文件系统)

          3、向要在sd卡中运行的文件系统FlasherFS拷入boot_partition.tar.gz, rootfs_partition.tar.gz并压缩为FlasherFS.tar.gz。

    其次插入SD卡及其读卡器

          在终端中查看SD卡信息:

          

          然后运行Setup-microSD-emmc.sh脚本

          链接: https://pan.baidu.com/s/1Mt3nFT9XB0SJFkSR133Gxw 密码: 9eur

    #!/bin/sh
    
    
    #指定SD卡的路径(lsblk查看SD卡的路径)
    DISK="/dev/sdb"
    
    #指定MLO(SPL)的路径
    MLO="/home/zyr/Source_code/u-boot-2016.03/am335x-boneblack/MLO"
    
    #指定u-boot.img的路径
    ubootimg="/home/zyr/Source_code/u-boot-2016.03/am335x-boneblack/u-boot.img"
    
    #指定uEnv.txt的路径
    uEnvtxt="/home/zyr/Source_code/u-boot-2016.03/am335x-boneblack/uEnv.txt"
    
    #指定filesystem的路径
    filesystem="/home/zyr/Source_code/BeagleBone/BeagleBone-crate-SDcard/FlasherFS.tar.gz"
    
    #指定Blageboneblackdtb的路径
    Beaglebonedtb="/home/zyr/Source_code/linux-3.14.65/arch/arm/boot/dts/am335x-boneblack.dtb"
    
    #指定uImage的路径
    uImage="/home/zyr/Source_code/linux-3.14.65/arch/arm/boot/uImage"
    
    #擦除SD卡
    dd if=/dev/zero of=${DISK} bs=1M count=10
    sync
    
    #烧写MLO,U-boot
    dd if=${MLO} of=${DISK} count=1 seek=1 bs=128K
    sync
    dd if=${ubootimg} of=${DISK} count=3 seek=1 bs=384K
    sync
    #dd if=/home/zyr/MLO of=${DISK} count=1 seek=1 bs=128K
    #dd if=/home/zyr/u-boot.img of=${DISK} count=3 seek=1 bs=384K
    
    #创建分区(Linux系统)
    sfdisk --unit M ${DISK} <<-__EOF__
    4,,L,*
    __EOF__
    
    #格式化分区(格式化为ext4)
    mkfs.ext4 -L rootfs ${DISK}1
    ## Make sure posted writes are cleaned up
    sync
    sync
    echo "Formatting done."
    
    mkdir -p /media/rootfs/
    mount ${DISK}1 /media/rootfs
    
    mkdir -p /media/rootfs/opt/backup/uboot/
    cp -v ${MLO} /media/rootfs/opt/backup/uboot/
    cp -v ${ubootimg} /media/rootfs/opt/backup/uboot/
    cp -v ${uEnvtxt} /media/rootfs/
    
    tar xfvp ${filesystem} -C /media/rootfs
    sync
    sync
    chown root:root /media/rootfs/
    chmod 755 /media/rootfs/
    
    cp -v ${uImage} /media/rootfs/boot/
    echo "This uImage is for BeagleBoneBlack kernel. What different from Am335x_evmsk is where the filesysytem run. "
    echo "Am335x_evmSk's filesysytem is running in sd's part 2."
    echo "BeagleBoneBlack's filesystem is running in Sd's part 1."
    cp -v ${uEnvtxt} /media/rootfs/boot/
    mkdir -p /media/rootfs/boot/dtbs/
    cp -v ${Beaglebonedtb} /media/rootfs/boot/dtbs
    
    sh -c "echo '/dev/mmcblk0p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"
    
    sync
    sync
    umount /media/rootfs

    此脚本的目的是制作用于烧写emmc的SD的启动文件系统。可以以参考:

    http://www.cnblogs.com/BigOBlue/p/7699075.html

    将制作好的SD卡插入BoneBlack开发板SD卡槽就可以对emmc进行擦写了。

    Note:当这些都做完了,有可能emmc只能运行u-boot和kernel,但是到运行文件系统时可能出错。基本原因就是uEnv.txt中环境变量设置不对emmc找不到文件系统所在的位置。(运行在emmc中的uEnv.txt  链接: https://pan.baidu.com/s/1Tdh41t9x76Fk4exTANF4CQ 密码: uttp )

    1、此目录下的uEnv.txt是为在Emmc中运行的系统的环境变量的设置。此uEnv.txt的环境变量的设置与在SD卡中运行的环境变量的是不一样的。不一样的地方是emmc是mmc1,而SD卡是mmc0.
    2、目录下的Self_for_BoneBlack_filesystem文件夹是专门为利用SD卡烧写emmc的文件系统(此文件系统是emmc所用)。
    3、bootargs=console=ttyO0,115200n8 root=/dev/mmcblk0p2 rootwait  当烧写完emmc之后从emmc启动之后u-boot可以启动,当内核启动之后根据打印信息看到emmc配置成了mmcblk0p1,mmcblk0p2。所以将根文件系统放在/dev/mmcblk0p2中。

    Note:虽然在我用的u-boot中并没有发现类似初始化emmc的函数和emmc引脚的配置只有:

    static struct module_pin_mux mmc0_pin_mux_sk_evm[] = {
        {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)},    /* MMC0_DAT3 */
        {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)},    /* MMC0_DAT2 */
        {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)},    /* MMC0_DAT1 */
        {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)},    /* MMC0_DAT0 */
        {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)},    /* MMC0_CLK */
        {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)},    /* MMC0_CMD */
        {OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUP_EN)},    /* MMC0_CD */
        {-1},
    };
    
    static struct module_pin_mux mmc1_pin_mux[] = {
        {OFFSET(gpmc_ad3), (MODE(1) | RXACTIVE | PULLUP_EN)},    /* MMC1_DAT3 */
        {OFFSET(gpmc_ad2), (MODE(1) | RXACTIVE | PULLUP_EN)},    /* MMC1_DAT2 */
        {OFFSET(gpmc_ad1), (MODE(1) | RXACTIVE | PULLUP_EN)},    /* MMC1_DAT1 */
        {OFFSET(gpmc_ad0), (MODE(1) | RXACTIVE | PULLUP_EN)},    /* MMC1_DAT0 */
        {OFFSET(gpmc_csn1), (MODE(2) | RXACTIVE | PULLUP_EN)},    /* MMC1_CLK */
        {OFFSET(gpmc_csn2), (MODE(2) | RXACTIVE | PULLUP_EN)},    /* MMC1_CMD */
        {OFFSET(gpmc_csn0), (MODE(7) | RXACTIVE | PULLUP_EN)},    /* MMC1_WP */
        {OFFSET(gpmc_advn_ale), (MODE(7) | RXACTIVE | PULLUP_EN)},    /* MMC1_CD */
        {-1},
    };

    但是经过查看数据手册的得知,boneblack的开发板中的emmc(MTFC4GLDEA 0M WT)引脚是可以只配置数据脚的DAT0-DAT3的也就是说emmc有两种运行模式就是数据线0-3,模式和0-7模式。所以虽然没看到u-boot对emmc的所有引脚配置但是u-boot还是可是使用emmc的(纯属自己理解,欢迎板砖)。

  • 相关阅读:
    浏览器的跨域请求 与 CORS(跨域资源共享)
    HTML 占位符
    C# 中的 base和this
    推荐一个pdf引擎
    整理wifi相关的知识点
    交叉编译(ISC)DHCP:dhcp-4.3.0b1
    (转载)子网掩码,网关的概念
    海思-VB被占用导致vb无法去初始化
    c++创建文件时重命名同名文件
    iw创建虚拟网卡wlan1,ap_sta共存
  • 原文地址:https://www.cnblogs.com/BigOBlue/p/8513067.html
Copyright © 2011-2022 走看看