加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

飛凌嵌入式ElfBoard ELF 1板卡-TF卡燒錄流程之燒寫原理

2024/12/31
230
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

TF卡燒寫原理與OTG燒錄原理類似,撥碼開關撥到TF卡啟動后,先會到TF卡中讀取sdrun目錄下的uboot.imx文件,uboot啟動后會初始化DDR,然后將zImage、imx6ull-14x14-evk.dtb、ramdisk.img.u加載到內(nèi)存中,最后內(nèi)核掛載ramdisk文件系統(tǒng),在虛擬文件系統(tǒng)中將target目錄下的鏡像燒錄到EMMC中,主要的燒錄過程在ramdisk中實現(xiàn),下面主要分析ramdisk中的燒錄流程。

將ramdisk.img.u拷貝到/home/elf/work/路徑下,使用dd命令將頭部64字節(jié)的數(shù)據(jù)去除:

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目錄下生成了一個文件系統(tǒng):

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文件,這是進入虛擬文件系統(tǒng)后運行的一個文件,進入到腳本后先進行掛載各個系統(tǒng)文件:

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進行分區(qū),這個腳本的內(nèi)容與otg燒錄時的分區(qū)腳本一樣,所以此處不進行講解。

echo "format emmc" > /dev/tty0

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

使用dd命令清除/dev/mmcblk1中存放uboot環(huán)境變量的空間:

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

循環(huán)檢測是否能夠識別到TF卡,/dev/mmcblk0是TF卡生成的節(jié)點:

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分區(qū),并掛載到文件系統(tǒng):

echo "create fat partition" > /dev/tty0

mkfs.vfat /dev/mmcblk1p1

mount /dev/mmcblk1p1 /run/mmc1

燒錄內(nèi)核鏡像:

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分區(qū)并燒錄文件系統(tǒng):

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

相關推薦