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的(純屬自己理解,歡迎板磚)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM