20170113_jeffrey - silenceuncrio/diary GitHub Wiki
-
0910 - 直接把
m300_v1.1_012C000000129880.tar
解開到 mfgtool 去燒錄程式 -
1045 - uboot一開始就把系統燈點亮 -
bootdelay
改短更好 - 1515 - m300 週會 - Dual Images 結論 - 不要只給一次機會
-
1715 - 搭配這一版的 uboot env 我們也要修正
FirmwareUpgrade.sh
早上 morris 拿了 5 片 m300 麻煩我燒錄程式
這五片的 nand flash 都是空的
需要 mfgtool 來把前幾天準備好的 firmware 燒錄到 m300 的 nand flash 去
目前最新的 firmware - http://192.168.0.242/RD/M300/tags/v1.1
因應未來的需要 - http://192.168.0.242/RD/M300/commit/eb5615697a7e0510d3a6806e531a600c9398e19d
從 core-image-minimal-m300.tar.bz2
改成 rootfs.tar.bz2
因為 FirmwareUpgrade.sh
需要做因應修改的關係...
mfgtool 燒錄上去的 firmware 並沒有修改過的 FirmwareUpgrade.sh
... 所以沒有辦法透過 web 來做 v1.1 的 firmware upgrade
直接 git checkout v1.1 自己做出適合 mfgtool 使用的 images... fail
| systemcfg.c: In function 'UpdateSystemInformation':
| systemcfg.c:434:17: warning: implicit declaration of function 'macaddr_get2' [-Wimplicit-function-declaration]
| macaddr_get2(LAN_IF_NAME,ethaddr);
| ^
| systemcfg.c:435:60: warning: too many arguments for format [-Wformat-extra-args]
| snprintf(pInfo->szMac,sizeof(pInfo->szMac),"%02x:%02x:%02x:%02x:%02x:%02x",
| ^
| systemcfg.c:435:60: warning: too many arguments for format [-Wformat-extra-args]
| systemcfg.c:492:39: error: 'GIT_HASH' undeclared (first use in this function)
| sprintf(pInfo->szSwVersion, "%s", GIT_HASH);
| ^
| systemcfg.c:492:39: note: each undeclared identifier is reported only once for each function it appears in
| make[4]: *** [systemcfg.o] Error 1
| make[4]: Leaving directory `/var/m300/proscend/prosrc/icos/icoslib/system'
| make[3]: *** [system] Error 2
| make[3]: Leaving directory `/var/m300/proscend/prosrc/icos/icoslib'
| make[2]: *** [default] Error 2
| make[2]: Leaving directory `/var/m300/proscend/prosrc/icos'
| make[1]: *** [icos] Error 2
| make[1]: Leaving directory `/var/m300/proscend/prosrc'
| make: *** [all] Error 2
| WARNING: exit code 1 from a shell command.
| ERROR: oe_runmake failed
| ERROR: Function failed: do_compile (log file is located at /var/m300/build_small/tmp/work/cortexa7hf-vfp-neon-poky-linux-gnueabi/prosrc/0.1-r0/temp/log.do_compile.732)
ERROR: Task 340 (/var/m300/meta-proscend/recipes-core/prosrc/prosrc_0.1.bb, do_compile) failed with exit code '1'
算了... 直接把 m300_v1.1_012C000000129880.tar
解開
把需要的 file 放到 mfgtool 去
修改 ucl2.xml
- rootfs.tar.bz2
<UCL>
<CFG>
<STATE name="BootStrap" dev="MX6SL" vid="15A2" pid="0063"/>
<STATE name="BootStrap" dev="MX6D" vid="15A2" pid="0061"/>
<STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
<STATE name="BootStrap" dev="MX6SX" vid="15A2" pid="0071"/>
<STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
<STATE name="BootStrap" dev="MX7D" vid="15A2" pid="0076"/>
<STATE name="Updater" dev="MSC" vid="066F" pid="37FF"/>
</CFG>
<LIST name="NAND Flash" desc="Choose NAND as media">
<CMD state="BootStrap" type="boot"
body="BootStrap" file ="firmware/u-boot.imx">Loading U-boot</CMD>
<CMD state="BootStrap" type="load"
file="firmware/zImage" address="0x80800000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" >Loading Kernel.</CMD>
<CMD state="BootStrap" type="load"
file="firmware/%initramfs%" address="0x83800000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading Initramfs.</CMD>
<CMD state="BootStrap" type="load"
file="firmware/zImage-imx6ul-%6uldtb%-%nanddtb%.dtb" address="0x83000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading device tree.</CMD>
<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>
<!--burn the uboot to NAND: -->
<CMD state="Updater" type="push"
body="$ mount -t debugfs debugfs /sys/kernel/debug">Mounting debugfs</CMD>
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd0 0 0">Erasing Boot partition</CMD>
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd1 0 0">Erasing Boot env partition</CMD>
<CMD state="Updater" type="push"
body="send" file="files/u-boot.imx" ifdev="MX6UL">Sending u-boot.bin</CMD>
<CMD state="Updater" type="push"
body="$ kobs-ng init -x -v --chip_0_device_path=/dev/mtd0 $FILE">Flashing Bootloader</CMD>
<!--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>
來幫忙一開始就把 m300 的系統燈點亮
參考 meta-proscend\recipes-kernel\linux\files\m300_ra2_io.patch
+ gpio-leds {
+ compatible = "gpio-leds";
+ pinctrl-names = "default";
+
+ sys {
+ label = "sys-status";
+ gpios = <&gpio2 20 1>;
+ linux,default-trigger = "timer";
+ };
+
+ vpn {
+ label = "vpn";
+ gpios = <&gpio2 16 1>;
+ };
+
+ rssi-m {
+ label = "rssi-m";
+ gpios = <&gpio4 22 1>;
+ };
+
+ rssi-l {
+ label = "rssi-l";
+ gpios = <&gpio2 19 1>;
+ };
+
+ sim-1 {
+ label = "sim-1";
+ gpios = <&gpio2 21 1>;
+ };
+
+ sim-2 {
+ label = "sim-2";
+ gpios = <&gpio2 18 1>;
+ };
+
+ alarm {
+ label = "alarm";
+ gpios = <&gpio5 2 1>;
+ };
+ };
};
再參考 https://github.com/silenceuncrio/diary/wiki/20160727_jeffrey
得知要參考 i.MX 6UltraLite Applications Processor Reference Manual
其中的 26.2 External Signals
的 Table 26-1. GPIO External Signals
sys
這顆燈在該 table 描述如下
Instance | Signal | Pad | Mode |
---|---|---|---|
GPIO2 | IO20 | SD1_DATA2 | ALT5 |
理論上用以下的 uboot command 就能點燈了
- GPIO2_GDIR - mw 0x020A0004 00100000 1
- SW_MUX_CTL_PAD_SD1_DATA2 - mw 0x020E01CC 0x00000005 1
寫在 uboot env 裡的 bootcmd
從這樣
=> printenv bootcmd
bootcmd=saveenv;nand read ${loadaddr} ${kernel_b_addr} 0x800000;nand read ${fdt_addr} ${dtb_b_addr} 0x100000;bootz ${loadaddr} - ${fdt_addr}
寫成這樣
=> printenv bootcmd
bootcmd=mw 0x020A0004 00100000 1; mw 0x020E01CC 0x00000005 1; saveenv;nand read ${loadaddr} ${kernel_b_addr} 0x800000;nand read ${fdt_addr} ${dtb_b_addr} 0x100000;bootz ${loadaddr} - ${fdt_addr}
如果 bootdelay
能配合改短就更好了
今天早上沒有會議室可以用
所以 m300 週會挪到下午開 剛剛才開完
針對 Proposal - Dual Images(Code Redundancy) 有個結論
- 不要只給一次機會沒開起來就做 replace primary 的動作
修改了 proposal
有整理出實際可行的 uboot env
=> printenv
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
app_primary=b
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
app_secondary=a
baudrate=115200
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)
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)
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)
bootcmd=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}
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=3
console=ttymxc0
dtb_a_addr=0x00E00000
dtb_b_addr=0x08E00000
ethact=FEC1
ethprime=FEC
fdt_addr=0x83000000
fdt_high=0xffffffff
initrd_addr=0x83800000
initrd_high=0xffffffff
kernel_a_addr=0x00400000
kernel_b_addr=0x08400000
loadaddr=0x80800000
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" 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)
nandread_a=nand read ${loadaddr} ${kernel_a_addr} 0x800000;nand read ${fdt_addr} ${dtb_a_addr} 0x100000;
nandread_b=nand read ${loadaddr} ${kernel_b_addr} 0x800000;nand read ${fdt_addr} ${dtb_b_addr} 0x100000;
no_good=.
panel=TFT43AB
Environment size: 2316/1048572 bytes
=>
application 記得使用 fw_setenv no_good .
來 reset no_good
counter
否則集滿兩張就要被換掉了
搭配這一版的 uboot env
我們也要修正 FirmwareUpgrade.sh
把原本的
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 "" >> /tmp/FirmwareUpgrade.log
echo "Replace current primary application" >> /tmp/FirmwareUpgrade.log
fw_setenv no_good .xx
就是讓目前的 primary application 自願集滿兩張 no_good
來讓 u-boot
把它換掉