20171101_jeffrey - silenceuncrio/diary GitHub Wiki

0900

回到 emmc 的進度

參考 20171025_jeffrey

從 profile 出發

0935

ariel 不知道設定了什麼 mac address 導致系統初始化失敗

Running local boot scripts (/etc/rc.local)uboot_env_ver=1.3
uboot_env_ver 1.3 match, nothing to do
ubi1: attaching mtd10
ubi1: scanning is finished
ubi1: attached mtd10 (name "config_b", size 16 MiB)
ubi1: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi1: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi1: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi1: good PEBs: 124, bad PEBs: 4, corrupted PEBs: 0
ubi1: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi1: max/mean erase counter: 652/510, WL threshold: 4096, image sequence number: 418583281
ubi1: available PEBs: 0, total reserved PEBs: 124, PEBs reserved for bad PEB handling: 36
ubi1: background thread "ubi_bgt1d" started, PID 249
UBI device number 1, total 124 LEBs (15745024 bytes, 15.0 MiB), available 0 LEBs (0 bytes), LEB size 126976 bytes (124.0 KiB)
UBIFS (ubi1:0): background thread "ubifs_bgt1_0" started, PID 252
UBIFS (ubi1:0): recovery needed
UBIFS (ubi1:0): recovery completed
UBIFS (ubi1:0): UBIFS: mounted UBI device 1, volume 0, name "config_b"
UBIFS (ubi1:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
UBIFS (ubi1:0): FS size: 9396224 bytes (8 MiB, 74 LEBs), journal size 1015809 bytes (0 MiB, 6 LEBs)
UBIFS (ubi1:0): reserved for root: 443806 bytes (433 KiB)
UBIFS (ubi1:0): media format: w4/r0 (latest is w4/r0), UUID 13C38AF5-D698-40FD-94BD-498AF9988001, small LPT model
ubi2: attaching mtd5
ubi2: scanning is finished
ubi2: attached mtd5 (name "config_a", size 16 MiB)
ubi2: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi2: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi2: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi2: good PEBs: 128, bad PEBs: 0, corrupted PEBs: 0
ubi2: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi2: max/mean erase counter: 536/409, WL threshold: 4096, image sequence number: 970338383
ubi2: available PEBs: 0, total reserved PEBs: 128, PEBs reserved for bad PEB handling: 40
ubi2: background thread "ubi_bgt2d" started, PID 262
UBI device number 2, total 128 LEBs (16252928 bytes, 15.5 MiB), available 0 LEBs (0 bytes), LEB size 126976 bytes (124.0 KiB)
UBIFS (ubi2:0): background thread "ubifs_bgt2_0" started, PID 265
UBIFS (ubi2:0): UBIFS: mounted UBI device 2, volume 0, name "config_a"
UBIFS (ubi2:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
UBIFS (ubi2:0): FS size: 9396224 bytes (8 MiB, 74 LEBs), journal size 1015809 bytes (0 MiB, 6 LEBs)
UBIFS (ubi2:0): reserved for root: 443806 bytes (433 KiB)
UBIFS (ubi2:0): media format: w4/r0 (latest is w4/r0), UUID 9166DBC0-9E7E-4472-AE44-5CC0F96F3907, small LPT model
UBIFS (ubi2:0): un-mount UBI device 2
UBIFS (ubi2:0): background thread "ubifs_bgt2_0" stops
ubi2: detaching mtd5
ubi2: mtd5 is detached
ifconfig: SIOCSIFHWADDR: Cannot assign requested address
error

m300 login:

也無法 login 來修正 rc.local

0945

試著把 rc.local 下述的區塊搬到最後面去

ethaddr=$(fw_printenv ethaddr 2>/dev/null | awk -F"=" '{ print $2 }')
if [[ "$ethaddr" =~ ^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$ ]]; then
    ifconfig eth0 hw ether $ethaddr

    mac=$(printf "%d" 0x`echo $ethaddr | sed -e 's/://g'`)
    mac=$(expr $mac + 1)
    mac=$(printf "%012x" $mac | sed -e 's/../&:/g' -e 's/:$//')

    echo "Note: ifconfig eth1 hw ether $mac"
    ifconfig eth1 hw ether $mac
fi

1100

先把 eMMC 需要的兩個 profiles 先建起來

commit 52ad13e5222eceed4eb94965c5cbd672541d7860
Author: jeffrey <[email protected]>
Date:   Wed Nov 1 10:58:33 2017 +0800

    Add 2 profiles since we have additional storage choice - eMMC
    - 2 profiles in folder 'M300E' have 'PROSRC_EMMC=y'
    - the other profiles have '# PROSRC_EMMC is not set'
      - implicit means the storage choice is NAND Flash

 proscend/mconfig/Config.in                         |   1 +
 .../mconfig/configs/Azuretec/0_LTR-101/defconfig   |   1 +
 .../mconfig/configs/Azuretec/1_LTRG-101/defconfig  |   1 +
 proscend/mconfig/configs/M300/0_GENERIC/defconfig  |   1 +
 proscend/mconfig/configs/M300/1_GPS/defconfig      |   1 +
 proscend/mconfig/configs/M300/2_PLANET/defconfig   |   1 +
 .../mconfig/configs/M300/3_GPS_PLANET/defconfig    |   1 +
 proscend/mconfig/configs/M300E/0_GENERIC/defconfig | 138 +++++++++++++++++++++
 proscend/mconfig/configs/M300E/1_GPS/defconfig     | 138 +++++++++++++++++++++
 9 files changed, 283 insertions(+)

1120

參考 20171025_jeffrey

emmc 的 uboot 的 bootcmd 做了下述這些事

  • mmc dev ${mmcdev};
  • mmc dev ${mmcdev};
  • mmc rescan;
  • setenv bootargs console=${console},${baudrate} root=${mmcroot}
  • fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
  • fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
  • bootz ${loadaddr} - ${fdt_addr};

各變數的值

  • ${mmcdev} = 1
  • ${console} = ttymxc0
  • ${baudrate} = 115200
  • ${mmcroot} = /dev/mmcblk1p2 rootwait rw
  • ${mmcpart} = 1
  • ${loadaddr} = 0x80800000
  • ${image} = zImage
  • ${fdt_addr} = 0x83000000
  • ${fdt_file} = imx6ul-14x14-evk.dtb

如果要把 dual image a 帶起來 需要

  • /dev/mmcblk1p1
    • zImage_a
    • dtb_a
  • /dev/mmcblk1p2
    • rootfs_a

修改的 uboot env 變數如下

  • ${image} = zImage_a
  • ${fdt_file} = imx6ul-14x14-evk.dtb

把 dual image b 帶起來 需要

  • /dev/mmcblk1p1
    • zImage_b
    • dtb_b
  • /dev/mmcblk1p3
    • rootfs_b

修改的 uboot env 變數如下

  • ${mmcroot} = /dev/mmcblk1p3 rootwait rw
  • ${image} = zImage_b
  • ${fdt_file} = imx6ul-14x14-evk_b.dtb

1300

參考目前的 uboot_env.sh

盤一下 EMMC 版本的 uboot env

1415

目前使用下述的 uboot env 已經可以順利的透過 no_good 來切換 dual image ab

# only keep in uboot default
setenv app_1 'a'
setenv app_2 'b'



# dual image uboot env version
setenv uboot_env_ver emmc_v1.0



# common env
setenv mmcdev 1
setenv console ttymxc0
setenv baudrate 115200
setenv mmcpart 1
setenv loadaddr 0x80800000
setenv fdt_addr 0x83000000



# dual image no good counter

setenv no_good .



# dual image bootargs

setenv bootargs_a 'echo bootargs dual image a; \
setenv bootargs console=${console},${baudrate} root=/dev/mmcblk1p2 rootwait rw'

setenv bootargs_b 'echo bootargs dual image b; \
setenv bootargs console=${console},${baudrate} root=/dev/mmcblk1p3 rootwait rw'



# dual image fatload

setenv fatload_a 'echo fatload dual image a; \
fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage_a; \
fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} imx6ul-14x14-evk_a.dtb;'

setenv fatload_b 'echo fatload dual image b; \
fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage_a; \
fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} imx6ul-14x14-evk_a.dtb;'



# dual image app replace

setenv app_replace 'echo App Replace; \
if test ${app_1} = a; \
then echo App 1 from Dual Image a to b; setenv app_1 b; setenv app_2 a; \
else echo App 1 from Dual Image b to a; setenv app_1 a; setenv app_2 b; \
fi'



# dual image app choose

setenv app_choose 'echo App Choose; \
if test ${no_good} = ".xx"; \
then echo Replace App 1; run app_replace; setenv no_good .; \
else echo Run App 1; \
fi'



# dual image bootcmd emmc v1.0

setenv bootcmd_emmc_v1.0 'echo bootcmd_emmc_v1.0; \
mmc dev ${mmcdev}; \
mmc dev ${mmcdev}; \
mmc rescan; \
run app_choose; \
run bootargs_${app_1}; \
run fatload_${app_1}; \
setenv no_good ${no_good}x; \
saveenv; \
bootz ${loadaddr} - ${fdt_addr}'



setenv bootcmd 'run bootcmd_emmc_v1.0'

可以考慮先來 patch uboot

1455

先盤一下 ubootmx6ul_14x14_evk.h 預計修改的部分

目前預計修改的部分如下

#if defined(CONFIG_SYS_BOOT_NAND)
    /* ignore */
#else
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	CONFIG_VIDEO_MODE \
	"script=boot.scr\0" \
	"image=zImage\0" \
	"console=ttymxc0\0" \
	"fdt_high=0xffffffff\0" \
	"initrd_high=0xffffffff\0" \
	"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
	"fdt_addr=0x83000000\0" \
	"boot_fdt=try\0" \
	"ip_dyn=yes\0" \
	"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
	"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
	"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
	"mmcautodetect=yes\0" \
	"mmcargs=setenv bootargs console=${console},${baudrate} " \
	    CONFIG_BOOTARGS_CMA_SIZE \
		"root=${mmcroot}\0" \
	"loadbootscript=" \
		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
	"bootscript=echo Running bootscript from mmc ...; " \
		"source\0" \
	"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
	"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
	"mmcboot=echo Booting from mmc ...; " \
		"run mmcargs; " \
		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
			"if run loadfdt; then " \
				"bootz ${loadaddr} - ${fdt_addr}; " \
			"else " \
				"if test ${boot_fdt} = try; then " \
					"bootz; " \
				"else " \
					"echo WARN: Cannot load the DT; " \
				"fi; " \
			"fi; " \
		"else " \
			"bootz; " \
		"fi;\0" \
	"netargs=setenv bootargs console=${console},${baudrate} " \
	    CONFIG_BOOTARGS_CMA_SIZE \
		"root=/dev/nfs " \
	"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
		"netboot=echo Booting from net ...; " \
		"run netargs; " \
		"if test ${ip_dyn} = yes; then " \
			"setenv get_cmd dhcp; " \
		"else " \
			"setenv get_cmd tftp; " \
		"fi; " \
		"${get_cmd} ${image}; " \
		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
			"if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
				"bootz ${loadaddr} - ${fdt_addr}; " \
			"else " \
				"if test ${boot_fdt} = try; then " \
					"bootz; " \
				"else " \
					"echo WARN: Cannot load the DT; " \
				"fi; " \
			"fi; " \
		"else " \
			"bootz; " \
		"fi;\0"

#define CONFIG_BOOTCOMMAND \
	   "mmc dev ${mmcdev};" \
	   "mmc dev ${mmcdev}; if mmc rescan; then " \
		   "if run loadbootscript; then " \
			   "run bootscript; " \
		   "else " \
			   "if run loadimage; then " \
				   "run mmcboot; " \
			   "else run netboot; " \
			   "fi; " \
		   "fi; " \
	   "else run netboot; fi"
#endif

1505

直接上了

  • bitbake u-boot-imx -c devshell
  • quilt new uboot_env_emmc_v1.0.patch
  • quilt add include/configs/mx6ul_14x14_evk.h

來修改 include/configs/mx6ul_14x14_evk.h

#if defined(CONFIG_SYS_BOOT_NAND)
#define CONFIG_EXTRA_ENV_SETTINGS \
	/* ignore */
#else
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	"console=ttymxc0\0" \
	"fdt_high=0xffffffff\0" \
	"initrd_high=0xffffffff\0" \
	"fdt_addr=0x83000000\0" \
	"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
	"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
	"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
	"mmcautodetect=yes\0" \
	\
	/* only keep in uboot default */ \
	"app_1=a\0" \
	"app_2=b\0" \
	\
	/* dual image uboot env version */ \
	"uboot_env_ver=emmc_v1.0\0" \
	\
	/* dual image no good counter */ \
	"no_good=.\0" \
	\
	/* dual image bootargs */ \
	"bootargs_a=echo bootargs dual image a;" \
		"setenv bootargs console=${console},${baudrate} root=/dev/mmcblk1p2 rootwait rw\0" \
	"bootargs_b=echo bootargs dual image b;" \
		"setenv bootargs console=${console},${baudrate} root=/dev/mmcblk1p3 rootwait rw\0" \
	\
	/* dual image fatload */ \
	"fatload_a=echo fatload dual image a;" \
		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage_a;" \
		"fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} imx6ul-14x14-evk_a.dtb;\0" \
	"fatload_b=echo fatload dual image b;" \
		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage_b;" \
		"fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} imx6ul-14x14-evk_b.dtb;\0" \
	\
	/* dual image app replace */ \
	"app_replace=echo App Replace;" \
		"if test ${app_1} = a;" \
		"then echo App 1 from dual image a to b; setenv app_1 b; setenv app_2 a;" \
		"else echo App 1 from dual image b to a; setenv app_1 a; setenv app_2 b;" \
		"fi\0" \
	\
	/* dual image app choose */ \
	"app_choose=echo App Choose;" \
		"if test ${no_good} = \".xx\";" \
		"then echo Replace App 1; run app_replace; setenv no_good .;" \
		"else echo Run App 1;" \
		"fi\0" \
	\
	/* dual image bootcmd emmc v1.0 */ \
	"bootcmd_emmc_v1.0=echo bootcmd_emmc_v1.0;" \
		"mmc dev ${mmcdev};" \
		"mmc rescan;" \
		"run app_choose;" \
		"run bootargs_${app_1};" \
		"run fatload_${app_1};" \
		"setenv no_good ${no_good}x;" \
		"saveenv;" \
		"bootz ${loadaddr} - ${fdt_addr}\0" \


#define CONFIG_BOOTCOMMAND \
	"run bootcmd_emmc_v1.0"
#endif

差不多要收尾了 - quilt refresh

得到 patches/uboot_env_emmc_v1.0.patch

Index: git/include/configs/mx6ul_14x14_evk.h
===================================================================
--- git.orig/include/configs/mx6ul_14x14_evk.h
+++ git/include/configs/mx6ul_14x14_evk.h
@@ -207,82 +207,68 @@
 #else
 #define CONFIG_EXTRA_ENV_SETTINGS \
 	CONFIG_MFG_ENV_SETTINGS \
-	CONFIG_VIDEO_MODE \
-	"script=boot.scr\0" \
-	"image=zImage\0" \
 	"console=ttymxc0\0" \
 	"fdt_high=0xffffffff\0" \
 	"initrd_high=0xffffffff\0" \
-	"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
 	"fdt_addr=0x83000000\0" \
-	"boot_fdt=try\0" \
-	"ip_dyn=yes\0" \
 	"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
 	"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
 	"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
 	"mmcautodetect=yes\0" \
-	"mmcargs=setenv bootargs console=${console},${baudrate} " \
-	    CONFIG_BOOTARGS_CMA_SIZE \
-		"root=${mmcroot}\0" \
-	"loadbootscript=" \
-		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
-	"bootscript=echo Running bootscript from mmc ...; " \
-		"source\0" \
-	"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
-	"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
-	"mmcboot=echo Booting from mmc ...; " \
-		"run mmcargs; " \
-		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-			"if run loadfdt; then " \
-				"bootz ${loadaddr} - ${fdt_addr}; " \
-			"else " \
-				"if test ${boot_fdt} = try; then " \
-					"bootz; " \
-				"else " \
-					"echo WARN: Cannot load the DT; " \
-				"fi; " \
-			"fi; " \
-		"else " \
-			"bootz; " \
-		"fi;\0" \
-	"netargs=setenv bootargs console=${console},${baudrate} " \
-	    CONFIG_BOOTARGS_CMA_SIZE \
-		"root=/dev/nfs " \
-	"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
-		"netboot=echo Booting from net ...; " \
-		"run netargs; " \
-		"if test ${ip_dyn} = yes; then " \
-			"setenv get_cmd dhcp; " \
-		"else " \
-			"setenv get_cmd tftp; " \
-		"fi; " \
-		"${get_cmd} ${image}; " \
-		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-			"if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
-				"bootz ${loadaddr} - ${fdt_addr}; " \
-			"else " \
-				"if test ${boot_fdt} = try; then " \
-					"bootz; " \
-				"else " \
-					"echo WARN: Cannot load the DT; " \
-				"fi; " \
-			"fi; " \
-		"else " \
-			"bootz; " \
-		"fi;\0"
+	\
+	/* only keep in uboot default */ \
+	"app_1=a\0" \
+	"app_2=b\0" \
+	\
+	/* dual image uboot env version */ \
+	"uboot_env_ver=emmc_v1.0\0" \
+	\
+	/* dual image no good counter */ \
+	"no_good=.\0" \
+	\
+	/* dual image bootargs */ \
+	"bootargs_a=echo bootargs dual image a;" \
+		"setenv bootargs console=${console},${baudrate} root=/dev/mmcblk1p2 rootwait rw\0" \
+	"bootargs_b=echo bootargs dual image b;" \
+		"setenv bootargs console=${console},${baudrate} root=/dev/mmcblk1p3 rootwait rw\0" \
+	\
+	/* dual image fatload */ \
+	"fatload_a=echo fatload dual image a;" \
+		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage_a;" \
+		"fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} imx6ul-14x14-evk_a.dtb;\0" \
+	"fatload_b=echo fatload dual image b;" \
+		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage_b;" \
+		"fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} imx6ul-14x14-evk_b.dtb;\0" \
+	\
+	/* dual image app replace */ \
+	"app_replace=echo App Replace;" \
+		"if test ${app_1} = a;" \
+		"then echo App 1 from dual image a to b; setenv app_1 b; setenv app_2 a;" \
+		"else echo App 1 from dual image b to a; setenv app_1 a; setenv app_2 b;" \
+		"fi\0" \
+	\
+	/* dual image app choose */ \
+	"app_choose=echo App Choose;" \
+		"if test ${no_good} = \".xx\";" \
+		"then echo Replace App 1; run app_replace; setenv no_good .;" \
+		"else echo Run App 1;" \
+		"fi\0" \
+	\
+	/* dual image bootcmd emmc v1.0 */ \
+	"bootcmd_emmc_v1.0=echo bootcmd_emmc_v1.0;" \
+		"mmc dev ${mmcdev};" \
+		"mmc rescan;" \
+		"run app_choose;" \
+		"run bootargs_${app_1};" \
+		"run fatload_${app_1};" \
+		"setenv no_good ${no_good}x;" \
+		"saveenv;" \
+		"bootz ${loadaddr} - ${fdt_addr}\0" \
+
+
 
 #define CONFIG_BOOTCOMMAND \
-	   "mmc dev ${mmcdev};" \
-	   "mmc dev ${mmcdev}; if mmc rescan; then " \
-		   "if run loadbootscript; then " \
-			   "run bootscript; " \
-		   "else " \
-			   "if run loadimage; then " \
-				   "run mmcboot; " \
-			   "else run netboot; " \
-			   "fi; " \
-		   "fi; " \
-	   "else run netboot; fi"
+	"run bootcmd_emmc_v1.0"
 #endif
 
 /* Miscellaneous configurable options */

patches/uboot_env_emmc_v1.0.patch 複製到 meta-proscend/recipes-bsp/u-boot/files/

修改 meta-proscend\recipes-bsp\u-boot\u-boot-imx_2015.04.bbappend

diff --git a/meta-proscend/recipes-bsp/u-boot/u-boot-imx_2015.04.bbappend b/meta-proscend/recipes-bsp/u-boot/u-boot-imx_2015.04.bbappend
index c9b126b..d8cd58b 100644
--- a/meta-proscend/recipes-bsp/u-boot/u-boot-imx_2015.04.bbappend
+++ b/meta-proscend/recipes-bsp/u-boot/u-boot-imx_2015.04.bbappend
@@ -17,4 +17,5 @@ SRC_URI_append_m300 = " \

 SRC_URI_append_m300e = " \
     file://add_emmc_rework.patch \
+    file://uboot_env_emmc_v1.0.patch \
 "

1625

參考 20171025_jeffrey

mksdcard.sh 修改成

#!/bin/sh

# partition size in MB
BOOT_ROM_SIZE=10

# wait for the SD/MMC device node ready
while [ ! -e $1 ]
do
sleep 1
echo “wait for $1 appear”
done

# call sfdisk to create partition table
# destroy the partition table
node=$1
dd if=/dev/zero of=${node} bs=1024 count=1

sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,80M,C
100M,400M,L
500M,400M,L
900M,,L
EOF

利用 tar cvf mksdcard.sh.tar mksdcard.sh 重新產生 mksdcard.sh.tar

➜  OS Firmware git:(develop) ✗ tar cvf mksdcard.sh.tar mksdcard.sh
mksdcard.sh

ucl2.xml 修改成

<UCL>

  <CFG>
    <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
  </CFG>

  <LIST name="SDCard" desc="Choose SD Card as media">

  <CMD state="BootStrap" type="boot" 
    body="BootStrap" file ="firmware/u-boot-imx6ul%6uluboot%_sd.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%%ldo%.dtb" address="0x83000000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">Loading device tree.</CMD>


  <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>



  <!-- create partition -->
  <CMD state="Updater" type="push" 
    body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
  <CMD state="Updater" type="push" 
    body="$ tar xf $FILE "> Partitioning...</CMD>
  <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...</CMD>



  <!-- Dual Image Layout

  Device         Boot   Start     End Sectors  Size Id Type
  /dev/mmcblk1p1        20480  184319  163840   80M  c W95 FAT32 (LBA)
  /dev/mmcblk1p2       204800 1023999  819200  400M 83 Linux
  /dev/mmcblk1p3      1024000 1843199  819200  400M 83 Linux
  /dev/mmcblk1p4      1843200 7520255 5677056  2.7G 83 Linux

  /dev/mmcblk1p1 - 80M
    - zImage_a
    - dtb_a
    - zImage_b
    - dtb_b
  /dev/mmcblk1p2 - 400M
    - rootfs_a
  /dev/mmcblk1p3 - 400M
    - rootfs_b
  /dev/mmcblk1p4 - 2.7G
    - config_a
    - config_b
    - log
    - user_data

  -->



  <!-- burn uboot -->
  <CMD state="Updater" type="push" 
    body="$ dd if=/dev/zero of=/dev/mmcblk%mmc% bs=1k seek=384 conv=fsync count=129">clear u-boot arg</CMD>
  <CMD state="Updater" type="push" body="$ echo 0 > /sys/block/mmcblk%mmc%boot0/force_ro">access boot partition 1</CMD>
  <CMD state="Updater" type="push" 
    body="send" file="files/u-boot-imx6ul%6uluboot%_sd.imx">Sending u-boot.bin</CMD>
  <CMD state="Updater" type="push" 
    body="$ dd if=$FILE of=/dev/mmcblk1boot0 bs=512 seek=2">write U-Boot to sd card</CMD>
  <CMD state="Updater" type="push" 
    body="$ echo 1 > /sys/block/mmcblk%mmc%boot0/force_ro"> re-enable read-only access </CMD>
  <CMD state="Updater" type="push" 
    body="$ mmc bootpart enable 1 1 /dev/mmcblk%mmc%">enable boot partion 1 to boot</CMD>



  <CMD state="Updater" type="push" 
    body="$ while [ ! -e /dev/mmcblk%mmc%p1 ]; do sleep 1; echo \"waiting...\"; done ">Waiting for the partition 1 ready</CMD>

  <CMD state="Updater" 
    type="push" body="$ mkfs.vfat /dev/mmcblk%mmc%p1">Formatting partition 1</CMD>

  <CMD state="Updater" 
    type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p1"/>
  <CMD state="Updater" 
    type="push" body="$ mount -t vfat /dev/mmcblk%mmc%p1 /mnt/mmcblk%mmc%p1"/>

  <!-- burn dual zImage -->
  <CMD state="Updater" type="push" 
    body="send" file="files/zImage">Sending kernel</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage_a">write kernel image to partition 1 - zImage_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage_b">write kernel image to partition 1 - zImage_b</CMD>

  <!-- burn dual dtb -->
  <CMD state="Updater" type="push" 
    body="send" file="files/imx6ul-%6uldtb%%ldo%.dtb">Sending Device Tree file</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ul-%6uldtb%_a.dtb">write device tree to partition - dtb_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ul-%6uldtb%_b.dtb">write device tree to partition - dtb_b</CMD>

  <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p1">Unmounting vfat partition 1</CMD>



  <!-- burn dual rootfs -->
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p2">Formatting partition 2 - rootfs_a</CMD>
  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p3">Formatting partition 3 - rootfs_b</CMD>

  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p3"/>

  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>
  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p3 /mnt/mmcblk%mmc%p3"/>

  <CMD state="Updater" type="push" 
    body="pipe tar -jxv -C /mnt/mmcblk%mmc%p2" file="files/rootfs_nogpu.tar.bz2">Sending and writting rootfs to partition 2</CMD>
  <CMD state="Updater" type="push" 
    body="frf">Finishing rootfs write to partition 2</CMD>

  <CMD state="Updater" type="push" 
    body="pipe tar -jxv -C /mnt/mmcblk%mmc%p3" file="files/rootfs_nogpu.tar.bz2">Sending and writting rootfs to partition 3</CMD>
  <CMD state="Updater" type="push" 
    body="frf">Finishing rootfs write to partition 3</CMD>

  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p2">Unmounting partition 2</CMD>
  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p3">Unmounting partition 3</CMD>



  <CMD state="Updater" type="push" 
    body="$ mkfs.ext3 -j /dev/mmcblk%mmc%p4">Formatting partition 4</CMD>

  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4"/>

  <CMD state="Updater" type="push" 
    body="$ mount -t ext3 /dev/mmcblk%mmc%p4 /mnt/mmcblk%mmc%p4"/>

  <!-- prepare dual configurations -->
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4/config_a"/>
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4/config_b"/>

  <!-- prepare user data -->
  <CMD state="Updater" type="push" 
    body="$ mkdir -p /mnt/mmcblk%mmc%p4/user_data"/>

  <CMD state="Updater" type="push" 
    body="$ umount /mnt/mmcblk%mmc%p4">Unmounting partition 4</CMD>



  <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>

  </LIST>

</UCL>

1635

把剛剛透過 bitbake u-boot-imx -c compile 產生的 u-boot.imx

取代掉 manufacturing_tool\emmc\mfgtools\Profiles\Linux\OS Firmware\files\u-boot-imx6ulevk_sd.imx

燒吧

1650

確認這樣的 uboot 已經可以把 rootfs_a 帶起來

而且在 uboot 透過把 no_good 設成 .xx

uboot 會自動切換到 rootfs_b

先把目前的成果做 commit 吧

commit d9462ee854b737cc1520d9daeed4f1fbd16f92f7
Author: jeffrey <[email protected]>
Date:   Wed Nov 1 17:04:43 2017 +0800

    patch uboot for emmc:
    - uboot_env_ver = emmc_v1.0

    dual image layout design from mfgtool

    Device         Boot   Start     End Sectors  Size Id Type
      /dev/mmcblk1p1        20480  184319  163840   80M  c W95 FAT32 (LBA)
      /dev/mmcblk1p2       204800 1023999  819200  400M 83 Linux
      /dev/mmcblk1p3      1024000 1843199  819200  400M 83 Linux
      /dev/mmcblk1p4      1843200 7520255 5677056  2.7G 83 Linux

      /dev/mmcblk1p1 - 80M
        - zImage_a
        - dtb_a
        - zImage_b
        - dtb_b
      /dev/mmcblk1p2 - 400M
        - rootfs_a
      /dev/mmcblk1p3 - 400M
        - rootfs_b
      /dev/mmcblk1p4 - 2.7G
        - config_a
        - config_b
        - log
        - user_data

 .../Profiles/Linux/OS Firmware/mksdcard.sh         |   7 +-
 .../Profiles/Linux/OS Firmware/mksdcard.sh.tar     | Bin 10240 -> 10240 bytes
 .../mfgtools/Profiles/Linux/OS Firmware/ucl2.xml   | 102 +++++++++++----
 .../u-boot/files/uboot_env_emmc_v1.0.patch         | 139 +++++++++++++++++++++
 .../recipes-bsp/u-boot/u-boot-imx_2015.04.bbappend |   1 +
 5 files changed, 224 insertions(+), 25 deletions(-)

commit 7a43d93175eea82698340fc44ab36fdf03482623
Author: John <[email protected]>
Date:   Wed Nov 1 16:05:06 2017 +0800
⚠️ **GitHub.com Fallback** ⚠️