20170314_jeffrey - silenceuncrio/diary GitHub Wiki

0930

昨天腰 不舒服 請假一天

先補 engineering notebook

1005

這禮拜預計的 project schedule 為 Firmware Upgrade: Erase rootfs

參考 mfgtool 的 ucl2.xml

<UCL>

  ...

  <!--burn the kernel to NAND: -->
  <CMD state="Updater" type="push" 
    body="$ flash_erase /dev/mtd2 0 0">Erasing Kernel partition</CMD>
  <CMD state="Updater" type="push" 
    body="send" file="files/zImage">Sending kernel zImage</CMD>
  <CMD state="Updater" type="push" 
    body="$ nandwrite -p /dev/mtd2 -p $FILE">Flashing Kernel</CMD>
  <CMD state="Updater" type="push" 
    body="$ flash_erase /dev/mtd3 0 0">Erasing dtb partition</CMD>
  <CMD state="Updater" type="push" 
    body="send" file="files/zImage-imx6ul-14x14-evk.dtb">Sending Device Tree file</CMD>
  <CMD state="Updater" type="push" 
    body="$ nandwrite -p /dev/mtd3 -p $FILE">Flashing dtb</CMD>



  <!--prepare all ubi device: -->

  <CMD state="Updater" type="push" 
    body="$ flash_erase /dev/mtd4 0 0">Erasing rootfs_a partition</CMD>
  <CMD state="Updater" type="push" 
    body="$ flash_erase /dev/mtd5 0 0">Erasing config_a partition</CMD>
  <CMD state="Updater" type="push" 
    body="$ flash_erase /dev/mtd9 0 0">Erasing rootfs_b partition</CMD>
  <CMD state="Updater" type="push" 
    body="$ flash_erase /dev/mtd10 0 0">Erasing config_b partition</CMD>

  <CMD state="Updater" type="push" 
    body="$ ubiformat /dev/mtd4"/>
  <CMD state="Updater" type="push" 
    body="$ ubiformat /dev/mtd5"/>
  <CMD state="Updater" type="push" 
    body="$ ubiformat /dev/mtd9"/>
  <CMD state="Updater" type="push" 
    body="$ ubiformat /dev/mtd10"/>

  <CMD state="Updater" type="push" 
    body="$ ubiattach /dev/ubi_ctrl -m 4">Attaching UBI partition - /dev/ubi0</CMD>
  <CMD state="Updater" type="push" 
    body="$ ubiattach /dev/ubi_ctrl -m 5">Attaching UBI partition - /dev/ubi1</CMD>
  <CMD state="Updater" type="push" 
    body="$ ubiattach /dev/ubi_ctrl -m 9">Attaching UBI partition - /dev/ubi2</CMD>
  <CMD state="Updater" type="push" 
    body="$ ubiattach /dev/ubi_ctrl -m 10">Attaching UBI partition - /dev/ubi3</CMD>

  <CMD state="Updater" type="push" 
    body="$ ubimkvol /dev/ubi0 -N rootfs_a -m"/>
  <CMD state="Updater" type="push" 
    body="$ ubimkvol /dev/ubi1 -N config_a -m"/>
  <CMD state="Updater" type="push" 
    body="$ ubimkvol /dev/ubi2 -N rootfs_b -m"/>
  <CMD state="Updater" type="push" 
    body="$ ubimkvol /dev/ubi3 -N config_b -m"/>

  <!--burn the rootfs_a to NAND: -->
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/rootfs_a"/>
  <CMD state="Updater" type="push" 
    body="$ mount -t ubifs ubi0:rootfs_a /mnt/rootfs_a"/>
  <CMD state="Updater" type="push" 
    body="pipe tar -jxv -C /mnt/rootfs_a" file="files/rootfs.tar.bz2">Sending and writting rootfs_a</CMD>
  <CMD state="Updater" type="push" 
    body="frf">Finishing rootfs write</CMD>
  <CMD state="Updater" type="push" 
    body="$ umount /mnt/rootfs_a">Unmounting rootfs_a partition</CMD>
  <CMD state="Updater" type="push" 
    body="$ echo Update Complete!">Done</CMD>

  </LIST>

</UCL>

預計要修改的 file 為 FirmwareUpgrade.shburn_rootfs()

...

# Burn the rootfs to NAND
function burn_rootfs {
  log "\nBurn the rootfs to NAND..."
  if df | grep rootfs_a
  then

    log "Attach rootfs_b patition to UBI - MTD device 9"

    ubiattach /dev/ubi_ctrl -m 9
    if [ $? == 0 ]
    then
      log "ubiattach /dev/ubi_ctrl -m 9 succeeded"
    else
      log "Error: ubiattach /dev/ubi_ctrl -m 9 failed"
      progress_fail "Error: ubiattach failed"
      exit 1
    fi

    log "Create derectory /tmp/rootfs_b"
    mkdir -p /tmp/rootfs_b

    log "Mount /tmp/rootfs_b with node ubi2:rootfs_b"
    mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b
    if [ $? == 0 ]
    then
      log "mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b succeeded"
    else
      log "Error: mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b failed"
      progress_fail "Error: mount -t ubifs failed"
      exit 1
    fi

    log "writting rootfs... please wait"
    progress_status "writting rootfs... please wait"

    tar -jxv -C /tmp/rootfs_b -f /tmp/firmware/rootfs.tar.bz2

    log "umount /tmp/rootfs_b"
    progress_status "umount rootfs"
    umount /tmp/rootfs_b

    log "Detach rootfs_b patition from UBI - MTD device 9"
    ubidetach /dev/ubi_ctrl -m 9

    log "Burn the rootfs to NAND succeeded"
    progress_status "Burn the rootfs to NAND succeeded"

  else

    log "Attach rootfs_a patition to UBI - MTD device 4"

    ubiattach /dev/ubi_ctrl -m 4
    if [ $? == 0 ]
    then
      log "ubiattach /dev/ubi_ctrl -m 4 succeeded"
    else
      log "Error: ubiattach /dev/ubi_ctrl -m 4 failed"
      progress_fail "Error: ubiattach failed"
      exit 1
    fi

    log "Create derectory /tmp/rootfs_a"
    mkdir -p /tmp/rootfs_a

    log "Mount /tmp/rootfs_a with node ubi2:rootfs_a"
    mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a
    if [ $? == 0 ]
    then
      log "mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a succeeded"
    else
      log "Error: mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a failed"
      progress_fail "Error: mount -t ubifs failed"
      exit 1
    fi

    log "writting rootfs... please wait"
    progress_status "writting rootfs... please wait"
    tar -jxvm -C /tmp/rootfs_a -f /tmp/firmware/rootfs.tar.bz2

    log "umount /tmp/rootfs_a"
    progress_status "umount rootfs"
    umount /tmp/rootfs_a

    log "Detach rootfs_b patition from UBI - MTD device 4"
    ubidetach /dev/ubi_ctrl -m 4

    log "Burn the rootfs to NAND succeeded"
    progress_status "Burn the rootfs to NAND succeeded"

  fi

}



# main function - entry point
function main {
  log_init
  progress_init
  extract $1
  md5_sums_check
  mcsv_check
  burn_kernel
  burn_dtb
  burn_rootfs
  sync_config_mtd
  replace_primary_app
  finish
}



main $1

1030

其實就是要新增三個動作

  • flash_erase
  • ubiformat
  • ubimkvol

不過要特別注意 ubimkvol 這個動作

1325

Firmware Upgrade: Erase rootfs 已完工

上 code

⚠️ **GitHub.com Fallback** ⚠️