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格式
|