20170104_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 0920 - firmware uprade 的 progress bar - bootatrap 有現成的可以用
  • 0950 - firmware.js
  • 1055 - 大概估了一下 firmware upgrade 所需的時間 - 96 秒
  • 1610 - firmware upgrade 的 progress bar 做完囉

0920

來看一下 firmware uprade 的 progress bar 怎麼作

http://www.w3schools.com/bootstrap/bootstrap_progressbars.asp

bootatrap 有現成的可以用

我只要給它適當的百分比就可以畫出 progress bar 了

0950

目前 firmware.js 相關 function 如下

    ...
    vm.upgrade = function(_file) {
        if (_file) {
            ...
            vm.progress = "Firmware Upload...";
            ...
            Upload.upload({ url: 'api/firmwareUpload', data: data })
            .then(function(resp) {
                ...
                return icos.firmware.upgrade();
            })
            .then(function(resp) {
                vm.progress = "Firmware Upgrade Progress Start...";
                vm.timeout_3sec();
            });
        }
    }

    vm.timeout_3sec = function () {
        timer_3sec.then(function () {
            icos.firmware.progress()
            .then(function(response) {
                vm.progress = response.data.progress.content;
                if (vm.progress.indexOf('finished') != -1) {
                    vm.upgrade_ing = false;
                    if (vm.progress.indexOf('failed') == -1) {
                        vm.upgrade_done = true;
                    }
                } else {
                  vm.timeout_3sec();
                }
            });
        });
    }
    ...

vm.upgrade 被觸發後

先利用 vm.progress = "Firmware Upload..."; 顯示出 Firmware Upload...

然後先呼叫 Upload.upload({ url: 'api/firmwareUpload', data: data }) 作 upload 的動作

這邊需要估一下時間

一旦 iweb server 完成 upload 之後會有 response 給 firmware.js

firmware.js 馬上會呼叫 icos.firmware.upgrade() 進行 firmware upgrade 的動作

iweb 會把 firmware.cgi 叫起來在背景作事(&) 並馬上回應給 firmware.js

firmware.cgi 會去叫 FirmwareUpgrade.sh 這支 shell script

firmware.js 在收到 iweb 的回應後先利用 vm.progress = "Firmware Upgrade Progress Start..."; 顯示訊息

然後呼叫 vm.timeout_3sec(); 觸發後續每三秒去呼叫 icos.firmware.progress()

icos.firmware.progress() 會讓 firmware.cgi/tmp/FirmwareUpgrade.log 的內容讀回來

/tmp/FirmwareUpgrade.log 的內容由 FirmwareUpgrade.sh 這支 shell script 維護

完整的 /tmp/FirmwareUpgrade.log 內容如下

firmware upgrade shell script start...
Extract all files from /tmp/firmware.upload
tar -C /tmp -xf /tmp/firmware.upload succeeded

Burn the kernel to NAND...
Erasing kernel_b partition - MTD device 7 (/dev/mtd7)
Flashing Kernel

Burn the dtb to NAND...
Erasing dtb_b partition - MTD device 8 (/dev/mtd8)
Flashing dtb

Burn the rootfs to NAND...
Attach rootfs_b patition to UBI - MTD device 9
ubiattach /dev/ubi_ctrl -m 9 succeeded
Create derectory /mnt/rootfs_b
Mount /mnt/rootfs_b with node ubi2:rootfs_b
mount -t ubifs ubi2:rootfs_b /mnt/rootfs_b succeeded

Writting rootfs... please wait

Unmount /mnt/rootfs_b

Change uboot env...
The active firmware is a, switch to b
Modify uboot env 'bootargs'
Modify uboot env 'bootcmd'

firmware upgrade shell script succeeded
finished

1055

大概估了一下 firmware upgrade 所需的時間

可以分成下面幾個階段 順便列出所需要的秒數

  • Firmware Upload - 12
  • Firmware Upgrade Progress Start - 3
  • Burn the kernel to NAND - 3
  • Burn the rootfs to NAND - 3
  • Writting rootfs - 63
  • Unmount - 12
  • finished - 0

總花費 96 秒

大概就把每個階段的秒數當作百分比就可以了

1610

firmware upgrade 的 progress bar 做完囉

commit...