嵌入式爱好者

emmc启动及操作(补充mx6)

2018-1-2 14:13| 发布者: 冰斩Resona| 查看: 1902| 评论: 0|来自: 自创

类目: I.MX6系列产品  >  Linux     文档编号: 154


mx6上使用了Ramdisk的烧写启动方式

 使用制卡工具制作SD烧写卡之后,有两个分区

 ├─system (烧写进emmc的镜像)
 │ imx6ul-14x14-evk.dtb
 │ imx6ul-14x14-evk-4.3-r.dtb
 │ imx6ul-14x14-evk-5.6-r.dtb
 │ imx6ul-14x14-evk-7.dtb
 │ imx6ul-14x14-evk-8-r.dtb
 │ imx6ul-14x14-evk-10.4-r.dtb
 │ u-boot.imx
 │ zImage
 │ rootfs.tar.bz2
 │ logo-8.bmp
 │ logo-5.6.bmp
 │ logo-4.3.bmp
 │ logo-7.bmp
 └─bin(该文件夹内容的作用是将system文件夹的内容烧写到emmc或nandflash中,文件内容不要修改)
 │ ramdisk.img.u
 │ u-boot.imx
 │ zImage
 │ imx6ul-14x14-evk.dtb

 
 拨码开关到SD之后,上电,CPU到SD卡加载u-boot.imx,并启动uboot

 查看bootcmd命令

 if mmc rescan;
  then if run loadbootscript;
   then run bootscript;
  else
   if test ${bootdev} = sd1;
    then echo update firmware.........;
    run update_from_sd;
   else
    echo mmc boot..........;
    if run loadimage;
     then run mmcboot;
    else run netboot;
    fi;
   fi;
  fi;
 else
  run netboot;
 fi;

 而bootdev在SD卡启动时为sd1,在mmc启动时为mmc2
 
 所以最重要的是update_from_sd命令和loadimage & mmcboot

 update_from_sd=run update_emmc;
 update_emmc=mmc rescan;
 fatload mmc 0 ${loadaddr} /bin/${image};
 fatload mmc 0 ${initrd_addr} /bin/ramdisk.img.u;
 fatload mmc 0 ${fdt_addr} /bin/${fdt_file};
 set bootargs console=${console},${baudrate} cma=320M rdinit=/linuxrc;
 bootz ${loadaddr} ${initrd_addr} ${fdt_addr};

 其主要是启动一个ramdisk,即内存文件系统,然后将mmc当成外设挂载,对mmc进行分区格式化和拷贝的操作

 对mmc进行的操作脚本为linuxrc

**************************************************************************
linuxrc
**************************************************************************

#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin

mount -t sysfs none /sys
mount -t proc none /proc
mount -t devtmpfs none /dev
sleep 3

# disable turn off display
#echo -e "\033[9;0]" > /dev/tty0
echo "start fuse emmc--->" > /dev/tty0
echo "format emmc" > /dev/tty0
/bin/sh /mksdcard.sh /dev/mmcblk1
dd if=/dev/zero of=/dev/mmcblk1 bs=1k seek=384 conv=fsync count=129

mkdir -p /run/mmc0
mkdir -p /run/mmc1
mount /dev/mmcblk0p1 /run/mmc0

echo "burn uboot" > /dev/tty0
echo 0 > /sys/block/mmcblk1boot0/force_ro
dd if=/run/mmc0/system/u-boot.imx of=/dev/mmcblk1boot0 bs=512 seek=2
echo 1 > /sys/block/mmcblk1boot0/force_ro
echo 8 > /sys/block/mmcblk1/device/boot_config

echo "create fat partition" > /dev/tty0
mkfs.vfat /dev/mmcblk1p1
mount /dev/mmcblk1p1 /run/mmc1

echo "burn zImage" > /dev/tty0
cp /run/mmc0/system/zImage /run/mmc1/zImage

echo "burn logo"   > /dev/tty0
cp /run/mmc0/system/logo-7.bmp /run/mmc1/logo-7.bmp
cp /run/mmc0/system/logo-8.bmp /run/mmc1/logo-8.bmp
cp /run/mmc0/system/logo-5.6.bmp /run/mmc1/logo-5.6.bmp
cp /run/mmc0/system/logo-4.3.bmp /run/mmc1/logo-4.3.bmp

echo "burn dtbs" > /dev/tty0
cp /run/mmc0/system/imx6ul-14x14-evk.dtb /run/mmc1/imx6ul-14x14-evk.dtb
cp /run/mmc0/system/imx6ul-14x14-evk-7.dtb /run/mmc1/imx6ul-14x14-evk-7.dtb
cp /run/mmc0/system/imx6ul-14x14-evk-5.6-r.dtb /run/mmc1/imx6ul-14x14-evk-5.6-r.dtb
cp /run/mmc0/system/imx6ul-14x14-evk-10.4-r.dtb /run/mmc1/imx6ul-14x14-evk-10.4-r.dtb
cp /run/mmc0/system/imx6ul-14x14-evk-8-r.dtb /run/mmc1/imx6ul-14x14-evk-8-r.dtb
cp /run/mmc0/system/imx6ul-14x14-evk-4.3-r.dtb /run/mmc1/imx6ul-14x14-evk-4.3-r.dtb
umount /run/mmc1


echo "burn rootfs" > /dev/tty0
mkfs.ext3 -E nodiscard /dev/mmcblk1p2
mount -t ext3 /dev/mmcblk1p2 /run/mmc1
tar xvf /run/mmc0/system/rootfs.tar.bz2 -C /run/mmc1
umount /run/mmc1

umount /run/mmc0


echo "Update Complete!!!!!!!"  > /dev/tty0
echo "Update Complete!!!!!!!"


while true
do
        echo 1 > /sys/class/leds/led3/brightness
        sleep 1
        echo 1 > /sys/class/leds/led3/brightness
        sleep 1
done


**************************************************************************
mksdcard.sh
**************************************************************************

#!/bin/sh

# partition size in MB
BOOT_ROM_SIZE=10


# call sfdisk to create partition table
# destroy the partition table
node=$1
dd if=/dev/zero of=${node} bs=1024 count=1

sfdisk --force -uM ${node} << EOF
${BOOT_ROM_SIZE},500,0c
600,,83
EOF

**************************************************************************
**************************************************************************

 在uboot查看mmc分区可以看见

 => mmc part

 Partition Map for MMC device 1  --   Partition Type: DOS

 Part    Start Sector    Num Sectors     UUID            Type
   1     20480           1024000         00000000-01     0c  <---10*1024*1024/512=20480,500*1024*1024/512=102400
   2     1228800         13877248        00000000-02     83  <---600*1024*1024/512=1228800,

 mmc分区情况说明(对于USD区来说)
 
 有两个分区,第一个分区从20480到1024000,即从10M到510M,共500M大小
 第二个分区从600M到结束

 根据程序可以看到
 u-boot.imx写到了mmcblk1boot0区中
 内核,logo,设备树,写到了USD区中的第一个分区中,并被格式化成了fat格式
 文件系统被解压缩到了USD区中的第二个分区中,并被格式化成了ext3格式
 
 
 


已解决

未解决

只是看看

最新评论

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-12-22 19:52

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部