扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-TF卡烧录流程之烧写原理

2024/12/31
1200
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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字节的数据去除:

elf@ubuntu:~/work$ dd if=ramdisk.img.u of=ramdisk bs=64 skip=1

127461+1 records in

127461+1 records out

8157550 bytes (8.2 MB, 7.8 MiB) copied, 0.172201 s, 47.4 MB/s

将ramdisk重命名为ramdisk.gz,并解压:

elf@ubuntu:~/work$ mv ramdisk ramdisk.gz

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

ramdisk.gz: 56.3% -- replaced with ramdisk

新建tmp目录并使用cpio解压ramdisk:

elf@ubuntu:~/work$ mkdir tmp

elf@ubuntu:~/work$ cd tmp/

elf@ubuntu:~/work/tmp$ sudo cpio -idv < ../ramdisk

此时使用ls命令查看,tmp目录下生成了一个文件系统:

elf@ubuntu:~/work/tmp$ ls

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

boot  etc  home    lib   media    mnt          run   sys   usr

使用vim打开linuxrc文件,这是进入虚拟文件系统后运行的一个文件,进入到脚本后先进行挂载各个系统文件:

set -e

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




mount -t sysfs none /sys

mount -t proc none /proc

mount -t devtmpfs none /dev

运行mksdcard.sh脚本,对EMMC进行分区,这个脚本的内容与otg烧录时的分区脚本一样,所以此处不进行讲解。

echo "format emmc" > /dev/tty0

/bin/sh /mksdcard.sh /dev/mmcblk1

使用dd命令清除/dev/mmcblk1中存放uboot环境变量的空间:

dd if=/dev/zero of=/dev/mmcblk1 bs=1k seek=384 conv=fsync count=129

循环检测是否能够识别到TF卡,/dev/mmcblk0是TF卡生成的节点:

while [ ! -e /dev/mmcblk0 ]

do

       sleep 1

       echo "wait for /dev/mmcblk0 appear"

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

done

新建TF卡和EMMC的挂载目录,并将TF卡挂载上:

mkdir -p /run/mmc0

mkdir -p /run/mmc1

mount /dev/mmcblk0p1 /run/mmc0

烧录uboot:

echo "burn uboot" > /dev/tty0

echo 0 > /sys/block/mmcblk1boot0/force_ro

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

echo 1 > /sys/block/mmcblk1boot0/force_ro

Mmc bootpart enable 1 1 /dev/mmcblk1

格式化EMMC的fat分区,并挂载到文件系统:

echo "create fat partition" > /dev/tty0

mkfs.vfat /dev/mmcblk1p1

mount /dev/mmcblk1p1 /run/mmc1

烧录内核镜像:

echo "burn zImage" > /dev/tty0

cp /run/mmc0/target/zImage /run/mmc1/zImage

echo "burn zImagebak" > /dev/tty0

cp /run/mmc0/target/zImage /run/mmc1/zImagebak

烧录logo图片:

echo "burn logo"   > /dev/tty0

cp /run/mmc0/target/logo.bmp /run/mmc1/logo.bmp

烧录设备树:

echo "burn dtbs" > /dev/tty0

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

umount /run/mmc1

格式化ext3分区并烧录文件系统:

echo "burn rootfs" > /dev/tty0

mkfs.ext3 -E nodiscard /dev/mmcblk1p2

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

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

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

umount /run/mmc1




umount /run/mmc0

打印烧录完成信息:

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

echo "Update Complete!!!!!!!"

控制led灯秒闪,指示烧录完成:

echo none > /sys/class/leds/heartbeat/trigger

while true

do

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

        sleep 1

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

        sleep 1

done
飞凌嵌入式

飞凌嵌入式

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。收起

查看更多

相关推荐