20180919_jeffrey - silenceuncrio/diary GitHub Wiki

0905

M360 DNS 目前決議交由 john 來負責 share memory 的正確資訊提供給 UI 層做顯示

先等一下 john 吧

0935

解析一下昨天 52XXZ upgrade image 的訊息

root@52XXZ:/ramdisk/tmp# upgrade /tmp/fullimage.img full 0 0 1

Image Header --> Data Size = 10838152
 Image Name = VR9 Fullimage

Image Header --> Data Size = 8835072
 Image Name = LTQCPE RootFS
Image contains header with name [LTQCPE RootFS]
Volume ID 4, size 69 LEBs (8902656 bytes, 8.5 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "rootfsB", alignment 1

Image Header --> Data Size = 1572800
 Image Name = MIPS LTQCPE Linux-2.6.32.42
Image contains header with name [MIPS LTQCPE Linux-2.6.32.42]
Volume ID 3, size 13 LEBs (1677312 bytes, 1.6 MiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "kernelB", alignment 1
parameter f_kernel_sizeB is not existed
Erasing 128 Kibyte @ 20000 -- 100 % complete
parameter active_bank value changed from rootfs_id=1 to B
Erasing 128 Kibyte @ 20000 -- 100 % complete
parameter update_chk value changed from c=D071DAD8 to 1

Image Header --> Data Size = 430080
 Image Name = VR9 Firmware
Image contains header with name [VR9 Firmware]
Volume ID 5, size 4 LEBs (516096 bytes, 504.0 KiB), LEB size 129024 bytes (126.0 KiB), dynamic, name "firmwareB", alignment 1
Upgrade : successfully upgraded full
root@52XXZ:/ramdisk/tmp# 

看一下 upgrade 這一支程式的簡單 help

root@52XXZ:~# upgrade
Usage : upgrade file_name image_type expand_direction saveenv_copy [reboot]
ToolChain:4.8-linaro/0.9.33.2
Version:1.0.5

對到我們下達的 command - upgrade /tmp/fullimage.img full 0 0 1

  • file_name = /tmp/fullimage.img
  • image_type = full
  • expand_direction = 0
  • saveenv_copy 1
  • reboot 0

要再深入的話可能要看 upgrade 這隻程式的 source code

winston 表示他有小修一下

翻一下有沒有 source code

暴力搜尋

➜  52XXZ git:(develop) ✗ grep -r "expand_direction"
Binary file proscend/rootfs/usr/sbin/upgrade matches
Binary file build_dir/target-mips_r2_uClibc-0.9.33.2_vrx288_gw_he_vdsl_lte/root-lantiq/usr/sbin/upgrade matches
build_dir/target-mips_r2_uClibc-0.9.33.2_vrx288_gw_he_vdsl_lte/ltq-utilities-2.4.0.21/opensrc_utilities/upgrade.c:                          ("Usage : upgrade file_name image_type expand_direction saveenv_copy [reboot]\n");
Binary file build_dir/target-mips_r2_uClibc-0.9.33.2_vrx288_gw_he_vdsl_lte/ltq-utilities-2.4.0.21/opensrc_utilities/upgrade matches
Binary file build_dir/target-mips_r2_uClibc-0.9.33.2_vrx288_gw_he_vdsl_lte/ltq-utilities-2.4.0.21/opensrc_utilities/upgrade.o matches
Binary file build_dir/target-mips_r2_uClibc-0.9.33.2_vrx288_gw_he_vdsl_lte/ltq-utilities-2.4.0.21/ipkg-lantiq/ltq-utilities/usr/sbin/upgrade matches
^C
➜  52XXZ git:(develop) ✗

進去搜尋到 *.c 的目錄瞧瞧

➜  52XXZ git:(develop) ✗ cd build_dir/target-mips_r2_uClibc-0.9.33.2_vrx288_gw_he_vdsl_lte/ltq-utilities-2.4.0.21/opensrc_utilities
➜  opensrc_utilities git:(develop) ✗ ls
command.c  command.o  crypt.c  flash.h  Makefile  mem.c  nohup    nohup.o     read_img    read_img.o   uboot_cfg.h  uboot_env.c  upgrade    upgrade_cmd.c  upgrade_core.c  upgrade.o   vsprintf.o
command.h  common.h   flash.c  flash.o  mem       mem.o  nohup.c  pagebutton  read_img.c  resetbutton  uboot_env    uboot_env.o  upgrade.c  upgrade_cmd.o  upgrade_core.o  vsprintf.c
➜  opensrc_utilities git:(develop) ✗

稍微看了一下... 滿足了一下好奇心

我想我還是直接用好了

1050

明天要去 盟創 協調一下後續生產事宜

先前 mail 給他們從 M360P_v0.07_01F400000072C2B2.img 解開得到的 sysupgrade.bin

結果他們回報說

Hi Spring

R&D 把檔案LOAD進去出現的error 如下,完整的開機log 在附檔中。

另外很抱歉因為前期跟現在的Team member 有更動過,我們詢問過之前負責的R&D 但他沒有收到 Proscend 之前給過的舊的 image ,能麻煩您這邊幫忙把當初的mail 轉給我嗎? 或是把舊板的image 再提供給我一次。

若方便的話我可以直接找 SW R&D 直接過去貴司討論,再麻煩您建議您這周可以的時間。

29.768000] jffs2: Further such events for this erase block will not be printed
[   29.820000] jffs2: Old JFFS2 bitmask found at 0x00c85cf4
[   29.832000] jffs2: You cannot use older JFFS2 filesystems with newer kernels
[   29.848000] jffs2: Old JFFS2 bitmask found at 0x00c8b418
[   29.856000] jffs2: You cannot use older JFFS2 filesystems with newer kernels
[   29.876000] jffs2: Old JFFS2 bitmask found at 0x00c9c1b8
[   29.884000] jffs2: You cannot use older JFFS2 filesystems with newer kernels
[   29.900000] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00ca0000: 0x9555 instead
[   31.348000] jffs2: Further such events for this erase block will not be printed
[   31.436000] jffs2: Empty flash at 0x00d40f34 ends at 0x00d41000
[   31.484000] jffs2: Empty flash at 0x00d41004 ends at 0x00d42000
[   31.528000] jffs2: Empty flash at 0x00d42004 ends at 0x00d44000
[   31.572000] jffs2: Empty flash at 0x00d44004 ends at 0x00d50000
[   31.604000] jffs2_scan_eraseblock(): End of filesystem marker found at 0xd60000
[   31.620000] jffs2: Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes
[   31.636000] jffs2: empty_blocks 149, bad_blocks 0, c->nr_blocks 256
[   31.648000] VFS: Cannot open root device "mtdblock5" or unknown-block(31,5): error -5
[   31.664000] Please append a correct "root=" boot option; here are the available partitions:
[   31.680000] 1f00          130560 mtdblock0  (driver?)
[   31.692000] 1f01             512 mtdblock1  (driver?)
[   31.700000] 1f02             512 mtdblock2  (driver?)
[   31.712000] 1f03             256 mtdblock3  (driver?)
[   31.720000] 1f04           32768 mtdblock4  (driver?)
[   31.732000] 1f05           32768 mtdblock5  (driver?)
[   31.740000] 1f06           16384 mtdblock6  (driver?)
[   31.752000] 1f07           16384 mtdblock7  (driver?)


Thank you
B.R.
Daphne #55568 

目前的推論是他們在 upgrade 成我們的 image 之前可能需要先清空除了 uboot 之外的 partition

nand erase 80000 7000000

不然會受到先前他們 image 的影響

畢竟我們的 image 有支持 dual image

之前寫的 wiki - Dual Image

明天也許需要帶這份文件過去 盟創 方便協調

不過屬於我們自己的 know how 盡量不要給他們看

有必要的話需要另外 mail 給他們不涉及我們 know how 的資訊

1125

稍微 review 一下 52XXZ proscend Makefile 裡跟 fullimage 有關的流程

default all:  prepare  prosrc opensrc install clean_image rootfsimage fullimage



image/uImage: $(LTQCPE_IMAGE_DIR)/uImage
	cp $(LTQCPE_IMAGE_DIR)/uImage image/



merge:
	cp -rf $(BUILD_BASE)/base_fs/default/rootfs/* $(ROOTFS_DIR)
	# ===TODO: git rm/add fail to modify base_fs/default/rootfs/home/log
	rm -f $(ROOTFS_DIR)/home/log
	mkdir -p $(ROOTFS_DIR)/home/log
	@(LC_ALL=C date +%H%M-%d%b%y > $(ROOTFS_DIR)/etc/timestamp)
	@echo ======================================================= >   $(ROOTFS_DIR)/etc/banner
	@echo $(VERTAG)-$(DATECODE) >> $(ROOTFS_DIR)/etc/banner
	@echo $(RELEASE) >> $(ROOTFS_DIR)/etc/banner
	@LC_ALL=C date -u >> $(ROOTFS_DIR)/etc/banner
	@echo ======================================================= >> $(ROOTFS_DIR)/etc/banner
	@make -C $(CUSTOMER_FS_DIR)



image/rootfs.img: merge
	$(MKSQUASHFS4) rootfs image/root.squashfs -noappend -root-owned -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -processors 1
	$(MKIMAGE) -A MIPS -O Linux -C lzma -T filesystem -e 0x00 -a 0x00 -n "LTQCPE RootFS" -d image/root.squashfs image/rootfs.img
	@rm -f image/root.squashfs



image/fullimage.img: image/rootfs.img image/uImage
	@rm -f $(FULLIMAGE).tmp
	@touch $(FULLIMAGE).tmp
	@FILE="image/rootfs.img"; \
		echo "add $$FILE to $(FULLIMAGE).tmp ..."; \
		cat $$FILE > $(FULLIMAGE).tmp; \
		len=`wc -c $$FILE | awk '{ printf $$1 }'`; pad=`expr 16 - $$len % 16`; pad=`expr $$pad % 16`; \
		while [ $$pad -ne 0 ]; do echo -n "0" >> $(FULLIMAGE).tmp; pad=`expr $$pad - 1`; done; \
		echo "    ==>$$FILE, size=$$len, pad=$$pad";
	@FILE="image/uImage"; \
		echo "add $$FILE to $(FULLIMAGE).tmp ..."; \
		cat $$FILE >> $(FULLIMAGE).tmp; \
		len=`wc -c $$FILE | awk '{ printf $$1 }'`; pad=`expr 16 - $$len % 16`; pad=`expr $$pad % 16`; \
		while [ $$pad -ne 0 ]; do echo -n "0" >> $(FULLIMAGE).tmp; pad=`expr $$pad - 1`; done; \
		echo "    ==>$$FILE, size=$$len, pad=$$pad";
	$(MKIMAGE) -A MIPS -O Linux -C none -T multi -e 0x00 -a 0x00 -n "XRX200 Fullimage" -d $(FULLIMAGE).tmp $(FULLIMAGE).img;
	@rm -f $(FULLIMAGE).tmp


clean_image:
	rm -rf image
	mkdir -p image

rootfsimage: image/rootfs.img
fullimage  : image/fullimage.img

對比一下實際在 proscend 目錄下 make cleanmake 的訊息

rm -rf image
mkdir -p image
cp -rf /home/user/proscend/base_fs/default/rootfs/* /home/user/proscend/rootfs
# ===TODO: git rm/add fail to modify base_fs/default/rootfs/home/log
rm -f /home/user/proscend/rootfs/home/log
mkdir -p /home/user/proscend/rootfs/home/log
make[1]: Entering directory `/home/user/proscend/customer_fs'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/user/proscend/customer_fs'
/home/user/staging_dir/host/bin/mksquashfs4 rootfs image/root.squashfs -noappend -root-owned -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -processors 1
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on image/root.squashfs, block size 131072.

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 131072
        compressed data, compressed metadata, compressed fragments, no xattrs
        duplicates are removed
Filesystem size 14815.91 Kbytes (14.47 Mbytes)
        28.63% of uncompressed filesystem size (51744.42 Kbytes)
Inode table size 26522 bytes (25.90 Kbytes)
        22.88% of uncompressed inode table size (115935 bytes)
Directory table size 35844 bytes (35.00 Kbytes)
        46.15% of uncompressed directory table size (77675 bytes)
Number of duplicate files found 171
Number of inodes 3515
Number of files 3000
Number of fragments 145
Number of symbolic links  270
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 245
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)
/home/user/staging_dir/host/bin/mkimage -A MIPS -O Linux -C lzma -T filesystem -e 0x00 -a 0x00 -n "LTQCPE RootFS" -d image/root.squashfs image/rootfs.img
Image Name:   LTQCPE RootFS
Created:      Wed Sep 19 03:27:39 2018
Image Type:   MIPS Linux Filesystem Image (lzma compressed)
Data Size:    15171584 Bytes = 14816.00 kB = 14.47 MB
Load Address: 00000000
Entry Point:  00000000
cp /home/user/bin/lantiq/vrx288_gw_he_vdsl_lte/uImage image/
add image/rootfs.img to image/fullimage.tmp ...
    ==>image/rootfs.img, size=15171648, pad=0
add image/uImage to image/fullimage.tmp ...
    ==>image/uImage, size=1835008, pad=0
/home/user/staging_dir/host/bin/mkimage -A MIPS -O Linux -C none -T multi -e 0x00 -a 0x00 -n "XRX200 Fullimage" -d image/fullimage.tmp image/fullimage.img;
Created:      Wed Sep 19 03:27:39 2018
Image Type:   MIPS Linux Multi-File Image (uncompressed)
Data Size:    17006664 Bytes = 16608.07 kB = 16.22 MB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 17006656 Bytes = 16608.06 kB = 16.22 MB
user@8de9e3d5af60:~/proscend$

來整理一下 Makefilemake 的訊息間的對應

Makefile - clean_image

clean_image:
	rm -rf image
	mkdir -p image

make 的訊息

rm -rf image
mkdir -p image

Makefile - merge

merge:
	cp -rf $(BUILD_BASE)/base_fs/default/rootfs/* $(ROOTFS_DIR)
	# ===TODO: git rm/add fail to modify base_fs/default/rootfs/home/log
	rm -f $(ROOTFS_DIR)/home/log
	mkdir -p $(ROOTFS_DIR)/home/log
	@(LC_ALL=C date +%H%M-%d%b%y > $(ROOTFS_DIR)/etc/timestamp)
	@echo ======================================================= >   $(ROOTFS_DIR)/etc/banner
	@echo $(VERTAG)-$(DATECODE) >> $(ROOTFS_DIR)/etc/banner
	@echo $(RELEASE) >> $(ROOTFS_DIR)/etc/banner
	@LC_ALL=C date -u >> $(ROOTFS_DIR)/etc/banner
	@echo ======================================================= >> $(ROOTFS_DIR)/etc/banner
	@make -C $(CUSTOMER_FS_DIR)

make 的訊息

cp -rf /home/user/proscend/base_fs/default/rootfs/* /home/user/proscend/rootfs
# ===TODO: git rm/add fail to modify base_fs/default/rootfs/home/log
rm -f /home/user/proscend/rootfs/home/log
mkdir -p /home/user/proscend/rootfs/home/log
make[1]: Entering directory `/home/user/proscend/customer_fs'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/user/proscend/customer_fs'

Makefile - image/rootfs.img

image/rootfs.img: merge
	$(MKSQUASHFS4) rootfs image/root.squashfs -noappend -root-owned -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -processors 1
	$(MKIMAGE) -A MIPS -O Linux -C lzma -T filesystem -e 0x00 -a 0x00 -n "LTQCPE RootFS" -d image/root.squashfs image/rootfs.img
	@rm -f image/root.squashfs

make 的訊息

/home/user/staging_dir/host/bin/mksquashfs4 rootfs image/root.squashfs -noappend -root-owned -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -processors 1
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on image/root.squashfs, block size 131072.

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 131072
        compressed data, compressed metadata, compressed fragments, no xattrs
        duplicates are removed
Filesystem size 14815.91 Kbytes (14.47 Mbytes)
        28.63% of uncompressed filesystem size (51744.42 Kbytes)
Inode table size 26522 bytes (25.90 Kbytes)
        22.88% of uncompressed inode table size (115935 bytes)
Directory table size 35844 bytes (35.00 Kbytes)
        46.15% of uncompressed directory table size (77675 bytes)
Number of duplicate files found 171
Number of inodes 3515
Number of files 3000
Number of fragments 145
Number of symbolic links  270
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 245
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)
/home/user/staging_dir/host/bin/mkimage -A MIPS -O Linux -C lzma -T filesystem -e 0x00 -a 0x00 -n "LTQCPE RootFS" -d image/root.squashfs image/rootfs.img
Image Name:   LTQCPE RootFS
Created:      Wed Sep 19 03:27:39 2018
Image Type:   MIPS Linux Filesystem Image (lzma compressed)
Data Size:    15171584 Bytes = 14816.00 kB = 14.47 MB
Load Address: 00000000
Entry Point:  00000000

Makefile - image/fullimage.img

image/fullimage.img: image/rootfs.img image/uImage
	@rm -f $(FULLIMAGE).tmp
	@touch $(FULLIMAGE).tmp
	@FILE="image/rootfs.img"; \
		echo "add $$FILE to $(FULLIMAGE).tmp ..."; \
		cat $$FILE > $(FULLIMAGE).tmp; \
		len=`wc -c $$FILE | awk '{ printf $$1 }'`; pad=`expr 16 - $$len % 16`; pad=`expr $$pad % 16`; \
		while [ $$pad -ne 0 ]; do echo -n "0" >> $(FULLIMAGE).tmp; pad=`expr $$pad - 1`; done; \
		echo "    ==>$$FILE, size=$$len, pad=$$pad";
	@FILE="image/uImage"; \
		echo "add $$FILE to $(FULLIMAGE).tmp ..."; \
		cat $$FILE >> $(FULLIMAGE).tmp; \
		len=`wc -c $$FILE | awk '{ printf $$1 }'`; pad=`expr 16 - $$len % 16`; pad=`expr $$pad % 16`; \
		while [ $$pad -ne 0 ]; do echo -n "0" >> $(FULLIMAGE).tmp; pad=`expr $$pad - 1`; done; \
		echo "    ==>$$FILE, size=$$len, pad=$$pad";
	$(MKIMAGE) -A MIPS -O Linux -C none -T multi -e 0x00 -a 0x00 -n "XRX200 Fullimage" -d $(FULLIMAGE).tmp $(FULLIMAGE).img;
	@rm -f $(FULLIMAGE).tmp

make 的訊息

cp /home/user/bin/lantiq/vrx288_gw_he_vdsl_lte/uImage image/
add image/rootfs.img to image/fullimage.tmp ...
    ==>image/rootfs.img, size=15171648, pad=0
add image/uImage to image/fullimage.tmp ...
    ==>image/uImage, size=1835008, pad=0
/home/user/staging_dir/host/bin/mkimage -A MIPS -O Linux -C none -T multi -e 0x00 -a 0x00 -n "XRX200 Fullimage" -d image/fullimage.tmp image/fullimage.img;
Created:      Wed Sep 19 03:27:39 2018
Image Type:   MIPS Linux Multi-File Image (uncompressed)
Data Size:    17006664 Bytes = 16608.07 kB = 16.22 MB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 17006656 Bytes = 16608.06 kB = 16.22 MB

1305

我可以參考一下目前 M360 打包 firmware 的方式來打包 52XXZ 的 firmware

firmware_img: sysupgrade_bin
	rm -f image/firmware.img
	rm -rf image/firmware
	cp rootfs/etc/mcsv image/mcsv
	openssl des3 -salt -in image/mcsv -out image/mcsv.enc -k 2wsx#EDC
	mkdir -p firmware
	cp image/mcsv.enc firmware
	cp image/sysupgrade.bin firmware
	cd firmware; md5sum * > firmware.md5
	tar -cf image/$(IMAGE_NAME) firmware
	cp image/$(IMAGE_NAME) image/firmware.img
	rm -rf firmware
	@echo MCSV=$(MCSV)

先試著手動執行需要的流程

user@8de9e3d5af60:~/proscend$ ls image/
fullimage.img  rootfs.img  uImage
user@8de9e3d5af60:~/proscend$ cp rootfs/etc/mcsv image/mcsv
user@8de9e3d5af60:~/proscend$ openssl des3 -salt -in image/mcsv -out image/mcsv.enc -k 2wsx#EDC
user@8de9e3d5af60:~/proscend$ mkdir -p firmware
user@8de9e3d5af60:~/proscend$ cp image/mcsv.enc firmware/
user@8de9e3d5af60:~/proscend$ cp image/fullimage.img firmware/
user@8de9e3d5af60:~/proscend$ cd firmware; md5sum * > firmware.md5
user@8de9e3d5af60:~/proscend/firmware$ cd ..
user@8de9e3d5af60:~/proscend$ tar -cf image/xxx.img firmware/
user@8de9e3d5af60:~/proscend$ cp image/xxx.img image/firmware.img
user@8de9e3d5af60:~/proscend$ rm -rf firmware/
user@8de9e3d5af60:~/proscend$ cat image/mcsv
147B00000012C2B7
user@8de9e3d5af60:~/proscend$ ls image/
firmware.img  fullimage.img  mcsv  mcsv.enc  rootfs.img  uImage  xxx.img

成功產出了需要的 firmware.img

1340

試著寫進 Makefile 裡

@@ -102,7 +102,7 @@ IMAGE_NAME  := $(MODEL_NAME)-$(shell date +"%m%d%Y").img
 .PHONY: all clean install distclean

 #default all:  prepare  prosrc opensrc install rootfsimage root_squashfs sysupgrade_bin fullimage
-default all:  prepare  prosrc opensrc install clean_image rootfsimage fullimage
+default all:  prepare  prosrc opensrc install clean_image rootfsimage fullimage firmware_img

 install:
        echo "PROSCEND INSTALL"
@@ -254,6 +254,23 @@ clean_image:
 rootfsimage: image/rootfs.img
 fullimage  : image/fullimage.img

+
+
+firmware_img: fullimage
+       rm -f image/firmware.img
+       cp rootfs/etc/mcsv image/mcsv
+       openssl des3 -salt -in image/mcsv -out image/mcsv.enc -k 2wsx#EDC
+       mkdir -p firmware
+       cp image/mcsv.enc firmware
+       cp image/fullimage.img firmware
+       cd firmware; md5sum * > firmware.md5
+       tar -cf image/$(IMAGE_NAME) firmware
+       cp image/$(IMAGE_NAME) image/firmware.img
+       rm -rf firmware
+       @echo MCSV=$(MCSV)
+
+
+
 .PHONY: buildenv_check buildenv_gen buildenv_clean penv merge

 menuconfig: pconfig pconfig_links pvars_links penv prosrc_clean openwrt-base

make 的過程多了最後這一段

rm -f image/firmware.img
cp rootfs/etc/mcsv image/mcsv
openssl des3 -salt -in image/mcsv -out image/mcsv.enc -k 2wsx#EDC
mkdir -p firmware
cp image/mcsv.enc firmware
cp image/fullimage.img firmware
cd firmware; md5sum * > firmware.md5
tar -cf image/52XXZ-09192018.img firmware
cp image/52XXZ-09192018.img image/firmware.img
rm -rf firmware
MCSV=147B00000012C2B7

看一下成果

user@8de9e3d5af60:~/proscend$ ls -al image/
total 66480
drwxr-xr-x  2 user user     4096 Sep 19 05:24 .
drwxrwxr-x 11 user user     4096 Sep 19 05:24 ..
-rw-r--r--  1 user user 17018880 Sep 19 05:24 52XXZ-09192018.img
-rw-r--r--  1 user user 17018880 Sep 19 05:24 firmware.img
-rw-r--r--  1 user user 17006728 Sep 19 05:24 fullimage.img
-rw-r--r--  1 user user       17 Sep 19 05:24 mcsv
-rw-r--r--  1 user user       40 Sep 19 05:24 mcsv.enc
-rw-r--r--  1 user user 15171648 Sep 19 05:24 rootfs.img
-rw-r--r--  1 user user  1835008 Sep 19 05:24 uImage

52XXZ-09192018.img 就是將來要 release 的 firmware 了

1355

換從 web ui 出發

目前 CGI firmware.cgi?act=progress 的錯誤如圖

image

該 CGI 觸發的行動如下

static void _progress()
{

    system("FirmwareProgress.sh");


    json_object *progress = json_object_from_file(PROGRESS);
    if (progress)
    {
        jweb.out.json.data("progress", progress);
    }
    else
    {
        jweb.out.json.fail("something happen");
    }


}

直接在 shell 下執行 FirmwareProgress.sh 就出錯了

root@52XXZ:~# FirmwareProgress.sh
.curr_time="14598.37"
/usr/sbin/icos/FirmwareProgress.sh: line 72: jq: command not found

先想辦法把 jq build 進去

參考一下 M360P 之前為了 jq 做的 commit

忘了當初 jq 這個 package 我是從哪 copy 的

不過該 package 在 M360P source code 的位置如下

➜  M360P git:(develop) ✗ ls package/utils
admswconfig  busybox    fbtest  hostap-utils  jsonfilter  mdadm       procps  px5g-standalone  shadow       ubi-utils  usbmode   usbutils    xfsprogs
bash         e2fsprogs  fuse    jq            lua         mkelfimage  px5g    robocfg          spidev_test  ugps       usbreset  util-linux

M360 有了該 package 之後

我們便可以透過 make menuconfig 把它選起來

image

發現 52XXZ 的 make menuconfig 已經有該 package

不過透過 make menuconfig save 所得到的 config 和原來的 52xxz_defconfig 一比較

差異大到令人卻步

直接把 CONFIG_PACKAGE_jq turn on 試試

@@ -2252,6 +2252,7 @@ CONFIG_PACKAGE_cpufrequtils=y
 # CONFIG_PACKAGE_iwcap is not set
 # CONFIG_PACKAGE_iwinfo is not set
 # CONFIG_PACKAGE_jpeg-tools is not set
+CONFIG_PACKAGE_jq=y
 # CONFIG_PACKAGE_jshn is not set
 # CONFIG_PACKAGE_kexec-tools is not set
 # CONFIG_PACKAGE_ldconfig is not set

build 不過

user@8de9e3d5af60:~$ make package/utils/jq/compile V=s
make[1]: Entering directory `/home/user'
...
checking for bison version... 2.5
configure: error: You need bison version 3.0 or greater, or use --disable-maintainer-mode.
make[2]: *** [/home/user/build_dir/target-mips_r2_uClibc-0.9.33.2_vrx288_gw_he_vdsl_lte/jq-1.5/.configured_] Error 1
make[2]: Leaving directory `/home/user/package/utils/jq'
make[1]: *** [package/utils/jq/compile] Error 2
make[1]: Leaving directory `/home/user'
make: *** [package/utils/jq/compile] Error 2

1510

M360P 上該 bison 的 package 版本為 3.0.2

user@10972b0a698a:~$ cat tools/bison/Makefile
#
# Copyright (C) 2008-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk

PKG_NAME:=bison
PKG_VERSION:=3.0.2

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
PKG_MD5SUM:=146be9ff9fbd27497f0bf2286a5a2082
PKG_CAT:=xzcat

HOST_BUILD_PARALLEL:=1

include $(INCLUDE_DIR)/host-build.mk

HOST_LDFLAGS += $(HOST_STATIC_LINKING)

define Host/Clean
        -$(MAKE) -C $(HOST_BUILD_DIR) uninstall
        $(call Host/Clean/Default)
endef

$(eval $(call HostBuild))

不過 52XXZ 上 bison 的 package 版本為 2.5

user@8de9e3d5af60:~$ cat tools/bison/Makefile
#
# Copyright (C) 2008-2012 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk

PKG_NAME:=bison
PKG_VERSION:=2.5

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
PKG_MD5SUM:=9dba20116b13fc61a0846b0058fbe004
PKG_CAT:=bzcat

HOST_BUILD_PARALLEL:=1

include $(INCLUDE_DIR)/host-build.mk

HOST_LDFLAGS += $(HOST_STATIC_LINKING)

define Host/Clean
        -$(MAKE) -C $(HOST_BUILD_DIR) uninstall
        $(call Host/Clean/Default)
endef

$(eval $(call HostBuild))

直接拿 M360P 的 tools/bison 來用

➜  52XXZ git:(develop) ✗ rm -rf tools/bison
➜  52XXZ git:(develop) ✗ cp -r ../M360P/tools/bison tools

build 過了

user@8de9e3d5af60:~$ make tools/bison/compile
 make[1] tools/bison/compile
 make[2] -C tools/m4 compile
 make[2] -C tools/m4 install
 make[2] -C tools/flex compile
 make[2] -C tools/flex install
 make[2] -C tools/bison compile

再 build 一次 package/utils/jq

user@8de9e3d5af60:~$ make package/utils/jq/compile
 make[1] package/utils/jq/compile
 make[2] -C package/toolchain compile
 make[2] -C package/utils/jq compile

把 proscend 外層的 openwrt 再 build 一次吧... ok

再進 proscend 再 build 一次 image... ok

upgrade 52XXZ via uboot - run update_fullimage... ok

開機再次確認 FirmwareProgress.sh

root@52XXZ:~# FirmwareProgress.sh
root@52XXZ:~# cat /tmp/FirmwareUpgrade.progress.json
{"state":"idle","status":"idle","curr_time":"70.87"}

整理一下先上 code 吧

不過 /proscend/Makefile 先不上

@@ -102,7 +102,7 @@ IMAGE_NAME  := $(MODEL_NAME)-$(shell date +"%m%d%Y").img
 .PHONY: all clean install distclean

 #default all:  prepare  prosrc opensrc install rootfsimage root_squashfs sysupgrade_bin fullimage
-default all:  prepare  prosrc opensrc install clean_image rootfsimage fullimage
+default all:  prepare  prosrc opensrc install clean_image rootfsimage fullimage firmware_img

 install:
        echo "PROSCEND INSTALL"
@@ -254,6 +254,23 @@ clean_image:
 rootfsimage: image/rootfs.img
 fullimage  : image/fullimage.img

+
+
+firmware_img: fullimage
+       rm -f image/firmware.img
+       cp rootfs/etc/mcsv image/mcsv
+       openssl des3 -salt -in image/mcsv -out image/mcsv.enc -k 2wsx#EDC
+       mkdir -p firmware
+       cp image/mcsv.enc firmware
+       cp image/fullimage.img firmware
+       cd firmware; md5sum * > firmware.md5
+       tar -cf image/$(IMAGE_NAME) firmware
+       cp image/$(IMAGE_NAME) image/firmware.img
+       rm -rf firmware
+       @echo MCSV=$(MCSV)
+
+
+
 .PHONY: buildenv_check buildenv_gen buildenv_clean penv merge

 menuconfig: pconfig pconfig_links pvars_links penv prosrc_clean openwrt-base

1600

commit b3be1c09dc07ea2da3005646a1cb01637f9126d6
Refs: [develop], {origin/develop}, {origin/HEAD}
Author: jeffrey <[email protected]>
Date:   Wed Sep 19 16:01:35 2018 +0800

    enable the 'jq' package:
    - need bison version 3.0 or greater

 52xxz_defconfig                                |   1 +
 dl/bison-3.0.2.tar.xz                          | Bin 0 -> 1927296 bytes
 dl/jq-1.5.tar.gz                               | Bin 0 -> 739309 bytes
 tools/bison/Makefile                           |  10 +++++-----
 tools/bison/patches/000-relocatable.patch      |  20 --------------------
 tools/bison/patches/010-intl-stub-compat.patch |   8 ++++----
 tools/bison/patches/100-fix-gets-removal.patch |  17 +++++++++--------
 7 files changed, 19 insertions(+), 37 deletions(-)

1610

firmware.cgi?act=progress 已經可以正常運作

image

1620

為了讓 FirmwareUpgrade.sh 能正常執行

我需要 md5sum

目前該功能沒被啟動

image

修正 52xxz_defconfig

@@ -513,7 +513,7 @@ CONFIG_BUSYBOX_CONFIG_FEATURE_LS_TIMESTAMPS=y
 CONFIG_BUSYBOX_CONFIG_FEATURE_LS_USERNAME=y
 CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR=y
 CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
-# CONFIG_BUSYBOX_CONFIG_MD5SUM is not set
+CONFIG_BUSYBOX_CONFIG_MD5SUM=y
 CONFIG_BUSYBOX_CONFIG_MKDIR=y
 # CONFIG_BUSYBOX_CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
 # CONFIG_BUSYBOX_CONFIG_MKFIFO is not set

重新 source proenv.sh 後先 build proscend 外層... ok

再進 proscend build image... ok

再次前進

出現錯誤

root@52XXZ:/ramdisk/tmp/firmware# ls
firmware.md5   fullimage.img  mcsv.enc
root@52XXZ:/ramdisk/tmp/firmware# cat firmware.md5
cbd88a2992cecacbc2d1f82627f2992c  fullimage.img
da42328de01a395c384c75d894324ae7  mcsv.enc
root@52XXZ:/ramdisk/tmp/firmware# md5sum -c firmware.md5
md5sum: can't open '-c': No such file or directory
8dbb5a71125227fbbc89543e9b51b5b2  firmware.md5

比較一下 52XXZ 和 M360P 上 md5sum 的版本差異

52XXZ

root@52XXZ:/ramdisk/tmp/firmware# md5sum --help
BusyBox v1.17.1 (2018-09-19 08:31:59 UTC) multi-call binary.

Usage: md5sum [OPTIONS] [FILE]...

Print MD5 checksums

M360P

root@M360-P:/tmp/firmware# md5sum --help
BusyBox v1.22.1 (2018-09-14 04:24:50 UTC) multi-call binary.

Usage: md5sum [-c[sw]] [FILE]...

Print or check MD5 checksums

        -c      Check sums against list in FILEs
        -s      Don't output anything, status code shows success
        -w      Warn about improperly formatted checksum lines

busyBox 升級這條路困難重重

我得想辦法自己寫了

再把 diff 開起來用

@@ -513,7 +513,7 @@ CONFIG_BUSYBOX_CONFIG_FEATURE_LS_TIMESTAMPS=y
 CONFIG_BUSYBOX_CONFIG_FEATURE_LS_USERNAME=y
 CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR=y
 CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
-# CONFIG_BUSYBOX_CONFIG_MD5SUM is not set
+CONFIG_BUSYBOX_CONFIG_MD5SUM=y
 CONFIG_BUSYBOX_CONFIG_MKDIR=y
 # CONFIG_BUSYBOX_CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
 # CONFIG_BUSYBOX_CONFIG_MKFIFO is not set
@@ -611,7 +611,7 @@ CONFIG_BUSYBOX_CONFIG_WHICH=y
 CONFIG_BUSYBOX_CONFIG_AWK=y
 CONFIG_BUSYBOX_CONFIG_FEATURE_AWK_LIBM=y
 # CONFIG_BUSYBOX_CONFIG_CMP is not set
-# CONFIG_BUSYBOX_CONFIG_DIFF is not set
+ CONFIG_BUSYBOX_CONFIG_DIFF=y
 # CONFIG_BUSYBOX_CONFIG_ED is not set
 # CONFIG_BUSYBOX_CONFIG_PATCH is not set
 CONFIG_BUSYBOX_CONFIG_SED=y