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 板先放我這邊