查看: 139|回复: 0

[经验] 飞凌嵌入式ElfBoard ELF 1板卡-TF卡烧写原理

[复制链接]

该用户从未签到

发表于 5 天前 | 显示全部楼层 |阅读模式
分享到:
TF卡烧写原理与OTG烧录原理类似,拨码开关拨到TF卡启动后,先会到TF卡中读取sdrun目录下的uboot.imx文件,uboot启动后会初始化DDR,然后将zImage、imx6ull-14x14-evk.dtb、ramdisk.img.u加载到内存中,最后内核挂载ramdisk文件系统,在虚拟文件系统中将target目录下的镜像烧录到EMMC中,主要的烧录过程在ramdisk中实现,下面主要分析ramdisk中的烧录流程。
将ramdisk.img.u拷贝到/home/elf/work/路径下,使用dd命令将头部64字节的数据去除:
  1. elf@ubuntu:~/work$ dd if=ramdisk.img.u of=ramdisk bs=64 skip=1

  2. 127461+1 records in

  3. 127461+1 records out

  4. 8157550 bytes (8.2 MB, 7.8 MiB) copied, 0.172201 s, 47.4 MB/s
复制代码
将ramdisk重命名为ramdisk.gz,并解压:
  1. elf@ubuntu:~/work$ mv ramdisk ramdisk.gz

  2. elf@ubuntu:~/work$ gunzip -v ramdisk.gz

  3. ramdisk.gz: 56.3% -- replaced with ramdisk
复制代码
新建tmp目录并使用cpio解压ramdisk:
  1. elf@ubuntu:~/work$ mkdir tmp

  2. elf@ubuntu:~/work$ cd tmp/

  3. elf@ubuntu:~/work/tmp$ sudo cpio -idv < ../ramdisk
复制代码
此时使用ls命令查看,tmp目录下生成了一个文件系统:
  1. elf@ubuntu:~/work/tmp$ ls

  2. bin   dev  header  init  linuxrc  mksdcard.sh  proc  sbin  tmp  var

  3. boot  etc  home    lib   media    mnt          run   sys   usr
复制代码
使用vim打开linuxrc文件,这是进入虚拟文件系统后运行的一个文件,进入到脚本后先进行挂载各个系统文件:
  1. set -e

  2. export PATH=/sbin:/bin:/usr/sbin:/usr/bin



  3. mount -t sysfs none /sys

  4. mount -t proc none /proc

  5. mount -t devtmpfs none /dev
复制代码
运行mksdcard.sh脚本,对EMMC进行分区,这个脚本的内容与otg烧录时的分区脚本一样,所以此处不进行讲解。
  1. echo "format emmc" > /dev/tty0

  2. /bin/sh /mksdcard.sh /dev/mmcblk1
复制代码
使用dd命令清除/dev/mmcblk1中存放uboot环境变量的空间:
  1. dd if=/dev/zero of=/dev/mmcblk1 bs=1k seek=384 conv=fsync count=129
复制代码
循环检测是否能够识别到TF卡,/dev/mmcblk0是TF卡生成的节点:
  1. while [ ! -e /dev/mmcblk0 ]

  2. do

  3.        sleep 1

  4.        echo "wait for /dev/mmcblk0 appear"

  5.        echo "wait for /dev/mmcblk0 appear" > /dev/tty0

  6. done
复制代码
新建TF卡和EMMC的挂载目录,并将TF卡挂载上:
  1. mkdir -p /run/mmc0

  2. mkdir -p /run/mmc1

  3. mount /dev/mmcblk0p1 /run/mmc0
复制代码
烧录uboot:
  1. echo "burn uboot" > /dev/tty0

  2. echo 0 > /sys/block/mmcblk1boot0/force_ro

  3. dd if=/run/mmc0/target/u-boot.imx of=/dev/mmcblk1boot0 bs=512 seek=2

  4. echo 1 > /sys/block/mmcblk1boot0/force_ro

  5. Mmc bootpart enable 1 1 /dev/mmcblk1
复制代码
格式化EMMC的fat分区,并挂载到文件系统:
  1. echo "create fat partition" > /dev/tty0

  2. mkfs.vfat /dev/mmcblk1p1

  3. mount /dev/mmcblk1p1 /run/mmc1
复制代码
烧录内核镜像:
  1. echo "burn zImage" > /dev/tty0

  2. cp /run/mmc0/target/zImage /run/mmc1/zImage

  3. echo "burn zImagebak" > /dev/tty0

  4. cp /run/mmc0/target/zImage /run/mmc1/zImagebak
复制代码
烧录logo图片:
  1. echo "burn logo"   > /dev/tty0

  2. cp /run/mmc0/target/logo.bmp /run/mmc1/logo.bmp
复制代码
烧录设备树:
  1. echo "burn dtbs" > /dev/tty0

  2. cp /run/mmc0/target/imx6ull-elf1-emmc.dtb /run/mmc1/imx6ull-elf1-emm.dtb

  3. umount /run/mmc1
复制代码
格式化ext3分区并烧录文件系统:
  1. echo "burn rootfs" > /dev/tty0

  2. mkfs.ext3 -E nodiscard /dev/mmcblk1p2

  3. mount -t ext3 /dev/mmcblk1p2 /run/mmc1

  4. tar xvf /run/mmc0/target/rootfs.tar.bz2 -C /run/mmc1

  5. tar xvf /run/mmc0/target/modules.tar.bz2 -C /run/mmc1

  6. umount /run/mmc1



  7. umount /run/mmc0
复制代码
打印烧录完成信息:
  1. echo "Update Complete!!!!!!!"  > /dev/tty0

  2. echo "Update Complete!!!!!!!"
复制代码
控制led灯秒闪,指示烧录完成:
  1. echo none > /sys/class/leds/heartbeat/trigger

  2. while true

  3. do

  4.         echo 1 > /sys/class/leds/heartbeat/brightness

  5.         sleep 1

  6.         echo 0 > /sys/class/leds/heartbeat/brightness

  7.         sleep 1

  8. done
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条



手机版|小黑屋|与非网

GMT+8, 2025-1-5 04:00 , Processed in 0.119110 second(s), 14 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.