20170120_jeffrey - silenceuncrio/diary GitHub Wiki
- 0920 - 繼續昨天的修改前先盤一下
- 0945 - FirmwareUpgrade.sh
- 1030 - uboot_env.sh
- 1055 - commit 時要寫什麼呢
- 1130 - git push... ok
- 1335 - 加了 gps 的 web page
- 1350 - 把預設的位置改到公司來
-
1440 - mfgtool flashing firmware 後是沒有
/home/log
的... 要注意阿...
繼續昨天的修改前先盤一下
- modified: /proscend/base_fs/default/rootfs/etc/rc.local
- modified: /proscend/prosrc/icos/script/FirmwareUpgrade.sh
- new file: /proscend/prosrc/icos/script/uboot_env.sh
diff --git a/proscend/base_fs/default/rootfs/etc/rc.local b/proscend/base_fs/default/rootfs/etc/rc.local
old mode 100644
new mode 100755
index 52440a4..d3f8101
--- a/proscend/base_fs/default/rootfs/etc/rc.local
+++ b/proscend/base_fs/default/rootfs/etc/rc.local
@@ -53,23 +53,48 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
# ======================================================================
-# | attach the related MTD device to UBI,
-# | according to the current rootfs
+# | apply the uboot env variables related to current application
+# ======================================================================
+/usr/sbin/icos/uboot_env.sh
+
+
+
+# ======================================================================
+# | read-only remount a mounted root file system
+# | attach MTD device to UBI according to the current rootfs
# ======================================================================
/bin/mkdir -p /mnt/data
+/bin/mkdir -p /mnt/config
+
if df | grep rootfs_a
then
+ #echo "read-only remount a mounted root file system"
+ #mount -t ubifs ubi0:rootfs_a / -o remount,ro
+
echo "attach MTD device 5 (mtd5) to UBI - ubi1:config_a"
ubiattach -m 5
- mount -t ubifs ubi1:config_a /mnt/data
+ mount -t ubifs ubi1:config_a /mnt/config
else
+ #echo "read-only remount a mounted root file system"
+ #mount -t ubifs ubi0:rootfs_b / -o remount,ro
+
echo "attach MTD device 10 (mtd10) to UBI - ubi1:config_b"
ubiattach -m 10
- mount -t ubifs ubi1:config_b /mnt/data
+ mount -t ubifs ubi1:config_b /mnt/config
fi
+# ======================================================================
+# | prepare '/mnt/data' and '/home/log' for the application
+# ======================================================================
+/bin/mkdir -p /mnt/config/data
+/bin/mkdir -p /mnt/config/log
+mount /mnt/config/data /mnt/data
+mount /mnt/config/log /home/log
+
+
+
# ==========================================================================
# | mkdir /mnt/data/icos for icos data storage (/etc/icos)
# | mkdir /mnt/data/etc for other app data storage
@@ -102,14 +127,15 @@ if [ ! -z "$sys_time" ]; then
fi
if [ -d "/home/log" ]; then
- TIME=$(date +"%Y%m%d%H%M")
- cd /home; tar zcf log-${TIME}.tgz log
+ TIME=$(date +"%Y%m%d%H%M")
+ cd /mnt/data
+ tar zcf log-${TIME}.tgz /home/log
rm -rf /home/log/*
fi
KEEP=2
KEEP_LOGS=$(ls log-*.tgz 2>/dev/null | tail -n $KEEP)
-TEMP_DIR=_log_temp
+TEMP_DIR=/tmp/_log_temp
mkdir -p $TEMP_DIR
for log in $KEEP_LOGS
@@ -137,3 +163,14 @@ modprobe cryptodev
--hold-exit 5 0 &
# Ariel: make icos watch dog to be the last one.Max timeout is 128 seconds.
/usr/sbin/icoswdog -T 120 &
+
+
+
+# ======================================================================
+# | reset the uboot env no_good counter
+# | we think our applicaion is good at this moment
+# ======================================================================
+fw_setenv no_good .
+
+
+
- 為了套用新的 uboot env 呼叫了
uboot_env.sh
- 在把 rootfs 轉成 read-only 之前, 先把需要的 folder 建立出來
- 依據目前的 primary applicaiton MTD 決定
/mnt/config
的 mount 對象是 ubi1:config_a 還是 ubi1:config_b - M300 應用需要寫入的地方有兩個:
/mnt/data
和/home/log
-
/mnt/data
mount 到/mnt/config/data
-
/home/log
mount 到/mnt/config/log
- 把記錄檔的寫入位置從 read-only 的
/home
改到/mnt/data
去 - 目前先把 rc.local 的末端當成是 M300 應用服務確認是完整的 check point
目前某些 icos 模組因為 rootfs read-only 的關係導致 M300 應用服務初始化失敗
所以先把 rootfs 轉成 read-only 的動作 comment 掉
diff --git a/proscend/prosrc/icos/script/FirmwareUpgrade.sh b/proscend/prosrc/icos/script/FirmwareUpgrade.sh
index b869e4a..423f921 100755
--- a/proscend/prosrc/icos/script/FirmwareUpgrade.sh
+++ b/proscend/prosrc/icos/script/FirmwareUpgrade.sh
@@ -69,23 +69,23 @@ then
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
- echo "Create derectory /mnt/rootfs_b" >> /tmp/FirmwareUpgrade.log
- mkdir -p /mnt/rootfs_b
- echo "Mount /mnt/rootfs_b with node ubi2:rootfs_b" >> /tmp/FirmwareUpgrade.log
- if mount -t ubifs ubi2:rootfs_b /mnt/rootfs_b
+ echo "Create derectory /tmp/rootfs_b" >> /tmp/FirmwareUpgrade.log
+ mkdir -p /tmp/rootfs_b
+ echo "Mount /tmp/rootfs_b with node ubi2:rootfs_b" >> /tmp/FirmwareUpgrade.log
+ if mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b
then
- echo "mount -t ubifs ubi2:rootfs_b /mnt/rootfs_b succeeded" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b succeeded" >> /tmp/FirmwareUpgrade.log
else
- echo "mount -t ubifs ubi2:rootfs_b /mnt/rootfs_b failed" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b failed" >> /tmp/FirmwareUpgrade.log
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
echo "" >> /tmp/FirmwareUpgrade.log
echo "Writting rootfs... please wait" >> /tmp/FirmwareUpgrade.log
echo "" >> /tmp/FirmwareUpgrade.log
- tar -jxv -C /mnt/rootfs_b -f /tmp/firmware/rootfs.tar.bz2
- echo "Unmount /mnt/rootfs_b" >> /tmp/FirmwareUpgrade.log
- umount /mnt/rootfs_b
+ tar -jxv -C /tmp/rootfs_b -f /tmp/firmware/rootfs.tar.bz2
+ echo "Unmount /tmp/rootfs_b" >> /tmp/FirmwareUpgrade.log
+ umount /tmp/rootfs_b
echo "Detach rootfs_b patition from UBI - MTD device 9" >> /tmp/FirmwareUpgrade.log
ubidetach /dev/ubi_ctrl -m 9
else
@@ -98,23 +98,23 @@ else
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
- echo "Create derectory /mnt/rootfs_a" >> /tmp/FirmwareUpgrade.log
- mkdir -p /mnt/rootfs_a
- echo "Mount /mnt/rootfs_a with node ubi2:rootfs_a" >> /tmp/FirmwareUpgrade.log
- if mount -t ubifs ubi2:rootfs_a /mnt/rootfs_a
+ echo "Create derectory /tmp/rootfs_a" >> /tmp/FirmwareUpgrade.log
+ mkdir -p /tmp/rootfs_a
+ echo "Mount /tmp/rootfs_a with node ubi2:rootfs_a" >> /tmp/FirmwareUpgrade.log
+ if mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a
then
- echo "mount -t ubifs ubi2:rootfs_a /mnt/rootfs_a succeeded" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a succeeded" >> /tmp/FirmwareUpgrade.log
else
- echo "mount -t ubifs ubi2:rootfs_a /mnt/rootfs_a failed" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a failed" >> /tmp/FirmwareUpgrade.log
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
echo "" >> /tmp/FirmwareUpgrade.log
echo "Writting rootfs... please wait" >> /tmp/FirmwareUpgrade.log
echo "" >> /tmp/FirmwareUpgrade.log
- tar -jxvm -C /mnt/rootfs_a -f /tmp/firmware/rootfs.tar.bz2
- echo "Unmount /mnt/rootfs_a" >> /tmp/FirmwareUpgrade.log
- umount /mnt/rootfs_a
+ tar -jxvm -C /tmp/rootfs_a -f /tmp/firmware/rootfs.tar.bz2
+ echo "Unmount /tmp/rootfs_a" >> /tmp/FirmwareUpgrade.log
+ umount /tmp/rootfs_a
echo "Detach rootfs_b patition from UBI - MTD device 4" >> /tmp/FirmwareUpgrade.log
ubidetach /dev/ubi_ctrl -m 4
fi
@@ -134,21 +134,22 @@ then
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
- echo "Create derectory /mnt/config_b" >> /tmp/FirmwareUpgrade.log
- mkdir -p /mnt/config_b
- echo "Mount /mnt/config_b with node ubi2:config_b" >> /tmp/FirmwareUpgrade.log
- if mount -t ubifs ubi2:config_b /mnt/config_b
+ echo "Create derectory /tmp/config_b" >> /tmp/FirmwareUpgrade.log
+ mkdir -p /tmp/config_b
+ echo "Mount /tmp/config_b with node ubi2:config_b" >> /tmp/FirmwareUpgrade.log
+ if mount -t ubifs ubi2:config_b /tmp/config_b
then
- echo "mount -t ubifs ubi2:config_b /mnt/config_b succeeded" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:config_b /tmp/config_b succeeded" >> /tmp/FirmwareUpgrade.log
else
- echo "mount -t ubifs ubi2:config_b /mnt/config_b failed" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:config_b /tmp/config_b failed" >> /tmp/FirmwareUpgrade.log
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
echo "Synchronize the config" >> /tmp/FirmwareUpgrade.log
- cp -r /mnt/data/* /mnt/config_b/
- echo "Unmount /mnt/config_b" >> /tmp/FirmwareUpgrade.log
- umount /mnt/config_b
+ mkdir -p /tmp/config_b/data
+ cp -r /mnt/data/* /tmp/config_b/data
+ echo "Unmount /tmp/config_b" >> /tmp/FirmwareUpgrade.log
+ umount /tmp/config_b
echo "Detach config_b device from UBI - MTD device 10" >> /tmp/FirmwareUpgrade.log
ubidetach /dev/ubi_ctrl -m 10
else
@@ -161,21 +162,22 @@ else
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
- echo "Create derectory /mnt/config_a" >> /tmp/FirmwareUpgrade.log
- mkdir -p /mnt/config_a
- echo "Mount /mnt/config_a with node ubi2:config_a" >> /tmp/FirmwareUpgrade.log
- if mount -t ubifs ubi2:config_a /mnt/config_a
+ echo "Create derectory /tmp/config_a" >> /tmp/FirmwareUpgrade.log
+ mkdir -p /tmp/config_a
+ echo "Mount /tmp/config_a with node ubi2:config_a" >> /tmp/FirmwareUpgrade.log
+ if mount -t ubifs ubi2:config_a /tmp/config_a
then
- echo "mount -t ubifs ubi2:config_a /mnt/config_a succeeded" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:config_a /tmp/config_a succeeded" >> /tmp/FirmwareUpgrade.log
else
- echo "mount -t ubifs ubi2:config_a /mnt/config_a failed" >> /tmp/FirmwareUpgrade.log
+ echo "mount -t ubifs ubi2:config_a /tmp/config_a failed" >> /tmp/FirmwareUpgrade.log
echo "finished" >> /tmp/FirmwareUpgrade.log
exit 1
fi
echo "Synchronize the config" >> /tmp/FirmwareUpgrade.log
- cp -r /mnt/data/* /mnt/config_a/
- echo "Unmount /mnt/config_a" >> /tmp/FirmwareUpgrade.log
- umount /mnt/config_a
+ mkdir -p /tmp/config_a/data
+ cp -r /mnt/data/* /tmp/config_a/data
+ echo "Unmount /tmp/config_a" >> /tmp/FirmwareUpgrade.log
+ umount /tmp/config_a
echo "Detach config_a device from UBI - MTD device 5" >> /tmp/FirmwareUpgrade.log
ubidetach /dev/ubi_ctrl -m 5
fi
@@ -183,21 +185,8 @@ fi
echo "" >> /tmp/FirmwareUpgrade.log
-echo "Change uboot env..." >> /tmp/FirmwareUpgrade.log
-if df | grep rootfs_a
-then
- echo "The active firmware is a, switch to b" >> /tmp/FirmwareUpgrade.log
- echo "Modify uboot env 'bootargs'" >> /tmp/FirmwareUpgrade.log
- fw_setenv bootargs "console=ttymxc0,115200 ubi.mtd=9 root=ubi0:rootfs_b rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)"
- echo "Modify uboot env 'bootcmd'" >> /tmp/FirmwareUpgrade.log
- fw_setenv bootcmd "saveenv;nand read \${loadaddr} \${kernel_b_addr} 0x800000;nand read \${fdt_addr} \${dtb_b_addr} 0x100000;bootz \${loadaddr} - \${fdt_addr}"
-else
- echo "The active firmware is b, switch to a" >> /tmp/FirmwareUpgrade.log
- echo "Modify uboot env 'bootargs'" >> /tmp/FirmwareUpgrade.log
- fw_setenv bootargs "console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs_a rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)"
- echo "Modify uboot env 'bootcmd'" >> /tmp/FirmwareUpgrade.log
- fw_setenv bootcmd "saveenv;nand read \${loadaddr} \${kernel_a_addr} 0x800000;nand read \${fdt_addr} \${dtb_a_addr} 0x100000;bootz \${loadaddr} - \${fdt_addr}"
-fi
+echo "Replace current primary application" >> /tmp/FirmwareUpgrade.log
+fw_setenv no_good .xx
因為 rootfs 改成 read-only 的關係, 從 /mnt/rootfs_x
改成 /tmp/rootfs_x
因為 M300 應用設定需要寫入的 folder 從原本的
- /bin/mkdir -p /mnt/data
- mount -t ubifs ubi1:config_a /mnt/data
改成
- /bin/mkdir -p /mnt/data
- /bin/mkdir -p /mnt/config
- mount -t ubifs ubi1:config_a /mnt/config
- /bin/mkdir -p /mnt/config/data
- mount /mnt/config/data /mnt/data
所以在同步 primary 和 secondary application 的時候
從原本的
- mkdir -p /mnt/config_x
- mount -t ubifs ubi2:config_x /mnt/config_x
- cp -r /mnt/data/* /mnt/config_x/
- umount /mnt/config_x
改成
- mkdir -p /tmp/config_x
- mount -t ubifs ubi2:config_x /tmp/config_x
- mkdir -p /tmp/config_x/data
- cp -r /mnt/data/* /tmp/config_x/data
- umount /tmp/config_x
因為修改了 uboot env 的關係
現在只要利用 fw_setenv no_good .xx
便可以讓下一次開機時交換 primary application
其實就是讓目前的 primary application 的 no_good
counter 被記滿兩點
這樣下次開機就會被換掉了
#!/bin/bash
# uboot env
uboot_env_ver=1.0
if fw_printenv uboot_env_ver | grep $uboot_env_ver
then
echo "uboot_env_ver $uboot_env_ver match, nothing to do"
exit 0
else
echo "uboot_env_ver not match, patching for the current applicaiton"
fi
# set the current uboot env version into uboot env MTD
fw_setenv uboot_env_ver $uboot_env_ver
# set nandread_a and nandread_b
fw_setenv nandread_a 'nand read ${loadaddr} ${kernel_a_addr} 0x800000; \
nand read ${fdt_addr} ${dtb_a_addr} 0x100000;'
fw_setenv nandread_b 'nand read ${loadaddr} ${kernel_b_addr} 0x800000; \
nand read ${fdt_addr} ${dtb_b_addr} 0x100000;'
# set bootargs_a and bootargs_b
fw_setenv bootargs_a 'echo bootargs for room a; \
setenv bootargs console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs_a rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)'
fw_setenv bootargs_b 'echo bootargs for room b; \
setenv bootargs console=ttymxc0,115200 ubi.mtd=9 root=ubi0:rootfs_b rootfstype=ubifs mtdparts=gpmi-nand:3m(boot),1m(boot_env),10m(kernel_a),2m(dtb_a),96m(rootfs_a),16m(config_a),4m(misc),10m(kernel_b),2m(dtb_b),96m(rootfs_b),-(config_b)'
# ======================================================================
# | dual image
# ======================================================================
fw_setenv no_good .
# according to the current running rootfs to set the primary app
if df | grep rootfs_a
then
fw_setenv app_primary a
fw_setenv app_secondary b
else
fw_setenv app_primary b
fw_setenv app_secondary a
fi
fw_setenv app_replace 'if test ${app_primary} = a; \
then echo a to b; setenv app_primary b; setenv app_secondary a; \
else echo b to a; setenv app_primary a; setenv app_secondary b; \
fi'
fw_setenv app_choose 'if test ${no_good} = ".xx"; \
then echo replace primary app; run app_replace; setenv no_good .; saveenv; \
else echo run primary app; \
fi'
# ======================================================================
# | bootcmd
# ======================================================================
# turn on the system LED first - shortest the bootdelay
fw_setenv bootdelay 1
fw_setenv bootcmd 'mw 0x020A0004 00100000 1; mw 0x020E01CC 0x00000005 1; \
run app_choose; \
echo run bootargs_${app_primary}; run bootargs_${app_primary}; \
run nandread_${app_primary}; \
setenv no_good ${no_good}x; saveenv; \
bootz ${loadaddr} - ${fdt_addr}'
commit 時要寫什麼呢
- now our dual image has failover ability
- rootfs read-only ready - some icos module init fail
git push... ok
加了 gps 的 web page
搭配 google map 演出
因為只是 demo 性質所以目前目前並沒有搭配的 CGI
git commit
git push
反正目前只是作展示
把預設的位置改到公司來
use /bin/mkdir -p /home/log
to make a dir since /home/log
is not exit after fgtool flashing the firmware
@@ -65,6 +65,7 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
# ======================================================================
/bin/mkdir -p /mnt/data
/bin/mkdir -p /mnt/config
/bin/mkdir -p /home/log
if df | grep rootfs_a
then
mfgtool flashing firmware 後是沒有 /home/log
的...
要注意阿...
不然 rc.local
就停在這邊導致系統起不來