20171101_jeffrey - silenceuncrio/diary GitHub Wiki
回到 emmc 的進度
從 profile 出發
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
試著把 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
先把 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(+)
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
參考目前的 uboot_env.sh
盤一下 EMMC 版本的 uboot env
目前使用下述的 uboot env 已經可以順利的透過 no_good
來切換 dual image a
和 b
# 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
先盤一下 uboot
的 mx6ul_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
直接上了
- 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 \
"
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>
把剛剛透過 bitbake u-boot-imx -c compile
產生的 u-boot.imx
取代掉 manufacturing_tool\emmc\mfgtools\Profiles\Linux\OS Firmware\files\u-boot-imx6ulevk_sd.imx
燒吧
確認這樣的 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