20170214_jeffrey - silenceuncrio/diary GitHub Wiki

0915

昨天 因應 M300 的 uboot reset eth1, eth2 和 LTE module 這個需求 所產生的 fimrware

已經利用 mfgtool 燒錄了兩片 M300 給 morris

不過 morris 退還給我說測一下是好的 然後又不能動了...

目前推斷是 morris 上電之後並未等到 M300 Linux 的 rc.local 執行完畢就又重開機了

兩次之後 uboot 會切換 primary app

但另一個 app 所在的磁區是空的... 造成開機異常

目前先透過 web 再 upgrade 一次

在另一個磁區也寫入 firmware

先這樣讓 morris 再用看看

然後要考慮 mfgtool flashing firmware 時要兩個 partition 都燒錄了

0950

看著 morris 做個幾次實驗之後...

就是看看 ethernet 1 的 reset pin 電壓正不正常

然後關電再開... 看看 ethetnet 2 的 reset pin...

然後關電再開... 看看 mobile 的 reset pin...

然後發現 reset pin 的電壓沒被拉下來...

接上 console 開機

U-Boot 2015.04imx_v2015.04_4.1.15_1.2.0_ga+gede7538 (Jan 26 2017 - 04:01:06)

CPU:   Freescale i.MX6UL rev1.1 at 396 MHz
CPU:   Temperature 39 C
Reset cause: POR
Board: MX6UL 14x14 EVK
I2C:   ready
DRAM:  512 MiB
force_idle_bus: sda=0 scl=0 sda.gp=0x1d scl.gp=0x1c
NAND:  256 MiB
MMC:   FSL_SDHC: 0
Display: TFT43AB (480x272)
Video: 480x272x24
In:    serial
Out:   serial
Err:   serial
Net:   FEC1
Error: FEC1 address not set.

Normal Boot
Hit any key to stop autoboot:  0
## Error: "bootcmd_v1.1" not defined
=>

bootcmd_v1.1 竟然不見了

真是太詭異了... >_<

1005

目前懷疑是 rc.local 每一次的 fw_setenv bootcmd 'run bootcmd_v1.1' 的某一次

就把 bootcmd_v1.1 洗掉了...

把原本的 rc.local

# ======================================================================
# | apply the uboot env variables related to current application
# ======================================================================
/usr/sbin/icos/uboot_env.sh

# ======================================================================
# | run bootcmd_v1.1 define in uboot_env.sh
# ======================================================================
fw_setenv bootcmd 'run bootcmd_v1.1'

以及 uboot_env.sh

fw_setenv bootcmd_v1.1 'run turnon_sysled; run reset_ethernet_and_mobile; \
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}'

改成

rc.local

# ======================================================================
# | apply the uboot env variables related to current application
# ======================================================================
/usr/sbin/icos/uboot_env.sh

# ======================================================================
# | run bootcmd_v1.1 define in uboot_env.sh
# ======================================================================
fw_setenv bootcmd 'run m300_boot'

uboot_env.sh

fw_setenv m300_boot 'run turnon_sysled; run reset_ethernet_and_mobile; \
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}'

這樣一來 m300_boot 應該就不會受到 bootcmd 的影響了吧

大膽假設... 小心求證

1020

morris 給我的兩片 M300 CPU 板子分別是 1 號和 2 號

利用 mfgtool 燒錄完 1 號 後

重開機

進 uboot 寫 hw_mcsv

setenv hw_mcsv 012C000000000000
saveenv

開機進 Linux, 使用 web 做 upgrade...

rootfs 寫到一半... M300 自己重開機了...

之前沒遇過這現象...

再透過 web 再做一次 upgrade... 這次就好了

自己反覆地上電拔電... 做了十來次都正常

關鍵的 m300_boot 並沒有消失不見

先拿這片 1 號 CPU 板讓 morris 試試

4 號 CPU 板先放我這邊