20190417_jeffrey - silenceuncrio/diary GitHub Wiki

0920

review

先整理一下 wiki 讓大家知道發生了什麼事

會講到 iweb 之前用的 workaround 方式

1000

先拿一個 M300 2.0 之前的版本抓一些資訊好簡單介紹一下歷史

以最近的 MR401-G V1.77 為例

MR401-G# mgmt info list
 active-image = a
 hostname     = MR401-G
 lan-mac      = 4E:34:CD:2D:F4:84
 wan-mac      = 3E:2F:E0:8F:2C:C0
 sn           =
 smcsv        = 013600721772E76A
 hmcsv        = 013600721772E76A
 bootloader   = 1.0
 version      = V1.77
 modem        = EC25AUFAR02A02M4G
 IMEI         = 861107031198691
 uptime       = 00:04:01

剛開機完會看到兩個 iweb process

bash-4.3# ps aux | grep iweb
root      2094  0.0  0.3  10584  1796 pts/3    Ss+  00:42   0:00 iweb -p 80 -d /www
root      6447  1.5  0.5  10584  2728 pts/8    Ss+  00:44   0:00 iweb -p 443 -d /www -s
root      7431  0.0  0.0   1768   320 ttymxc0  S+   00:44   0:00 grep iweb

HTTP (PID 2094) 與 HTTPS (PID 6447)

透過 HTTP 做第一次的 login 之後

bash-4.3# ps aux | grep iweb
root      2094  0.2  0.5  10684  2552 pts/3    Ss+  00:42   0:00 iweb -p 80 -d /www
root      6447  0.0  0.5  10584  2728 pts/8    Ss+  00:44   0:00 iweb -p 443 -d /www -s
root     26836  0.0  0.0   1768   320 ttymxc0  S+   00:49   0:00 grep iweb

shit!

V1.77 就會了

再往前追吧

1015

M300_M301\firmware\20190110_V1.75\Hytec

HWL-2501-DS# mgmt info list
 active-image = a
 hostname     = HWL-2501-DS
 lan-mac      = 4E:19:A2:BA:C2:BA
 wan-mac      = CA:32:BC:27:BE:19
 sn           =
 smcsv        = 013600531752E69E
 hmcsv        = 013600531752E69E
 version      = V1.75
 modem        = EC25AUFAR02A02M4G
 IMEI         =
 uptime       = 00:01:53

剛開機完會看到兩個 iweb process

bash-4.3# ps aux | grep iweb
root      2092  0.0  0.3  10568  1792 pts/3    Ss+  07:04   0:00 iweb -p 80 -d /www
root      3279  0.4  0.5  10568  2664 pts/5    Ss+  07:04   0:00 iweb -p 443 -d /www -s
root      7043  0.0  0.0   1768   320 ttymxc0  S+   07:05   0:00 grep iweb

HTTP (PID 2092) 與 HTTPS (PID 3279)

透過 HTTP 做第一次的 login 之後

我們會利用 /cgi-bin/syslog.cgi?act=gen_log 這個 request 來讓 iweb 死掉

這是一個利用以往的現象得到的 workaround 方式

沒有為什麼

不這樣的後續使用者發這個 request 也是會造成 iweb 死亡

目前 web 這個 icos module 有能力讓 process 再度啟動

bash-4.3# ps aux | grep iweb
root      9701  2.2  0.6  10568  3088 pts/8    Ss+  07:06   0:00 iweb -p 443 -d /www -s
root      9702  0.9  0.5  10568  2948 pts/5    Ss+  07:06   0:00 iweb -p 80 -d /www
root     10288  0.0  0.0   1768   320 ttymxc0  S+   07:06   0:00 grep iweb

浴火重生後的 HTTP (PID 9701) 以及沒它的事也跟著自殺順便復活(未知靈異現象)的 HTTPS (PID 9702)

HTTPS 幾次的存取都正常

V1.75 HWL-2501-DS HTTPS image

1055

最新的 M360 也發生一樣的現象

看來換 web server 這件事不能慢了

1110

再把所謂的 現象 抓一下資訊

M300_M301\firmware\20190314_V1.77\Xentino

MR401-G# mgmt info list
 active-image = a
 hostname     = MR401-G
 lan-mac      = B6:2D:74:DC:B3:27
 wan-mac      = D2:92:47:C0:94:C0
 sn           =
 smcsv        = 013600721772E76A
 hmcsv        = 013600721772E76A
 bootloader   = 1.0
 version      = V1.77
 modem        = EC25AUFAR02A02M4G
 IMEI         =
 uptime       = 00:01:19
MR401-G#

剛開機完會看到兩個 iweb process

bash-4.3# ps aux | grep iweb
root      1604  0.0  0.3  10584  1796 pts/3    Ss+  02:14   0:00 iweb -p 80 -d /www
root      1607  0.3  0.4  10584  2472 pts/4    Ss+  02:14   0:00 iweb -p 443 -d /www -s
root      7962  0.0  0.0   1768   320 ttymxc0  S+   02:16   0:00 grep iweb

HTTP (PID 1604) 與 HTTPS (PID 1607)

透過 HTTP 做第一次的 login 之後

我們一樣利用 /cgi-bin/syslog.cgi?act=gen_log 這個 request 試著讓 iweb 死掉

殺不死!!!

bash-4.3# ps aux | grep iweb
root      1604  0.5  0.5  10684  2552 pts/3    Ss+  02:14   0:00 iweb -p 80 -d /www
root      1607  0.2  0.4  10584  2472 pts/4    Ss+  02:14   0:00 iweb -p 443 -d /www -s
root     11225  0.0  0.0   1768   320 ttymxc0  S+   02:17   0:00 grep iweb

沒有浴火重生的 HTTPS

M300_M301\firmware\20190314_V1.77\Xentino image

1125

昨天的 code 還沒 commit

review 一下改了什麼

➜  M300 git:(feature/lighttpd) ✗ git status
On branch feature/lighttpd
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   meta-proscend/recipes-extended/lighttpd/lighttpd_1.4.36.bbappend

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   meta-proscend/recipes-core/prosrc/prosrc_0.1.bb
        modified:   proscend/prosrc/icos/icoslib/entry.c

...

新增的 lighttpd_1.4.36.bbappend

➜  M300 git:(feature/lighttpd) ✗ cat meta-proscend/recipes-extended/lighttpd/lighttpd_1.4.36.bbappend

SRC_URI = "http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${PV}.tar.xz \
        file://index.html.lighttpd \
        file://lighttpd.conf \
        file://lighttpd \
        file://lighttpd.service \
        file://pkgconfig.patch \
        "

RDEPENDS_${PN} += " \
               lighttpd-module-cgi \
"

# DISABLING INIT SCRIPT START LINKS
INITSCRIPT_PARAMS = "disable"

  • SRC_URI - remove patch 0001-mod_cgi-buffers-data-without-bound.patch
    • The patch uses internal API functions from older versions of lighttpd which don't exist in this version.
  • RDEPENDS_${PN} - add lighttpd-module-cgi for mod_cgi.so
  • INITSCRIPT_PARAMS - disable init script start link

修改的

diff --git a/meta-proscend/recipes-core/prosrc/prosrc_0.1.bb b/meta-proscend/recipes-core/prosrc/prosrc_0.1.bb
old mode 100755
new mode 100644
index 6f0a623..095fd09
--- a/meta-proscend/recipes-core/prosrc/prosrc_0.1.bb
+++ b/meta-proscend/recipes-core/prosrc/prosrc_0.1.bb
@@ -88,6 +88,9 @@ RDEPENDS_${PN} += " traceroute"
 # iptable tool
 RDEPENDS_${PN} += " conntrack-tools"

+# lighttpd
+RDEPENDS_${PN} += " lighttpd"
+
 # ======================================

 # Build dependence
diff --git a/proscend/prosrc/icos/icoslib/entry.c b/proscend/prosrc/icos/icoslib/entry.c
index 1804073..b2e41f7 100644
--- a/proscend/prosrc/icos/icoslib/entry.c
+++ b/proscend/prosrc/icos/icoslib/entry.c
@@ -86,7 +86,7 @@ sAttStringSet moduleInitAry[] =
     { "MODULE_CWMP", MODULE_CWMP },
 #endif

-    { "MODULE_WEB", MODULE_WEB },
+//    { "MODULE_WEB", MODULE_WEB },
     { "MODULE_DNAT", MODULE_DNAT },
     { "MODULE_SNAT", MODULE_SNAT },

@@ -1131,7 +1131,7 @@ int   ICOS_Bootinit(void)
     //ICOS_broadcast(0, NULL, 0, ICOS_BOOTINIT_DONE); // Ariel
     led_on(LED_SYSTEM_STATUS);
     ICOS_msg_sendto(0, MODULE_NETMON,NULL, 0,ICOS_BOOTINIT_DONE);
-    ICOS_msg_sendto(0, MODULE_WEB,NULL, 0,ICOS_BOOTINIT_DONE);
+    //ICOS_msg_sendto(0, MODULE_WEB,NULL, 0,ICOS_BOOTINIT_DONE);
     return ICOS_SUCCESS;
 }
  • do not init the web module (iweb)
  • do not send even ICOS_BOOTINIT_DONE to MODULE_WEB or the notify handler will start the iweb process

上 code 吧

先不 push

commit 984b7c052b82834a2ad1f794f830f6e1eb0ec732
Refs: [feature/lighttpd]
Author: jeffrey <[email protected]>
Date:   Wed Apr 17 11:36:30 2019 +0800

    add lighttpd to replace the current web server iweb(mongoose)
    - lighttpd_1.4.36.bbappend
      - `SRC_URI` - remove patch 0001-mod_cgi-buffers-data-without-bound.patch
        - The patch uses internal API functions from older versions of lighttpd which don't exist in this version.
      - RDEPENDS_${PN} - add lighttpd-module-cgi for mod_cgi.so
      - INITSCRIPT_PARAMS - disable init script start link
    - do not init the web module (iweb)
    - do not send even ICOS_BOOTINIT_DONE to MODULE_WEB or the notify handler will start the iweb process

 meta-proscend/recipes-core/prosrc/prosrc_0.1.bb          |  3 +++
 .../recipes-extended/lighttpd/lighttpd_1.4.36.bbappend   | 16 ++++++++++++++++
 proscend/prosrc/icos/icoslib/entry.c                     |  4 ++--
 3 files changed, 21 insertions(+), 2 deletions(-)

1300

先來準備一下要給 yuncore 的 image

wifi 的部分已經做好了

先拉一份 M330 最新的 code

1530

給 yuncore 的文件跟 image 都準備好了

1535

來追一下 issue 0000481: user upgrade from v1.72 to v1.77, DUT hang on uboot

這問題可能會很嚴重

先用 mfgtools 燒一個 M300_M301\firmware\20180905_V1.72\XentinoMR401-G_013600721722C2B2_mfgtools.zip

紀錄一下開機後的 uboot env

bash-4.3# fw_printenv
baudrate=115200
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)
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
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)
stderr=serial
stdin=serial
stdout=serial
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;
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)
app_primary=a
app_secondary=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_choose=if test ${no_good} = ".xx"; \
then echo replace primary app; run app_replace; setenv no_good .; \
else echo run primary app; \
fi
turnon_sysled=mw 0x020E01CC 0x00000005 1; mw 0x020A0004 00100000 1; mw 0x020A0000 00000000 1
reset_ethernet_and_mobile=mw 0x020E00BC 00000005 1; mw 0x020E00C0 00000005 1; \
mw 0x0209C004 C0000000 1; mw 0x020AC004 00000080 1; \
mw 0x0209C000 00000000 1; mw 0x020AC000 00000000 1; \
sleep 1; \
mw 0x0209C000 C0000000 1; mw 0x020AC000 00000080 1
bootdelay=0
bootcmd_v1.3=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}
uboot_env_ver=1.3
uboot_env_1.3_bondary_1=therer are 3 bondary
uboot_env_1.3_bondary_2=therer are 3 bondary
uboot_env_1.3_bondary_3=therer are 3 bondary
bootcmd=run bootcmd_v1.3
hw_mcsv=013600721722C2B2
serialno=NA
no_good=.
wdog_prev_image=1
bash-4.3#

透過 web ui upgrade M300_M301\firmware\20190314_V1.77\XentinoMR401-G_v1.77_013600721772E76A.img

firmware upgrade 完成

重開機前的 uboot env

bash-4.3# fw_printenv
baudrate=115200
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)
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
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)
stderr=serial
stdin=serial
stdout=serial
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;
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)
app_primary=a
app_secondary=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_choose=if test ${no_good} = ".xx"; \
then echo replace primary app; run app_replace; setenv no_good .; \
else echo run primary app; \
fi
turnon_sysled=mw 0x020E01CC 0x00000005 1; mw 0x020A0004 00100000 1; mw 0x020A0000 00000000 1
reset_ethernet_and_mobile=mw 0x020E00BC 00000005 1; mw 0x020E00C0 00000005 1; \
mw 0x0209C004 C0000000 1; mw 0x020AC004 00000080 1; \
mw 0x0209C000 00000000 1; mw 0x020AC000 00000000 1; \
sleep 1; \
mw 0x0209C000 C0000000 1; mw 0x020AC000 00000080 1
bootdelay=0
bootcmd_v1.3=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}
uboot_env_ver=1.3
uboot_env_1.3_bondary_1=therer are 3 bondary
uboot_env_1.3_bondary_2=therer are 3 bondary
uboot_env_1.3_bondary_3=therer are 3 bondary
bootcmd=run bootcmd_v1.3
hw_mcsv=013600721722C2B2
serialno=NA
wdog_prev_image=1
no_good=.xx
bash-4.3#

重開機

有開起來

開起來後的 uboot env

Password: bash-4.3#
bash-4.3# fw_printenv
app_choose=if test ${no_good} = ".xx";
then echo replace primary app; run app_replace; setenv no_good .;
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 bootcmd_v1.3
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootcmd_v1.3=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}
bootdelay=0
bootloader_ver=1.0
console=ttymxc0
dtb_a_addr=0x00E00000
dtb_b_addr=0x08E00000
ethact=FEC1
ethprime=FEC
fdt_addr=0x83000000
fdt_high=0xffffffff
hw_mcsv=013600721722C2B2
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;
reset_ethernet_and_mobile=mw 0x020E00BC 00000005 1; mw 0x020E00C0 00000005 1;
mw 0x0209C004 C0000000 1; mw 0x020AC004 00000080 1;
mw 0x0209C000 00000000 1; mw 0x020AC000 00000000 1;
sleep 1;
mw 0x0209C000 C0000000 1; mw 0x020AC000 00000080 1
serialno=NA
stderr=serial
stdin=serial
stdout=serial
turnon_sysled=mw 0x020E01CC 0x00000005 1; mw 0x020A0004 00100000 1; mw 0x020A0000 00000000 1
uboot_env_1.3_bondary_1=therer are 3 bondary
uboot_env_1.3_bondary_2=therer are 3 bondary
uboot_env_1.3_bondary_3=therer are 3 bondary
uboot_env_ver=1.3
no_good=.
wdog_prev_image=2
bash-4.3#

目前開起來的 MR401-G V1.77 Identification

image

再 upgrade 一次

Active Image Partition b 把 a 一樣 upgrade 成 MR401-G_v1.77_013600721772E76A.img

1715

直接重開機

一樣可以把 kernel 帶起來

此時的 uboot env 為

bash-4.3# fw_printenv
app_choose=if test ${no_good} = ".xx";
then echo replace primary app; run app_replace; setenv no_good .;
else echo run primary app;
fi
app_primary=a
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=b
baudrate=115200
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_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 bootcmd_v1.3
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootcmd_v1.3=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}
bootdelay=0
bootloader_ver=1.0
console=ttymxc0
dtb_a_addr=0x00E00000
dtb_b_addr=0x08E00000
ethact=FEC1
ethprime=FEC
fdt_addr=0x83000000
fdt_high=0xffffffff
hw_mcsv=013600721722C2B2
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;
reset_ethernet_and_mobile=mw 0x020E00BC 00000005 1; mw 0x020E00C0 00000005 1;
mw 0x0209C004 C0000000 1; mw 0x020AC004 00000080 1;
mw 0x0209C000 00000000 1; mw 0x020AC000 00000000 1;
sleep 1;
mw 0x0209C000 C0000000 1; mw 0x020AC000 00000080 1
serialno=NA
stderr=serial
stdin=serial
stdout=serial
turnon_sysled=mw 0x020E01CC 0x00000005 1; mw 0x020A0004 00100000 1; mw 0x020A0000 00000000 1
uboot_env_1.3_bondary_1=therer are 3 bondary
uboot_env_1.3_bondary_2=therer are 3 bondary
uboot_env_1.3_bondary_3=therer are 3 bondary
uboot_env_ver=1.3
no_good=.
wdog_prev_image=1

1720

改用 mfgtools 燒一個 P:\2_Projects\3_Wireless\M300_M301\firmware\20190314_V1.77\XentinoMR401-G_013600721772E76A_mfgtools.zip

紀錄一下開機後的 uboot env

bash-4.3# fw_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=a
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=b
baudrate=115200
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_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=0
bootloader_ver=1.0
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;
stderr=serial
stdin=serial
stdout=serial
uboot_env_ver=1.3
hw_mcsv=013600721772E76A
serialno=NA
no_good=.
wdog_prev_image=1

注意到 bootcmd 的值

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}

透過 web ui downgrade 成 M300_M301\firmware\20180905_V1.72\XentinoMR401-G_v1.72_013600721722C2B2.img

upgrade 後直接重開機

可以把 kernel 帶起來

不過此時 uboot env 的 bootcmd 已經被改掉了 - bootcmd=run bootcmd_v1.3

word: bash-4.3#
bash-4.3# fw_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_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=0
bootloader_ver=1.0
console=ttymxc0
dtb_a_addr=0x00E00000
dtb_b_addr=0x08E00000
ethact=FEC1
ethprime=FEC
fdt_addr=0x83000000
fdt_high=0xffffffff
hw_mcsv=013600721772E76A
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;
serialno=NA
stderr=serial
stdin=serial
stdout=serial
uboot_env_ver=1.3
bootcmd=run bootcmd_v1.3
no_good=.
wdog_prev_image=2

這會造成下次的開機就涼涼了

U-Boot 2015.04imx_v2015.04_4.1.15_1.2.0_ga+gede7538 (Jan 28 2019 - 00:59:48)

CPU:   Freescale i.MX6UL rev1.1 at 396 MHz
CPU:   Temperature 41 C
Reset cause: POR
Board: MX6UL 14x14 EVK
I2C:   ready
DRAM:  512 MiB
turn on the IO control power
turn on sys led
reset Ethernet 1
reset Ethernet 2
reset Mobile
force_idle_bus: sda=0 scl=0 sda.gp=0x1d scl.gp=0x1c
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Net:   Phy 1 not found
PHY reset timed out
FEC1
Error: FEC1 address not set.

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

先擋一下產線不要用 V1.76 以及 V1.77 來生產

1800

剛剛找了 ariel 過去跟 shin 聊了一下

我直接說目前的現象

用 v1.76 或 v1.77 生產出來的板子

只要 downgrade 1.75 或先前的版本就會導致這個現象

shin 表示這影響不大 他可以 handle

我則是要想個辦法在 V2.0 克服這個問題

我需要整理一下情報 update 這個 issue

⚠️ **GitHub.com Fallback** ⚠️