imx6ull制作SD启动卡

imx6ull有多种启动方式,比如USB(用mfgtool烧录时),nor flash, nand flash, EMMC, SD卡。其中通过SD卡启动可以解决一些问题,比如我们的板子因为文件系统损坏了而无法正常启动时,可以SD启动来修复;或者通过SD卡来给板子上的nand flash或EMMC烧录系统,后面将会介绍到。

                        imx6ull制作SD启动卡   

相对于nand flash和EMMC而言,制作SD启动卡的关键是修改uboot,而zImage、dtb和rootfs是不需要更改的,因此,下面只介绍uboot的制作。

1、确定内存的大小,假设这里为512M,执行make xxx_defconfig

    make mx6ull_14x14_evk_emmc_512M_defconfig  

2、修改include/configs/mx6ullevk.h

    设置内存值为512M

attachments-2020-04-S35YOHTq5e96d1888995d.png

设置SD卡为启动设备 mmc 0

attachments-2020-04-HZLVQ6vj5e96d1e74c84a.png

设置内核所在分区为mmc 0:1

attachments-2020-04-8Jeqzhdu5e96d229168f6.png

修改CONFIG_BOOTCOMMAND的值

attachments-2020-04-0WqTNrQO5e96d33aa85f1.png

跟一下findfdt,可以看到它将dtb文件的名字设置为imx6ull-14x14-evk.dtb,所以后面我们将dtb文件拷贝到SD卡的时候,也要是这个名字

attachments-2020-04-JNhSBi4j5e96d3c289a4e.png

接着跟一下loadbootscript,可以看到它将script这个文件加载到内存并执行,我们不需要这样做,所以不要放script这个文件即可

attachments-2020-04-hPKgZ8Hq5e96d4787bbaa.png

接着跟一下loadimage,可以看到它将内核加载到内存中,内核的名字为${image},后面我们的内核文件也要叫这个名字

attachments-2020-04-eFsQYDN05e96d4e4c781e.png

接着跟一下mmcboot,可以看到执行了mmcargs,将console,,root等环境变量赋值了,然后加载dtb文件,最后跳转到load_addr(这个地址刚刚已经加载了内核),启动内核

attachments-2020-04-RQUw3Ua35e96d61a00ea2.pngattachments-2020-04-fm0CXVzb5e96d546052a4.png3、修改board/freescale/common/mmc.c

attachments-2020-04-NS4Th2Xk5e96f1cc771d9.png

4、编译uboot,获得u-boot.imx,为了方便辨认,将其名字改为u-boot-imx6ull14x14evk.imx-sd,加上dtb、内核和文件系统,我们有了以下四个文件,作为制作SD启动卡的材料

    u-boot-imx6ull14x14evk.imx-sd

    imx6ull-14x14-evk.dtb

    zImage

    rootfs.tar

5、将上面4个文件拷贝到ubuntu(确保可以执行sudo)下,把uboot、dtb和zImage放在boot目录,把rootfs.tar放在filesystem目录下,然后再创建名为 mk_sdcard_boot_for_emmc.sh(也可以从附件中拷贝)的文件

attachments-2020-04-UvzR2pUk5e96da0523145.png

mk_sdcard_boot_for_emmc.sh的内容为

#!/bin/sh
FAT_SIZE=500M
if [ $# -gt 0 ]; then
        if [ $# -gt 1 ]; then
                echo "Incorrect number of parameters"
                echo "Usage:"
                echo "if the sdcard mounted,need umount this sdcard."
                echo "sudo ./mk_sdcard_boot_for_emmc.sh /dev/sd[a-z] or sudo bash mk_sdcard_boot_for_emmc.sh /dev/sd[a-z]"
                exit 1
        fi
else
        echo "Usage:"
        echo "if the sdcard mounted,need umount this sdcard."
        echo "sudo ./mk_sdcard_boot_for_emmc.sh /dev/sd[a-z] or sudo bash mk_sdcard_boot_for_emmc.sh /dev/sd[a-z]"
        exit 2
fi
mksdcard() {
# partition size in MB
BOOT_ROM_SIZE=10
# wait for the SD device node ready
while [ ! -e $1 ]
do
sleep 1
echo “wait for $1 appear”
done
# call sfdisk to create partition table
# destroy the partition table
node=$1
sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,$FAT_SIZE,0c
$FAT_SIZE,,83
EOF
}
check_exit() {
    result=$?
    if [ $result != 0 ]; then
        echo "#### $1 $2 $3 fail: $result ####"
        exit $result
    fi
}
if [ -b $1 ]; then
echo ""
echo "Attention:"
echo "The storage contents will be deleted permanently!!!"
#read -t 20 -p "Are you sure you want to continue:$1?(y/n)" yes
$echo $yes
yes="y"
if [ "$yes" = "y" ]; then
rm fat -Rf
rm linux -Rf
mksdcard $1
check_exit sfdisk $1
fat_node=${1}1
linux_node=${1}2
echo linux path:$linux_node
dd if=/dev/zero of=$1 bs=1k seek=768 conv=fsync count=8
dd if=./boot/u-boot-imx6ull14x14evk.imx-sd of=$1 bs=1k seek=1 conv=fsync
check_exit write uboot
mkfs.vfat $fat_node
check_exit mkfs.vfat $fat_node
mkdir -p fat
mount -t vfat $fat_node fat
check_exit mount $fat_node
cp ./boot/zImage fat
check_exit cp zImage
cp ./boot/imx6ull-14x14-evk.dtb fat
check_exit cp imx6ull-14x14-evk.dtb
umount fat
check_exit umount fat
rm fat -Rf
mkfs.ext3 -F -j $linux_node
check_exit mkfs.ext3 $linux_node
mkdir -p linux
mount -t ext3 $linux_node linux
check_exit mount $linux_node
tar -xvf ./filesystem/rootfs.tar -C linux
check_exit tar rootfs.tar
umount linux
check_exit umount linux
rm linux -Rf
echo Done...
fi
else
echo Not found device node:$1
exit 3
fidd if=/dev/zero of=${node} bs=1024 count=1
echo fat path:$fat_node


6、将SD卡接入到电脑中,并找到它的设备节点,比如/dev/sdb、/dev/sdc等,这里假设为/dev/sdb,然后执行

    sudo ./mk_sdcard_boot_for_emmc.sh /dev/sdb

attachments-2020-04-SNH6BMNR5e96dbf624a78.png

7、等待约2分钟后,启动卡制作完成,将启动卡取下并放到板子上,设置板子从SD卡启动,可以看到它从SD卡启动的信息

attachments-2020-04-E4JfXAcD5e96dcbaa34a9.png

attachments-2020-04-MmdPv1MK5e96dd6917225.png


环境变量及制作脚本.zip


  • 发表于 2020-04-15 18:18
  • 阅读 ( 1155 )
  • 分类:i.MX6ULL

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
ronnie
ronnie

11 篇文章

作家榜 »

  1. BBelephant 13 文章
  2. ronnie 11 文章
  3. FU 9 文章
  4. toca 4 文章
  5. 大飞 3 文章
  6. Vivek 3 文章
  7. jack-fang 2 文章
  8. Bin 1 文章