Commit 632c1e3a66efe949ed0978f80d2aebccd0b17c93

Authored by Eric Lee
1 parent 42b7ca7de6

Yocto Gatesgarth meta layer support for SMARC-iMX8MQ, Initial Release

Showing 15 changed files with 443 additions and 34 deletions Inline Diff

1 # We have a conf and classes directory, add to BBPATH 1 # We have a conf and classes directory, add to BBPATH
2 BBPATH .= ":${LAYERDIR}" 2 BBPATH .= ":${LAYERDIR}"
3 3
4 # We have a packages directory, add to BBFILES 4 # We have a packages directory, add to BBFILES
5 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ 5 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
6 ${LAYERDIR}/recipes-*/*/*.bbappend" 6 ${LAYERDIR}/recipes-*/*/*.bbappend"
7 7
8 BBFILE_COLLECTIONS += "smarcimx8mp" 8 BBFILE_COLLECTIONS += "smarcimx8mq"
9 BBFILE_PATTERN_smarcimx8mp := "^${LAYERDIR}/" 9 BBFILE_PATTERN_smarcimx8mq := "^${LAYERDIR}/"
10 BBFILE_PRIORITY_smarcimx8mp = "12" 10 BBFILE_PRIORITY_smarcimx8mq = "13"
11 LAYERSERIES_COMPAT_smarcimx8mp = "warrior zeus gatesgarth" 11 LAYERSERIES_COMPAT_smarcimx8mq = "warrior zeus gatesgarth"
12 12
13 # Define new EULAs and add them to the list defined in meta-freescale. 13 # Define new EULAs and add them to the list defined in meta-freescale.
14 # See fsl-eula-unpack.bbclass. 14 # See fsl-eula-unpack.bbclass.
15 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V13 = "1b4db4b25c3a1e422c0c0ed64feb65d2" 15 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V13 = "1b4db4b25c3a1e422c0c0ed64feb65d2"
16 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V16 = "e9e880185bda059c90c541d40ceca922" 16 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V16 = "e9e880185bda059c90c541d40ceca922"
17 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V17 = "cf3f9b8d09bc3926b1004ea71f7a248a" 17 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V17 = "cf3f9b8d09bc3926b1004ea71f7a248a"
18 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V18 = "231e11849a4331fcbb19d7f4aab4a659" 18 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V18 = "231e11849a4331fcbb19d7f4aab4a659"
19 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19 = "a632fefd1c359980434f9389833cab3a" 19 FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19 = "a632fefd1c359980434f9389833cab3a"
20 20
21 FSL_EULA_FILE_MD5SUMS_append = " \ 21 FSL_EULA_FILE_MD5SUMS_append = " \
22 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V13} \ 22 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V13} \
23 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V16} \ 23 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V16} \
24 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V17} \ 24 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V17} \
25 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V18} \ 25 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V18} \
26 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19} \ 26 ${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19} \
27 " 27 "
28 28
29 # Override the EULA defined in meta-freescale. 29 # Override the EULA defined in meta-freescale.
30 FSL_EULA_FILE = "${LAYERDIR}/../EULA.txt" 30 FSL_EULA_FILE = "${LAYERDIR}/../EULA.txt"
31 FSL_EULA_FILE_MD5SUM = "${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19}" 31 FSL_EULA_FILE_MD5SUM = "${FSL_EULA_FILE_MD5SUM_LA_OPT_NXP_SOFTWARE_LICENSE_V19}"
32 32
33 HOSTTOOLS_NONFATAL_append = " bc rsync xxd" 33 HOSTTOOLS_NONFATAL_append = " bc rsync xxd"
34 34
35 EMB_UBOOT_MIRROR ?= "git://git@git.embedian.com/developer/smarc-t335x-uboot.git" 35 EMB_UBOOT_MIRROR ?= "git://git@git.embedian.com/developer/smarc-t335x-uboot.git"
36 EMB_KERNEL_MIRROR ?= "git://git@git.embedian.com/developer/smarc-fsl-linux-kernel.git" 36 EMB_KERNEL_MIRROR ?= "git://git@git.embedian.com/developer/smarc-fsl-linux-kernel.git"
37 37
38 MIRRORS += " \ 38 MIRRORS += " \
39 ${EMB_UBOOT_MIRROR} git://github.com/embedian/smarc-uboot.git;protocol=git;branch=${SRCBRANCH} \n \ 39 ${EMB_UBOOT_MIRROR} git://github.com/embedian/smarc-uboot.git;protocol=git;branch=${SRCBRANCH} \n \
40 ${EMB_KERNEL_MIRROR} git://github.com/embedian/smarc-fsl-linux-kernel.git;protocol=git;branch=${SRCBRANCH} \n \ 40 ${EMB_KERNEL_MIRROR} git://github.com/embedian/smarc-fsl-linux-kernel.git;protocol=git;branch=${SRCBRANCH} \n \
41 " 41 "
42 42
conf/machine/include/smarc-common.inc
1 DISTRO_FEATURES_FILTER_NATIVESDK += "wayland" 1 DISTRO_FEATURES_FILTER_NATIVESDK += "wayland"
2 2
3 MACHINE_USES_VIVANTE_KERNEL_DRIVER_MODULE ?= "0" 3 MACHINE_USES_VIVANTE_KERNEL_DRIVER_MODULE ?= "0"
4 4
5 # Overrides for imx-base.inc 5 # Overrides for imx-base.inc
6 DEFAULTTUNE_mx8mp ?= "cortexa53-crypto" 6 DEFAULTTUNE_mx8mp ?= "cortexa53-crypto"
7 7
8 IMX_DEFAULT_BSP = "nxp" 8 IMX_DEFAULT_BSP = "nxp"
9 9
10 MACHINE_SOCARCH_FILTER_remove = "alsa-lib gstreamer1.0 imx-codec" 10 MACHINE_SOCARCH_FILTER_remove = "alsa-lib gstreamer1.0 imx-codec"
11 11
12 # Use latest SDMA firmware from firmware-imx instead of upstream linux-firmware 12 # Use latest SDMA firmware from firmware-imx instead of upstream linux-firmware
13 MACHINE_FIRMWARE_remove_mx8 = "linux-firmware-imx-sdma-imx7d" 13 MACHINE_FIRMWARE_remove_mx8 = "linux-firmware-imx-sdma-imx7d"
14 14
15 MACHINE_FIRMWARE_append_mx8 = " linux-firmware-ath10k firmware-imx-sdma firmware-imx-regulatory" 15 MACHINE_FIRMWARE_append_mx8 = " linux-firmware-ath10k firmware-imx-sdma firmware-imx-regulatory"
16 MACHINE_FIRMWARE_remove_mx8mp = "firmware-imx-easrc-imx8mn firmware-imx-xcvr-imx8mp firmware-sof-imx" 16 MACHINE_FIRMWARE_remove_mx8mp = "firmware-imx-easrc-imx8mn firmware-imx-xcvr-imx8mp firmware-sof-imx"
17 MACHINE_FIRMWARE_append_mx8mp = " firmware-imx-easrc firmware-imx-xcvr sof-imx" 17 MACHINE_FIRMWARE_append_mx8mp = " firmware-imx-easrc firmware-imx-xcvr sof-imx"
18 18
19 # NXP WiFi firmware & extra Wlan SDK 19 # NXP WiFi firmware & extra Wlan SDK
20 MACHINE_FIRMWARE_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8987', 'linux-firmware-nxp89xx', '', d)}" 20 MACHINE_FIRMWARE_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8987', 'linux-firmware-nxp89xx', '', d)}"
21 MACHINE_FIRMWARE_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8997', 'linux-firmware-nxp89xx', '', d)}" 21 MACHINE_FIRMWARE_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8997', 'linux-firmware-nxp89xx', '', d)}"
22 MACHINE_EXTRA_RRECOMMENDS_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8987', 'nxp-wlan-sdk kernel-module-nxp89xx', '', d)}" 22 MACHINE_EXTRA_RRECOMMENDS_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8987', 'nxp-wlan-sdk kernel-module-nxp89xx', '', d)}"
23 MACHINE_EXTRA_RRECOMMENDS_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8997', 'nxp-wlan-sdk kernel-module-nxp89xx', '', d)}" 23 MACHINE_EXTRA_RRECOMMENDS_append = " ${@bb.utils.contains('MACHINE_FEATURES', 'nxp8997', 'nxp-wlan-sdk kernel-module-nxp89xx', '', d)}"
24 24
25 # MCore Demo apps to /lib/firmware 25 # MCore Demo apps to /lib/firmware
26 MACHINE_EXTRA_RRECOMMENDS_append_mx8mp = " imx-m7-demos" 26 MACHINE_EXTRA_RRECOMMENDS_append_mx8mp = " imx-m7-demos"
27 MACHINE_EXTRA_RRECOMMENDS_append_mx8mq = " imx-m4-demos"
27 28
28 MACHINE_GSTREAMER_1_0_PLUGIN_mx8 ?= "imx-gst1.0-plugin" 29 MACHINE_GSTREAMER_1_0_PLUGIN_mx8 ?= "imx-gst1.0-plugin"
29 30
30 PREFERRED_VERSION_weston_mx8 ?= "9.0.0.imx" 31 PREFERRED_VERSION_weston_mx8 ?= "9.0.0.imx"
31 32
32 PREFERRED_VERSION_wayland-protocols_mx8 = "1.20.imx" 33 PREFERRED_VERSION_wayland-protocols_mx8 = "1.20.imx"
33 34
34 PREFERRED_VERSION_libdrm_mx8 ?= "2.4.102.imx" 35 PREFERRED_VERSION_libdrm_mx8 ?= "2.4.102.imx"
35 36
36 PREFERRED_VERSION_isp-imx ?= "4.2.2.6.1" 37 PREFERRED_VERSION_isp-imx ?= "4.2.2.6.1"
37 PREFERRED_VERSION_basler-camera ?= "4.2.2.6.1" 38 PREFERRED_VERSION_basler-camera ?= "4.2.2.6.1"
38 39
39 PREFERRED_VERSION_optee-client_mx8 = "3.10.0.imx" 40 PREFERRED_VERSION_optee-client_mx8 = "3.10.0.imx"
40 PREFERRED_VERSION_optee-os_mx8 = "3.10.0.imx" 41 PREFERRED_VERSION_optee-os_mx8 = "3.10.0.imx"
41 PREFERRED_VERSION_optee-test_mx8 = "3.10.0.imx" 42 PREFERRED_VERSION_optee-test_mx8 = "3.10.0.imx"
42 43
43 SOC_DEFAULT_IMAGE_FSTYPES_remove = "wic.gz" 44 SOC_DEFAULT_IMAGE_FSTYPES_remove = "wic.gz"
44 SOC_DEFAULT_IMAGE_FSTYPES_append = " wic.bz2 tar.bz2" 45 SOC_DEFAULT_IMAGE_FSTYPES_append = " wic.bz2 tar.bz2"
45 46
46 OPTEE_BOOT_IMAGE_mx8 ?= "tee.bin" 47 OPTEE_BOOT_IMAGE_mx8 ?= "tee.bin"
47 48
48 IMAGE_BOOT_FILES_append = " \ 49 IMAGE_BOOT_FILES_append = " \
49 ${@bb.utils.contains('COMBINED_FEATURES', 'xen', 'xen', '', d)} \ 50 ${@bb.utils.contains('COMBINED_FEATURES', 'xen', 'xen', '', d)} \
50 " 51 "
51 52
52 IMAGE_INSTALL_append = " \ 53 IMAGE_INSTALL_append = " \
53 ${@bb.utils.contains('COMBINED_FEATURES', 'jailhouse', 'jailhouse', '', d)} \ 54 ${@bb.utils.contains('COMBINED_FEATURES', 'jailhouse', 'jailhouse', '', d)} \
54 ${@bb.utils.contains('MACHINE_FEATURES', 'optee', 'packagegroup-fsl-optee-imx', '', d)} \ 55 ${@bb.utils.contains('MACHINE_FEATURES', 'optee', 'packagegroup-fsl-optee-imx', '', d)} \
55 ${@bb.utils.contains('COMBINED_FEATURES', 'xen', 'imx-xen xen-tools', '', d)} \ 56 ${@bb.utils.contains('COMBINED_FEATURES', 'xen', 'imx-xen xen-tools', '', d)} \
56 " 57 "
57 58
58 MACHINE_FEATURES_append_imx = " nxp8987" 59 MACHINE_FEATURES_append_imx = " nxp8987"
59 60
60 # Overrides for all MACHINE.conf with optee support 61 # Overrides for all MACHINE.conf with optee support
61 UBOOT_CONFIG_OPTEE_CONFIG = "mx${OPTEE_BIN_EXT}_optee_config" 62 UBOOT_CONFIG_OPTEE_CONFIG = "mx${OPTEE_BIN_EXT}_optee_config"
62 UBOOT_CONFIG[sd-optee] = "${UBOOT_CONFIG_OPTEE_CONFIG},sdcard" 63 UBOOT_CONFIG[sd-optee] = "${UBOOT_CONFIG_OPTEE_CONFIG},sdcard"
63 64
64 65
65 # LF still doesn't support wireless now, need to remove it temporarily 66 # LF still doesn't support wireless now, need to remove it temporarily
66 # qca9377 is not ready for imx8mmevk 67 # qca9377 is not ready for imx8mmevk
67 MACHINE_FEATURES_remove = "qca9377 mrvl8997" 68 MACHINE_FEATURES_remove = "qca9377 mrvl8997"
68 69
conf/machine/smarcimx8mq2g.conf
File was created 1 #@TYPE: Machine
2 #@NAME: EMBEDIAN SMARC-iMX8MQ CPU Module with 2GB LPDDR4
3 #@SOC: i.MX8MQ
4 #@DESCRIPTION: Machine configuration for Embedian SMARC-iMX8MQ
5 #@MAINTAINER: Eric Lee <eric.lee@embedian.com>
6
7 MACHINEOVERRIDES =. "mx8:mx8m:mx8mq:"
8
9 require conf/machine/include/imx-base.inc
10 require conf/machine/include/tune-cortexa53.inc
11 require conf/machine/include/smarc-common.inc
12
13 MACHINE_FEATURES += " usbgadget vfat ext2 alsa serial pci wifi bluetooth nxp8997"
14
15 IMAGE_FEATURES += "package-management"
16
17 # Embedian BSP default providers
18 PREFERRED_PROVIDER_virtual/kernel_smarcimx8mq2g ?= "linux-smarcimx8mq"
19 PREFERRED_VERSION_linux-smarcimx8mq2g_smarcimx8mq2g = "5.10"
20
21 KERNEL_DEVICETREE = " \
22 embedian/imx8mq-smarc.dtb \
23 embedian/imx8mq-smarc-dcss-lvds.dtb \
24 embedian/imx8mq-smarc-lcdif-lvds.dtb \
25 embedian/imx8mq-smarc-hdmi.dtb \
26 embedian/imx8mq-smarc-dp.dtb \
27 embedian/imx8mq-smarc-dual-display.dtb \
28 embedian/imx8mq-smarc-m4.dtb \
29 embedian/imx8mq-smarc-m4-dcss-lvds.dtb \
30 embedian/imx8mq-smarc-m4-lcdif-lvds.dtb \
31 embedian/imx8mq-smarc-m4-hdmi.dtb \
32 embedian/imx8mq-smarc-m4-dp.dtb \
33 embedian/imx8mq-smarc-m4-dual-display.dtb \
34 "
35
36 MACHINE_FEATURES_remove_smarcimx8mq2g = "qca6174"
37 MACHINE_FEATURES_append_smarcimx8mq2g = " bcm43455 bcm4356 bcm4359 nxp8997"
38 WKS_FILE_DEPENDS_append_smarcimx8mq2g = " imx-m4-demos"
39 IMAGE_BOOT_FILES += " imx8mq_m4_TCM_hello_world.bin \
40 imx8mq_m4_TCM_rpmsg_lite_pingpong_rtos_linux_remote.bin \
41 imx8mq_m4_TCM_rpmsg_lite_str_echo_rtos.bin \
42 "
43
44 PREFERRED_PROVIDER_u-boot_smarcimx8mq2g = "u-boot-smarcimx8mq"
45 PREFERRED_PROVIDER_virtual/bootloader_smarcimx8mq2g = "u-boot-smarcimx8mq"
46
47 UBOOT_CONFIG ??= "sd"
48 UBOOT_CONFIG[sd] = "smarcimx8mq_2g_ser3_defconfig,sdcard"
49 SPL_BINARY = "spl/u-boot-spl.bin"
50
51 # Set DDR FIRMWARE
52 DDR_FIRMWARE_NAME = "lpddr4_pmu_train_1d_imem.bin lpddr4_pmu_train_1d_dmem.bin lpddr4_pmu_train_2d_imem.bin lpddr4_pmu_train_2d_dmem.bin"
53
54 # Set u-boot DTB
55 UBOOT_DTB_NAME = "imx8mq-smarc.dtb"
56
57 # Set imx-mkimage boot target
58 IMXBOOT_TARGETS = "flash_evk flash_evk_no_hdmi flash_dp_evk"
59
60 # Set Serial console
61 SERIAL_CONSOLES = "115200;ttymxc0"
62
63 IMAGE_BOOTLOADER = "imx-boot"
64
65 LOADADDR = ""
66 UBOOT_SUFFIX = "bin"
67 UBOOT_MAKE_TARGET = ""
68 IMX_BOOT_SEEK = "33"
69
70 OPTEE_BIN_EXT = "8mq"
71
72 MACHINE_EXTRA_RDEPENDS += " \
73 imx-boot \
74 packagegroup-tools-bluetooth \
75 pm-utils \
76 kmod \
77 hdparm \
78 gptfdisk \
79 lftp \
80 vim \
81 ntp \
82 boost \
83 nodejs \
84 networkmanager \
85 imx-gpu-viv \
86 android-tools \
87 "
88
89 # eIQ Machine Learning. Note that many of the features require Qt 5. Disable
90 # this when you build image without QT 5.
91 IMAGE_INSTALL_append = " \
92 packagegroup-imx-ml \
93 firmware-imx-sdma \
94 firmware-imx-regulatory \
95 fsl-rc-local \
96 "
97 #IMAGE_INSTALL_append = " \
98 # firmware-imx-sdma \
99 # firmware-imx-regulatory \
100 # fsl-rc-local \
101 # "
102
103 #TOOLCHAIN_TARGET_TASK_append += " tensorflow-lite-staticdev tensorflow-lite-dev armnn-dev onnxruntimedev"
104
105 IMAGE_FSTYPES = "tar.bz2"
106
107 # Ship all kernel modules by default
108 MACHINE_EXTRA_RRECOMMENDS = "kernel-modules"
109
110 # Add additional firmware
111 MACHINE_FIRMWARE_append = " linux-firmware-ath10k"
112
conf/machine/smarcimx8mq4g.conf
File was created 1 #@TYPE: Machine
2 #@NAME: EMBEDIAN SMARC-iMX8MQ CPU Module with 4GB LPDDR4
3 #@SOC: i.MX8MQ
4 #@DESCRIPTION: Machine configuration for Embedian SMARC-iMX8MQ
5 #@MAINTAINER: Eric Lee <eric.lee@embedian.com>
6
7 MACHINEOVERRIDES =. "mx8:mx8m:mx8mq:"
8
9 require conf/machine/include/imx-base.inc
10 require conf/machine/include/tune-cortexa53.inc
11 require conf/machine/include/smarc-common.inc
12
13 MACHINE_FEATURES += " usbgadget vfat ext2 alsa serial pci wifi bluetooth nxp8997"
14
15 IMAGE_FEATURES += "package-management"
16
17 # Embedian BSP default providers
18 PREFERRED_PROVIDER_virtual/kernel_smarcimx8mq4g ?= "linux-smarcimx8mq"
19 PREFERRED_VERSION_linux-smarcimx8mq4g_smarcimx8mq4g = "5.10"
20
21 KERNEL_DEVICETREE = " \
22 embedian/imx8mq-smarc.dtb \
23 embedian/imx8mq-smarc-dcss-lvds.dtb \
24 embedian/imx8mq-smarc-lcdif-lvds.dtb \
25 embedian/imx8mq-smarc-hdmi.dtb \
26 embedian/imx8mq-smarc-dp.dtb \
27 embedian/imx8mq-smarc-dual-display.dtb \
28 embedian/imx8mq-smarc-m4.dtb \
29 embedian/imx8mq-smarc-m4-dcss-lvds.dtb \
30 embedian/imx8mq-smarc-m4-lcdif-lvds.dtb \
31 embedian/imx8mq-smarc-m4-hdmi.dtb \
32 embedian/imx8mq-smarc-m4-dp.dtb \
33 embedian/imx8mq-smarc-m4-dual-display.dtb \
34 "
35
36 MACHINE_FEATURES_remove_smarcimx8mq4g = "qca6174"
37 MACHINE_FEATURES_append_smarcimx8mq4g = " bcm43455 bcm4356 bcm4359 nxp8997"
38 WKS_FILE_DEPENDS_append_smarcimx8mq4g = " imx-m4-demos"
39 IMAGE_BOOT_FILES += " imx8mq_m4_TCM_hello_world.bin \
40 imx8mq_m4_TCM_rpmsg_lite_pingpong_rtos_linux_remote.bin \
41 imx8mq_m4_TCM_rpmsg_lite_str_echo_rtos.bin \
42 "
43
44 PREFERRED_PROVIDER_u-boot_smarcimx8mq4g = "u-boot-smarcimx8mq"
45 PREFERRED_PROVIDER_virtual/bootloader_smarcimx8mq4g = "u-boot-smarcimx8mq"
46
47 UBOOT_CONFIG ??= "sd"
48 UBOOT_CONFIG[sd] = "smarcimx8mq_4g_ser3_defconfig,sdcard"
49 SPL_BINARY = "spl/u-boot-spl.bin"
50
51 # Set DDR FIRMWARE
52 DDR_FIRMWARE_NAME = "lpddr4_pmu_train_1d_imem.bin lpddr4_pmu_train_1d_dmem.bin lpddr4_pmu_train_2d_imem.bin lpddr4_pmu_train_2d_dmem.bin"
53
54 # Set u-boot DTB
55 UBOOT_DTB_NAME = "imx8mq-smarc.dtb"
56
57 # Set imx-mkimage boot target
58 IMXBOOT_TARGETS = "flash_evk flash_evk_no_hdmi flash_dp_evk"
59
60 # Set Serial console
61 SERIAL_CONSOLES = "115200;ttymxc0"
62
63 IMAGE_BOOTLOADER = "imx-boot"
64
65 LOADADDR = ""
66 UBOOT_SUFFIX = "bin"
67 UBOOT_MAKE_TARGET = ""
68 IMX_BOOT_SEEK = "33"
69
70 OPTEE_BIN_EXT = "8mq"
71
72 MACHINE_EXTRA_RDEPENDS += " \
73 imx-boot \
74 packagegroup-tools-bluetooth \
75 pm-utils \
76 kmod \
77 hdparm \
78 gptfdisk \
79 lftp \
80 vim \
81 ntp \
82 boost \
83 nodejs \
84 networkmanager \
85 imx-gpu-viv \
86 android-tools \
87 "
88
89 # eIQ Machine Learning. Note that many of the features require Qt 5. Disable
90 # this when you build image without QT 5.
91 IMAGE_INSTALL_append = " \
92 packagegroup-imx-ml \
93 firmware-imx-sdma \
94 firmware-imx-regulatory \
95 fsl-rc-local \
96 "
97 #IMAGE_INSTALL_append = " \
98 # firmware-imx-sdma \
99 # firmware-imx-regulatory \
100 # fsl-rc-local \
101 # "
102
103 #TOOLCHAIN_TARGET_TASK_append += " tensorflow-lite-staticdev tensorflow-lite-dev armnn-dev onnxruntimedev"
104
105 IMAGE_FSTYPES = "tar.bz2"
106
107 # Ship all kernel modules by default
108 MACHINE_EXTRA_RRECOMMENDS = "kernel-modules"
109
110 # Add additional firmware
111 MACHINE_FIRMWARE_append = " linux-firmware-ath10k"
112
recipes-bsp/imx-mkimage/imx-boot_1.0.bbappend
1 # Workaround to fix do_compile() failure due to missing imx8mp-smarc.dtb 1 # Workaround to fix do_compile() failure due to missing imx8mp-smarc.dtb
2 do_compile_prepend() { 2 do_compile_prepend() {
3 echo "Copying DTB" 3 echo "Copying DTB"
4 if [ -f ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/imx8mp-smarc.dtb ]; then 4 if [ -f ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/imx8mq-smarc.dtb ]; then
5 cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/imx8mp-smarc.dtb ${S}/iMX8M/imx8mp-evk.dtb 5 cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/imx8mq-smarc.dtb ${S}/iMX8M/imx8mq-evk.dtb
6 fi 6 fi
7 } 7 }
8 8
recipes-bsp/imx-vpu-hantro-vc/imx-vpu-hantro-vc_1.3.0.bbappend
1 COMPATIBLE_MACHINE = "(imx8mp)" File was deleted
2 1 COMPATIBLE_MACHINE = "(imx8mp)"
recipes-bsp/u-boot/u-boot-smarcimx8mq_2020.04.bb
File was created 1 # Copyright (C) 2013-2016 Freescale Semiconductor
2 # Copyright 2017-2021 NXP
3
4 DESCRIPTION = "i.MX U-Boot suppporting i.MX reference boards."
5 require recipes-bsp/u-boot/u-boot-common.inc
6 require recipes-bsp/u-boot/u-boot.inc
7 inherit pythonnative
8
9 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
10
11 PROVIDES += "u-boot"
12 DEPENDS_append = " dtc-native"
13
14 LICENSE = "GPLv2+"
15 LIC_FILES_CHKSUM = "file://Licenses/gpl-2.0.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263"
16
17 UBOOT_SRC ?= "${EMB_UBOOT_MIRROR};protocol=ssh"
18 SRCBRANCH = "smarc_8mq_lf_v2020.04"
19 SRC_URI = "${UBOOT_SRC};branch=${SRCBRANCH}"
20 SRCREV = "312ec620f3557f27301ec51dec03d4c4154d161e"
21
22 S = "${WORKDIR}/git"
23
24 inherit fsl-u-boot-localversion
25
26 LOCALVERSION ?= "-5.10.9-1.0.0"
27
28 BOOT_TOOLS = "imx-boot-tools"
29
30 do_deploy_append_mx8m () {
31 # Deploy u-boot-nodtb.bin and fsl-imx8mq-XX.dtb, to be packaged in boot binary by imx-boot
32 if [ -n "${UBOOT_CONFIG}" ]
33 then
34 for config in ${UBOOT_MACHINE}; do
35 i=$(expr $i + 1);
36 for type in ${UBOOT_CONFIG}; do
37 j=$(expr $j + 1);
38 if [ $j -eq $i ]
39 then
40 install -d ${DEPLOYDIR}/${BOOT_TOOLS}
41 install -m 0777 ${B}/${config}/arch/arm/dts/${UBOOT_DTB_NAME} ${DEPLOYDIR}/${BOOT_TOOLS}
42 install -m 0777 ${B}/${config}/u-boot-nodtb.bin ${DEPLOYDIR}/${BOOT_TOOLS}/u-boot-nodtb.bin-${MACHINE}-${type}
43 fi
44 done
45 unset j
46 done
47 unset i
48 fi
49
50 }
51
52 PACKAGE_ARCH = "${MACHINE_ARCH}"
53 COMPATIBLE_MACHINE = "(mx6|mx7|mx8)"
54
55 UBOOT_NAME_mx6 = "u-boot-${MACHINE}.bin-${UBOOT_CONFIG}"
56 UBOOT_NAME_mx7 = "u-boot-${MACHINE}.bin-${UBOOT_CONFIG}"
57 UBOOT_NAME_mx8 = "u-boot-${MACHINE}.bin-${UBOOT_CONFIG}"
58
recipes-core/base-files/base-files_%.bbappend
1 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" 1 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
2 2
3 SRC_URI_append_smarcimx8mq2g = " \
4 file://embedian-hdmi-audio.conf \
5 "
6
7 SRC_URI_append_smarcimx8mq4g = " \
8 file://embedian-hdmi-audio.conf \
9 "
10
3 SRC_URI_append_smarcimx8mp4g = " \ 11 SRC_URI_append_smarcimx8mp4g = " \
4 file://embedian-hdmi-audio.conf \ 12 file://embedian-hdmi-audio.conf \
5 " 13 "
6 14
7 SRC_URI_append_smarcimx8mp6g = " \ 15 SRC_URI_append_smarcimx8mp6g = " \
8 file://embedian-hdmi-audio.conf \ 16 file://embedian-hdmi-audio.conf \
9 " 17 "
18 do_install_append_smarcimx8mq2g() {
19 install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d
20 }
21
22 do_install_append_smarcimx8mq4g() {
23 install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d
24 }
10 25
11 do_install_append_smarcimx8mp4g() { 26 do_install_append_smarcimx8mp4g() {
12 install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d 27 install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d
13 } 28 }
14 29
15 do_install_append_smarcimx8mp6g() { 30 do_install_append_smarcimx8mp6g() {
16 install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d 31 install -m 0644 ${WORKDIR}/embedian-hdmi-audio.conf ${D}${sysconfdir}/modprobe.d
17 } 32 }
18 33
recipes-core/udev/udev-rules-imx.bbappend
1 FILESEXTRAPATHS_prepend := "${THISDIR}/files:" 1 FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
2 2
3 SRC_URI_append_smarcimx8mq2g = " file://usb-power.rules"
4 SRC_URI_append_smarcimx8mq4g = " file://usb-power.rules"
3 SRC_URI_append_smarcimx8mp4g = " file://usb-power.rules" 5 SRC_URI_append_smarcimx8mp4g = " file://usb-power.rules"
4 SRC_URI_append_smarcimx8mp6g = " file://usb-power.rules" 6 SRC_URI_append_smarcimx8mp6g = " file://usb-power.rules"
7
8 do_install_append_smarcimx8mq2g () {
9 install -d ${D}${sysconfdir}/udev/rules.d
10 install -m 0644 ${WORKDIR}/usb-power.rules ${D}${sysconfdir}/udev/rules.d/
11 }
12
13 do_install_append_smarcimx8mq4g () {
14 install -d ${D}${sysconfdir}/udev/rules.d
15 install -m 0644 ${WORKDIR}/usb-power.rules ${D}${sysconfdir}/udev/rules.d/
16 }
5 17
6 do_install_append_smarcimx8mp4g () { 18 do_install_append_smarcimx8mp4g () {
7 install -d ${D}${sysconfdir}/udev/rules.d 19 install -d ${D}${sysconfdir}/udev/rules.d
8 install -m 0644 ${WORKDIR}/usb-power.rules ${D}${sysconfdir}/udev/rules.d/ 20 install -m 0644 ${WORKDIR}/usb-power.rules ${D}${sysconfdir}/udev/rules.d/
9 } 21 }
10 22
11 do_install_append_smarcimx8mp6g () { 23 do_install_append_smarcimx8mp6g () {
12 install -d ${D}${sysconfdir}/udev/rules.d 24 install -d ${D}${sysconfdir}/udev/rules.d
13 install -m 0644 ${WORKDIR}/usb-power.rules ${D}${sysconfdir}/udev/rules.d/ 25 install -m 0644 ${WORKDIR}/usb-power.rules ${D}${sysconfdir}/udev/rules.d/
14 } 26 }
15 27
recipes-kernel/linux/linux-smarcimx8mq_5.10.bb
File was created 1 # Copyright (C) 2013-2016 Freescale Semiconductor
2 # Copyright 2017-2021 NXP
3 # Released under the MIT license (see COPYING.MIT for the terms)
4
5 SUMMARY = "Linux Kernel provided and supported by NXP"
6 DESCRIPTION = "Linux Kernel provided and supported by NXP with focus on \
7 i.MX Family Reference Boards. It includes support for many IPs such as GPU, VPU and IPU."
8
9 require recipes-kernel/linux/linux-imx.inc
10
11 LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
12
13 DEPENDS += "lzop-native bc-native"
14
15 SRCBRANCH = "smarc_8mq_lf-5.10.y"
16 LOCALVERSION = "-1.0.0"
17 KERNEL_DEFCONFIG = "${S}/arch/arm64/configs/smarcimx8mq_defconfig"
18
19 KERNEL_SRC ?= "git@git.embedian.com:developer/smarc-fsl-linux-kernel.git;protocol=git"
20 SRC_URI = "${EMB_KERNEL_MIRROR};protocol=ssh;branch=${SRCBRANCH}"
21 SRCREV = "a2b178e1baa15b60f1547421ef6753a76b7059e4"
22
23 LINUX_VERSION = "5.10.9"
24
25 FILES_${KERNEL_PACKAGE_NAME}-base += "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin.modinfo "
26
27 KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} CC="${KERNEL_CC}" O=${B} olddefconfig"
28
29 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
30
31 DEFAULT_PREFERENCE = "1"
32
33 DO_CONFIG_V7_COPY = "no"
34 DO_CONFIG_V7_COPY_mx6 = "yes"
35 DO_CONFIG_V7_COPY_mx7 = "yes"
36 DO_CONFIG_V7_COPY_mx8 = "no"
37
38 # Add setting for LF Mainline build
39 IMX_KERNEL_CONFIG_AARCH32 = "imx_v7_defconfig"
40 IMX_KERNEL_CONFIG_AARCH64 = "smarcimx8mq_defconfig"
41 KBUILD_DEFCONFIG ?= ""
42 KBUILD_DEFCONFIG_mx6= "${IMX_KERNEL_CONFIG_AARCH32}"
43 KBUILD_DEFCONFIG_mx7= "${IMX_KERNEL_CONFIG_AARCH32}"
44 KBUILD_DEFCONFIG_mx8= "${IMX_KERNEL_CONFIG_AARCH64}"
45
46
47 # Use a verbatim copy of the defconfig from the linux-imx repo.
48 # IMPORTANT: This task effectively disables kernel config fragments
49 # since the config fragments applied in do_kernel_configme are replaced.
50 addtask copy_defconfig after do_kernel_configme before do_preconfigure
51 do_copy_defconfig () {
52 install -d ${B}
53 if [ ${DO_CONFIG_V7_COPY} = "yes" ]; then
54 # copy latest IMX_KERNEL_CONFIG_AARCH32 to use for mx6, mx6ul and mx7
55 mkdir -p ${B}
56 cp ${S}/arch/arm/configs/${IMX_KERNEL_CONFIG_AARCH32} ${B}/.config
57 else
58 # copy latest IMX_KERNEL_CONFIG_AARCH64 to use for mx8
59 mkdir -p ${B}
60 cp ${S}/arch/arm64/configs/${IMX_KERNEL_CONFIG_AARCH64} ${B}/.config
61 fi
62 }
63
64 DELTA_KERNEL_DEFCONFIG ?= ""
65 #DELTA_KERNEL_DEFCONFIG_mx8 = "imx.config"
66
67 do_merge_delta_config[dirs] = "${B}"
68 do_merge_delta_config[depends] += " \
69 flex-native:do_populate_sysroot \
70 bison-native:do_populate_sysroot \
71 "
72 do_merge_delta_config() {
73 for deltacfg in ${DELTA_KERNEL_DEFCONFIG}; do
74 if [ -f ${S}/arch/${ARCH}/configs/${deltacfg} ]; then
75 ${KERNEL_CONFIG_COMMAND}
76 oe_runmake_call -C ${S} CC="${KERNEL_CC}" O=${B} ${deltacfg}
77 elif [ -f "${WORKDIR}/${deltacfg}" ]; then
78 ${S}/scripts/kconfig/merge_config.sh -m .config ${WORKDIR}/${deltacfg}
79 elif [ -f "${deltacfg}" ]; then
80 ${S}/scripts/kconfig/merge_config.sh -m .config ${deltacfg}
81 fi
82 done
83 cp .config ${WORKDIR}/defconfig
84 }
85 addtask merge_delta_config before do_preconfigure after do_copy_defconfig
86
87 COMPATIBLE_MACHINE = "(mx6|mx7|mx8)"
88
scripts/emb_mk_yocto_sdcard/README.txt
1 How to use the Embedian SD card creation script: 1 How to use the Embedian SD card creation script:
2 ================================================= 2 =================================================
3 3
4 This utility is provided on an "AS IS" basis. 4 This utility is provided on an "AS IS" basis.
5 This is the script we use to create our recovery SD card. 5 This is the script we use to create our recovery SD card.
6 For machines with Android support, it is a part of a larger script we use to create our recovery SD card, which also includes Android. 6 For machines with Android support, it is a part of a larger script we use to create our recovery SD card, which also includes Android.
7 It is a good example for using the output of the Yocto build to create a bootable SD card, and use it to flash the target NAND flash/eMMC. 7 It is a good example for using the output of the Yocto build to create a bootable SD card, and use it to flash the target NAND flash/eMMC.
8 8
9 Note: 9 Note:
10 Before running this script you need to bitbake fsl-image-gui. 10 Before running this script you need to bitbake fsl-image-gui.
11 11
12 12
13 Usage: 13 Usage:
14 sudo MACHINE=<smarcimx8mp4g|smarcimx8mp6g> ./emb-create-yocto-sdcard.sh [options] /dev/sdX 14 sudo MACHINE=<smarcimx8mq2g|smarcimx8mq4g|smarcimx8mp4g|smarcimx8mp6g> ./emb-create-yocto-sdcard.sh [options] /dev/sdX
15 (Change /dev/sdX to your device name) 15 (Change /dev/sdX to your device name)
16 16
17 options: 17 options:
18 -h Display help message 18 -h Display help message
19 -s Only show partition sizes to be written, without actually write them 19 -s Only show partition sizes to be written, without actually write them
20 -a Automatically set the rootfs partition size to fill the SD card 20 -a Automatically set the rootfs partition size to fill the SD card
21 -r Select alternative rootfs for recovery images (default: build_x11/tmp/deploy/images/<machine name>/fsl-image-validation-imx.tar.bz2) 21 -r Select alternative rootfs for recovery images (default: build_x11/tmp/deploy/images/<machine name>/fsl-image-validation-imx.tar.bz2)
22 22
23 If you don't use the '-a' option, a default rootfs size of 3700MiB will be used. 23 If you don't use the '-a' option, a default rootfs size of 3700MiB will be used.
24 The '-r' option allows you to create a bootable sdcard with an alternative image for the installation to NAND flash or eMMC. 24 The '-r' option allows you to create a bootable sdcard with an alternative image for the installation to NAND flash or eMMC.
25 Example: "-r tmp/deploy/images/<machine name>/fsl-image-qt5-validation-imx" -- selects the "Qt5 image with X11" recovery image 25 Example: "-r tmp/deploy/images/<machine name>/fsl-image-qt5-validation-imx" -- selects the "Qt5 image with X11" recovery image
26 26
27 27
28 Once the script is done, use the SD card to boot, and then to flash your internal storage/s either use the icons, 28 Once the script is done, use the SD card to boot, and then to flash your internal storage/s either use the icons,
29 or the following linux shell script: 29 or the following linux shell script:
30 install_yocto.sh 30 install_yocto.sh
31 31
scripts/emb_mk_yocto_sdcard/emb-create-yocto-emmc.sh
1 #!/bin/bash -e 1 #!/bin/bash -e
2 2
3 blue_underlined_bold_echo() 3 blue_underlined_bold_echo()
4 { 4 {
5 echo -e "\e[34m\e[4m\e[1m$@\e[0m" 5 echo -e "\e[34m\e[4m\e[1m$@\e[0m"
6 } 6 }
7 7
8 blue_bold_echo() 8 blue_bold_echo()
9 { 9 {
10 echo -e "\e[34m\e[1m$@\e[0m" 10 echo -e "\e[34m\e[1m$@\e[0m"
11 } 11 }
12 12
13 red_bold_echo() 13 red_bold_echo()
14 { 14 {
15 echo -e "\e[31m\e[1m$@\e[0m" 15 echo -e "\e[31m\e[1m$@\e[0m"
16 } 16 }
17 17
18 IMGS_PATH=/opt/images/Yocto 18 IMGS_PATH=/opt/images/Yocto
19 UBOOT_IMAGE=imx-boot-sd.bin 19 UBOOT_IMAGE=imx-boot-sd.bin
20 KERNEL_IMAGE=Image 20 KERNEL_IMAGE=Image
21 ROOTFS_IMAGE=rootfs.tar.bz2 21 ROOTFS_IMAGE=rootfs.tar.bz2
22 BOOTLOADER_RESERVED_SIZE=4 22 BOOTLOADER_RESERVED_SIZE=4
23 PART1_SIZE=48 23 PART1_SIZE=48
24 BOOTLOADER_OFFSET=33 24 BOOTLOADER_OFFSET=33
25 DISPLAY=-hdmi 25 DISPLAY=-hdmi
26 PART=p 26 PART=p
27 BOOTPART=1 27 BOOTPART=1
28 ROOTFSPART=2 28 ROOTFSPART=2
29 BOOTDIR=/boot 29 BOOTDIR=/boot
30 30
31 check_board() 31 check_board()
32 { 32 {
33 if grep -q "i.MX8MP" /sys/devices/soc0/soc_id; then 33 if grep -q "i.MX8MQ" /sys/devices/soc0/soc_id; then
34 BOARD=smarc-imx8mp 34 BOARD=smarc-imx8mq
35 DTB_PREFIX=imx8mp-smarc 35 DTB_PREFIX=imx8mq-smarc
36 BLOCK=mmcblk2 36 BLOCK=mmcblk0
37 37
38 if [[ $DISPLAY != "-lvds" && $DISPLAY != "-hdmi" && \ 38 if [[ $DISPLAY != "-dcss-lvds" && $DISPLAY != "-hdmi" && \
39 $DISPLAY != "-edp" && $DISPLAY != "" ]]; then 39 $DISPLAY != "-lcdif-lvds" && $DISPLAY != "-dp" && \
40 red_bold_echo "ERROR: invalid display, should be lvds, hdmi, dual-display or empty" 40 $DISPLAY != "-dual-display" && $DISPLAY != "" ]]; then
41 red_bold_echo "ERROR: invalid display, should be dcss-lvds, hdmi, lcdif-lvds, dual-display or empty"
41 exit 1 42 exit 1
42 fi 43 fi
43 else 44 else
44 red_bold_echo "ERROR: Unsupported board" 45 red_bold_echo "ERROR: Unsupported board"
45 exit 1 46 exit 1
46 fi 47 fi
47 48
48 49
49 if [[ ! -b /dev/${BLOCK} ]] ; then 50 if [[ ! -b /dev/${BLOCK} ]] ; then
50 red_bold_echo "ERROR: Can't find eMMC device (/dev/${BLOCK})." 51 red_bold_echo "ERROR: Can't find eMMC device (/dev/${BLOCK})."
51 red_bold_echo "Please verify you are using the correct options for your SMARC Module." 52 red_bold_echo "Please verify you are using the correct options for your SMARC Module."
52 exit 1 53 exit 1
53 fi 54 fi
54 } 55 }
55 56
56 check_images() 57 check_images()
57 { 58 {
58 if [[ ! -f $IMGS_PATH/$UBOOT_IMAGE ]] ; then 59 if [[ ! -f $IMGS_PATH/$UBOOT_IMAGE ]] ; then
59 red_bold_echo "ERROR: \"$IMGS_PATH/$UBOOT_IMAGE\" does not exist" 60 red_bold_echo "ERROR: \"$IMGS_PATH/$UBOOT_IMAGE\" does not exist"
60 exit 1 61 exit 1
61 fi 62 fi
62 63
63 if [[ ! -f $IMGS_PATH/$KERNEL_IMAGE ]] ; then 64 if [[ ! -f $IMGS_PATH/$KERNEL_IMAGE ]] ; then
64 red_bold_echo "ERROR: \"$IMGS_PATH/$KERNEL_IMAGE\" does not exist" 65 red_bold_echo "ERROR: \"$IMGS_PATH/$KERNEL_IMAGE\" does not exist"
65 exit 1 66 exit 1
66 fi 67 fi
67 68
68 if [[ ! -f $IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb ]] ; then 69 if [[ ! -f $IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb ]] ; then
69 red_bold_echo "ERROR: \"$IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb\" does not exist" 70 red_bold_echo "ERROR: \"$IMGS_PATH/${DTB_PREFIX}${DISPLAY}.dtb\" does not exist"
70 exit 1 71 exit 1
71 fi 72 fi
72 73
73 if [[ ! -f $IMGS_PATH/uEnv.txt ]] ; then 74 if [[ ! -f $IMGS_PATH/uEnv.txt ]] ; then
74 red_bold_echo "ERROR: \"$IMGS_PATH/uEnv.txt\" does not exist" 75 red_bold_echo "ERROR: \"$IMGS_PATH/uEnv.txt\" does not exist"
75 exit 1 76 exit 1
76 fi 77 fi
77 78
78 if [[ ! -f $IMGS_PATH/$ROOTFS_IMAGE ]] ; then 79 if [[ ! -f $IMGS_PATH/$ROOTFS_IMAGE ]] ; then
79 red_bold_echo "ERROR: \"$IMGS_PATH/$ROOTFS_IMAGE\" does not exist" 80 red_bold_echo "ERROR: \"$IMGS_PATH/$ROOTFS_IMAGE\" does not exist"
80 exit 1 81 exit 1
81 fi 82 fi
82 } 83 }
83 84
84 delete_emmc() 85 delete_emmc()
85 { 86 {
86 echo 87 echo
87 blue_underlined_bold_echo "Deleting current partitions" 88 blue_underlined_bold_echo "Deleting current partitions"
88 89
89 umount /dev/${BLOCK}${PART}* 2>/dev/null || true 90 umount /dev/${BLOCK}${PART}* 2>/dev/null || true
90 91
91 for ((i=1; i<=16; i++)); do 92 for ((i=1; i<=16; i++)); do
92 if [[ -e /dev/${BLOCK}${PART}${i} ]]; then 93 if [[ -e /dev/${BLOCK}${PART}${i} ]]; then
93 dd if=/dev/zero of=/dev/${BLOCK}${PART}${i} bs=1M count=1 2>/dev/null || true 94 dd if=/dev/zero of=/dev/${BLOCK}${PART}${i} bs=1M count=1 2>/dev/null || true
94 fi 95 fi
95 done 96 done
96 sync 97 sync
97 98
98 dd if=/dev/zero of=/dev/${BLOCK} bs=1M count=${BOOTLOADER_RESERVED_SIZE} 99 dd if=/dev/zero of=/dev/${BLOCK} bs=1M count=${BOOTLOADER_RESERVED_SIZE}
99 100
100 sync; sleep 1 101 sync; sleep 1
101 } 102 }
102 103
103 create_emmc_parts() 104 create_emmc_parts()
104 { 105 {
105 echo 106 echo
106 blue_underlined_bold_echo "Creating new partitions" 107 blue_underlined_bold_echo "Creating new partitions"
107 108
108 SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/hw_sector_size` 109 SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/hw_sector_size`
109 PART1_FIRST_SECT=$(($BOOTLOADER_RESERVED_SIZE * 1024 * 1024 / $SECT_SIZE_BYTES)) 110 PART1_FIRST_SECT=$(($BOOTLOADER_RESERVED_SIZE * 1024 * 1024 / $SECT_SIZE_BYTES))
110 PART1_END_SECT=$((($BOOTLOADER_RESERVED_SIZE + $PART1_SIZE) * 1024 * 1024 / $SECT_SIZE_BYTES)) 111 PART1_END_SECT=$((($BOOTLOADER_RESERVED_SIZE + $PART1_SIZE) * 1024 * 1024 / $SECT_SIZE_BYTES))
111 PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1` 112 PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1`
112 113
113 (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ 114 (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \
114 echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ 115 echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \
115 echo $PART2_FIRST_SECT; echo; \ 116 echo $PART2_FIRST_SECT; echo; \
116 echo p; echo w) | fdisk -u /dev/${BLOCK} > /dev/null 117 echo p; echo w) | fdisk -u /dev/${BLOCK} > /dev/null
117 118
118 sync; sleep 1 119 sync; sleep 1
119 fdisk -u -l /dev/${BLOCK} 120 fdisk -u -l /dev/${BLOCK}
120 } 121 }
121 122
122 format_emmc_parts() 123 format_emmc_parts()
123 { 124 {
124 echo 125 echo
125 blue_underlined_bold_echo "Formatting partitions" 126 blue_underlined_bold_echo "Formatting partitions"
126 127
127 mkfs.vfat -F 16 /dev/${BLOCK}${PART}${BOOTPART} -n boot 128 mkfs.vfat -F 16 /dev/${BLOCK}${PART}${BOOTPART} -n boot
128 mkfs.ext4 /dev/${BLOCK}${PART}${ROOTFSPART} -L rootfs 129 mkfs.ext4 /dev/${BLOCK}${PART}${ROOTFSPART} -L rootfs
129 130
130 sync; sleep 1 131 sync; sleep 1
131 } 132 }
132 133
133 install_bootloader_to_emmc() 134 install_bootloader_to_emmc()
134 { 135 {
135 echo 136 echo
136 blue_underlined_bold_echo "Installing booloader" 137 blue_underlined_bold_echo "Installing booloader"
137 138
138 dd if=${IMGS_PATH}/${UBOOT_IMAGE} of=/dev/${BLOCK} bs=1K seek=${BOOTLOADER_OFFSET} 139 dd if=${IMGS_PATH}/${UBOOT_IMAGE} of=/dev/${BLOCK} bs=1K seek=${BOOTLOADER_OFFSET}
139 sync 140 sync
140 } 141 }
141 142
142 install_kernel_to_emmc() 143 install_kernel_to_emmc()
143 { 144 {
144 echo 145 echo
145 blue_underlined_bold_echo "Installing kernel" 146 blue_underlined_bold_echo "Installing kernel"
146 147
147 MOUNTDIR=/run/media/${BLOCK}${PART}${BOOTPART} 148 MOUNTDIR=/run/media/${BLOCK}${PART}${BOOTPART}
148 mkdir -p ${MOUNTDIR} 149 mkdir -p ${MOUNTDIR}
149 mount /dev/${BLOCK}${PART}${BOOTPART} ${MOUNTDIR} 150 mount /dev/${BLOCK}${PART}${BOOTPART} ${MOUNTDIR}
150 mkdir -p ${MOUNTDIR}/dtbs/ 151 mkdir -p ${MOUNTDIR}/dtbs/
151 cp -v ${IMGS_PATH}/${KERNEL_IMAGE} ${MOUNTDIR} 152 cp -v ${IMGS_PATH}/${KERNEL_IMAGE} ${MOUNTDIR}
152 cp -v ${IMGS_PATH}/${DTB_PREFIX}${DISPLAY}.dtb ${MOUNTDIR}/dtbs/imx8mp-smarc.dtb 153 cp -v ${IMGS_PATH}/${DTB_PREFIX}${DISPLAY}.dtb ${MOUNTDIR}/dtbs/imx8mq-smarc.dtb
153 cp -v ${IMGS_PATH}/uEnv.txt ${MOUNTDIR} 154 cp -v ${IMGS_PATH}/uEnv.txt ${MOUNTDIR}
154 155
155 echo 156 echo
156 sync 157 sync
157 158
158 umount ${MOUNTDIR} 159 umount ${MOUNTDIR}
159 } 160 }
160 161
161 install_rootfs_to_emmc() 162 install_rootfs_to_emmc()
162 { 163 {
163 echo 164 echo
164 blue_underlined_bold_echo "Installing rootfs" 165 blue_underlined_bold_echo "Installing rootfs"
165 166
166 MOUNTDIR=/run/media/${BLOCK}${PART}${ROOTFSPART} 167 MOUNTDIR=/run/media/${BLOCK}${PART}${ROOTFSPART}
167 mkdir -p ${MOUNTDIR} 168 mkdir -p ${MOUNTDIR}
168 mount /dev/${BLOCK}${PART}${ROOTFSPART} ${MOUNTDIR} 169 mount /dev/${BLOCK}${PART}${ROOTFSPART} ${MOUNTDIR}
169 170
170 printf "Extracting files" 171 printf "Extracting files"
171 tar --warning=no-timestamp -jxvf ${IMGS_PATH}/${ROOTFS_IMAGE} -C ${MOUNTDIR} --checkpoint=.1200 172 tar --warning=no-timestamp -jxvf ${IMGS_PATH}/${ROOTFS_IMAGE} -C ${MOUNTDIR} --checkpoint=.1200
172 173
173 # Create DTB symlink 174 # Create DTB symlink
174 (cd ${MOUNTDIR}/${BOOTDIR}; ln -fs ${DTB_PREFIX}${DISPLAY}.dtb ${DTB_PREFIX}.dtb) 175 (cd ${MOUNTDIR}/${BOOTDIR}; ln -fs ${DTB_PREFIX}${DISPLAY}.dtb ${DTB_PREFIX}.dtb)
175 176
176 echo 177 echo
177 sync 178 sync
178 179
179 umount ${MOUNTDIR} 180 umount ${MOUNTDIR}
180 } 181 }
181 182
182 stop_udev() 183 stop_udev()
183 { 184 {
184 if [ -f /lib/systemd/system/systemd-udevd.service ]; then 185 if [ -f /lib/systemd/system/systemd-udevd.service ]; then
185 systemctl -q mask --runtime systemd-udevd 186 systemctl -q mask --runtime systemd-udevd
186 systemctl -q stop systemd-udevd 187 systemctl -q stop systemd-udevd
187 fi 188 fi
188 } 189 }
189 190
190 start_udev() 191 start_udev()
191 { 192 {
192 if [ -f /lib/systemd/system/systemd-udevd.service ]; then 193 if [ -f /lib/systemd/system/systemd-udevd.service ]; then
193 systemctl -q unmask --runtime systemd-udevd 194 systemctl -q unmask --runtime systemd-udevd
194 systemctl -q start systemd-udevd 195 systemctl -q start systemd-udevd
195 fi 196 fi
196 } 197 }
197 198
198 usage() 199 usage()
199 { 200 {
200 echo 201 echo
201 echo "This script installs Yocto Rootfs on the SMARC-iMX8MP's internal eMMC storage device" 202 echo "This script installs Yocto Rootfs on the SMARC-iMX8MQ's internal eMMC storage device"
202 echo 203 echo
203 echo " Usage: $(basename $0) <option>" 204 echo " Usage: $(basename $0) <option>"
204 echo 205 echo
205 echo " options:" 206 echo " options:"
206 echo " -h show help message" 207 echo " -h show help message"
207 echo " -d <lvds|hdmi|dual-display> set display type, default is lvds" 208 echo " -d <lvds|hdmi|dual-display> set display type, default is lvds"
208 echo 209 echo
209 } 210 }
210 211
211 finish() 212 finish()
212 { 213 {
213 echo 214 echo
214 blue_bold_echo "Yocto Sumo installed successfully" 215 blue_bold_echo "Yocto Sumo installed successfully"
215 exit 0 216 exit 0
216 } 217 }
217 218
218 ################################################# 219 #################################################
219 # Execution starts here # 220 # Execution starts here #
220 ################################################# 221 #################################################
221 222
222 if [[ $EUID != 0 ]] ; then 223 if [[ $EUID != 0 ]] ; then
223 red_bold_echo "This script must be run with super-user privileges" 224 red_bold_echo "This script must be run with super-user privileges"
224 exit 1 225 exit 1
225 fi 226 fi
226 227
227 blue_underlined_bold_echo "*** Embedian SMARC-iMX8MP on-module eMMC Recovery ***" 228 blue_underlined_bold_echo "*** Embedian SMARC-iMX8MQ on-module eMMC Recovery ***"
228 echo 229 echo
229 230
230 while getopts d:h OPTION; 231 while getopts d:h OPTION;
231 do 232 do
232 case $OPTION in 233 case $OPTION in
233 d) 234 d)
234 DISPLAY=$OPTARG 235 DISPLAY=$OPTARG
235 ;; 236 ;;
236 h) 237 h)
237 usage 238 usage
238 exit 0 239 exit 0
239 ;; 240 ;;
240 *) 241 *)
241 usage 242 usage
242 exit 1 243 exit 1
243 ;; 244 ;;
244 esac 245 esac
245 done 246 done
246 247
247 printf "Board: " 248 printf "Board: "
248 blue_bold_echo $BOARD 249 blue_bold_echo $BOARD
249 250
250 printf "Installing to internal storage device: " 251 printf "Installing to internal storage device: "
251 blue_bold_echo eMMC 252 blue_bold_echo eMMC
252 253
253 check_board 254 check_board
254 check_images 255 check_images
255 stop_udev 256 stop_udev
256 delete_emmc 257 delete_emmc
257 create_emmc_parts 258 create_emmc_parts
258 format_emmc_parts 259 format_emmc_parts
259 install_bootloader_to_emmc 260 install_bootloader_to_emmc
260 install_kernel_to_emmc 261 install_kernel_to_emmc
261 install_rootfs_to_emmc 262 install_rootfs_to_emmc
262 start_udev 263 start_udev
263 finish 264 finish
264 265
scripts/emb_mk_yocto_sdcard/emb-create-yocto-sdcard.sh
1 #!/bin/bash 1 #!/bin/bash
2 set -e 2 set -e
3 3
4 #### Script version #### 4 #### Script version ####
5 SCRIPT_NAME=${0##*/} 5 SCRIPT_NAME=${0##*/}
6 readonly SCRIPT_VERSION="0.7" 6 readonly SCRIPT_VERSION="0.7"
7 7
8 #### Exports Variables #### 8 #### Exports Variables ####
9 #### global variables #### 9 #### global variables ####
10 readonly ABSOLUTE_FILENAME=`readlink -e "$0"` 10 readonly ABSOLUTE_FILENAME=`readlink -e "$0"`
11 readonly ABSOLUTE_DIRECTORY=`dirname ${ABSOLUTE_FILENAME}` 11 readonly ABSOLUTE_DIRECTORY=`dirname ${ABSOLUTE_FILENAME}`
12 readonly SCRIPT_POINT=${ABSOLUTE_DIRECTORY} 12 readonly SCRIPT_POINT=${ABSOLUTE_DIRECTORY}
13 readonly SCRIPT_START_DATE=`date +%Y%m%d` 13 readonly SCRIPT_START_DATE=`date +%Y%m%d`
14 14
15 readonly YOCTO_ROOT="${SCRIPT_POINT}/../../../../" 15 readonly YOCTO_ROOT="${SCRIPT_POINT}/../../../../"
16 16
17 readonly BSP_TYPE="YOCTO" 17 readonly BSP_TYPE="YOCTO"
18 readonly YOCTO_BUILD=${YOCTO_ROOT}/build-wayland 18 readonly YOCTO_BUILD=${YOCTO_ROOT}/build-wayland
19 readonly YOCTO_DEFAULT_IMAGE=fsl-image-qt5-validation-imx 19 readonly YOCTO_DEFAULT_IMAGE=fsl-image-qt5-validation-imx
20 20
21 readonly YOCTO_SCRIPTS_PATH=${SCRIPT_POINT} 21 readonly YOCTO_SCRIPTS_PATH=${SCRIPT_POINT}
22 readonly YOCTO_IMGS_PATH=${YOCTO_BUILD}/tmp/deploy/images/${MACHINE} 22 readonly YOCTO_IMGS_PATH=${YOCTO_BUILD}/tmp/deploy/images/${MACHINE}
23 23
24 ## display (one of "-hdmi", "-lvds", "-dp", "") 24 ## display (one of "-hdmi", "-lvds", "-dp", "")
25 readonly DISPLAY="-hdmi" 25 readonly DISPLAY="-hdmi"
26 26
27 # $1 -- block device 27 # $1 -- block device
28 # $2 -- output images dir 28 # $2 -- output images dir
29 readonly LPARAM_BLOCK_DEVICE=${1} 29 readonly LPARAM_BLOCK_DEVICE=${1}
30 readonly LPARAM_OUTPUT_DIR=${2} 30 readonly LPARAM_OUTPUT_DIR=${2}
31 readonly P1_MOUNT_DIR="${G_TMP_DIR}/p1" 31 readonly P1_MOUNT_DIR="${G_TMP_DIR}/p1"
32 readonly P2_MOUNT_DIR="${G_TMP_DIR}/p2" 32 readonly P2_MOUNT_DIR="${G_TMP_DIR}/p2"
33 33
34 readonly BOOTLOAD_RESERVE_SIZE=4 34 readonly BOOTLOAD_RESERVE_SIZE=4
35 readonly PART1_SIZE=48 35 readonly PART1_SIZE=48
36 readonly BOOTPART=1 36 readonly BOOTPART=1
37 readonly ROOTFSPART=2 37 readonly ROOTFSPART=2
38 readonly SPARE_SIZE=4 38 readonly SPARE_SIZE=4
39 39
40 # Sizes are in MiB 40 # Sizes are in MiB
41 if [ "${MACHINE}" = "smarcimx8mq2g" ] ||
42 [ "${MACHINE}" = "smarcimx8mq4g" ]; then
43 BOOTLOADER_OFFSET=33
44 fi
45 if [ "${MACHINE}" = "smarcimx8mp4g" ] ||
46 [ "${MACHINE}" = "smarcimx8mp6g" ]; then
41 BOOTLOADER_OFFSET=32 47 BOOTLOADER_OFFSET=32
48 fi
42 49
50
43 AUTO_FILL_SD=0 51 AUTO_FILL_SD=0
44 LOOP_MAJOR=7 52 LOOP_MAJOR=7
45 53
46 # This function performs sanity check to verify that the target device is removable devise of proper size 54 # This function performs sanity check to verify that the target device is removable devise of proper size
47 function check_device() 55 function check_device()
48 { 56 {
49 # Check that parameter is a valid block device 57 # Check that parameter is a valid block device
50 if [ ! -b "$1" ]; then 58 if [ ! -b "$1" ]; then
51 echo "$1 is not a valid block device, exiting" 59 echo "$1 is not a valid block device, exiting"
52 exit 1 60 exit 1
53 fi 61 fi
54 62
55 local dev=$(basename $1) 63 local dev=$(basename $1)
56 64
57 # Check that /sys/block/$dev exists 65 # Check that /sys/block/$dev exists
58 if [ ! -d /sys/block/$dev ]; then 66 if [ ! -d /sys/block/$dev ]; then
59 echo "Directory /sys/block/${dev} missing, exiting" 67 echo "Directory /sys/block/${dev} missing, exiting"
60 exit 1 68 exit 1
61 fi 69 fi
62 70
63 # Get device parameters 71 # Get device parameters
64 local removable=$(cat /sys/block/${dev}/removable) 72 local removable=$(cat /sys/block/${dev}/removable)
65 local size_bytes=$((512*$(cat /sys/class/block/${dev}/size))) 73 local size_bytes=$((512*$(cat /sys/class/block/${dev}/size)))
66 local size_gb=$((size_bytes/1000000000)) 74 local size_gb=$((size_bytes/1000000000))
67 75
68 # Non-removable SD card readers require additional check 76 # Non-removable SD card readers require additional check
69 if [ "${removable}" != "1" ]; then 77 if [ "${removable}" != "1" ]; then
70 local drive=$(udisksctl info -b /dev/${dev}|grep "Drive:"|cut -d"'" -f 2) 78 local drive=$(udisksctl info -b /dev/${dev}|grep "Drive:"|cut -d"'" -f 2)
71 local mediaremovable=$(gdbus call --system --dest org.freedesktop.UDisks2 \ 79 local mediaremovable=$(gdbus call --system --dest org.freedesktop.UDisks2 \
72 --object-path ${drive} --method org.freedesktop.DBus.Properties.Get \ 80 --object-path ${drive} --method org.freedesktop.DBus.Properties.Get \
73 org.freedesktop.UDisks2.Drive MediaRemovable) 81 org.freedesktop.UDisks2.Drive MediaRemovable)
74 if [[ "${mediaremovable}" = *"true"* ]]; then 82 if [[ "${mediaremovable}" = *"true"* ]]; then
75 removable=1 83 removable=1
76 fi 84 fi
77 fi 85 fi
78 86
79 # Check that device is either removable or loop 87 # Check that device is either removable or loop
80 if [ "$removable" != "1" -a $(stat -c '%t' /dev/$dev) != ${LOOP_MAJOR} ]; then 88 if [ "$removable" != "1" -a $(stat -c '%t' /dev/$dev) != ${LOOP_MAJOR} ]; then
81 echo "$1 is not a removable device, exiting" 89 echo "$1 is not a removable device, exiting"
82 exit 1 90 exit 1
83 fi 91 fi
84 92
85 # Check that device is attached 93 # Check that device is attached
86 if [ ${size_bytes} -eq 0 ]; then 94 if [ ${size_bytes} -eq 0 ]; then
87 echo "$1 is not attached, exiting" 95 echo "$1 is not attached, exiting"
88 exit 1 96 exit 1
89 fi 97 fi
90 98
91 # Check that device has a valid size 99 # Check that device has a valid size
92 echo "Detected removable device $1, size=${size_gb}GB" 100 echo "Detected removable device $1, size=${size_gb}GB"
93 } 101 }
94 102
95 YOCTO_RECOVERY_ROOTFS_PATH=${YOCTO_IMGS_PATH} 103 YOCTO_RECOVERY_ROOTFS_PATH=${YOCTO_IMGS_PATH}
96 104
97 echo "================================================" 105 echo "================================================"
98 echo "= Embedian recovery SD card creation script =" 106 echo "= Embedian recovery SD card creation script ="
99 echo "================================================" 107 echo "================================================"
100 108
101 help() { 109 help() {
102 bn=`basename $0` 110 bn=`basename $0`
103 echo " Usage: MACHINE=<smarcimx8mp4g|smarcimx8mp6g> $bn <options> device_node" 111 echo " Usage: MACHINE=<smarcimx8mq2g|smarcimx8mq4g|smarcimx8mp4g|smarcimx8mp6g> $bn <options> device_node"
104 echo 112 echo
105 echo " options:" 113 echo " options:"
106 echo " -h display this Help message" 114 echo " -h display this Help message"
107 echo " -s only Show partition sizes to be written, without actually write them" 115 echo " -s only Show partition sizes to be written, without actually write them"
108 echo " -a Automatically set the rootfs partition size to fill the SD card (leaving spare ${SPARE_SIZE}MiB)" 116 echo " -a Automatically set the rootfs partition size to fill the SD card (leaving spare ${SPARE_SIZE}MiB)"
109 echo " -r ROOTFS_NAME select an alternative Rootfs for recovery images" 117 echo " -r ROOTFS_NAME select an alternative Rootfs for recovery images"
110 echo " (default: \"${YOCTO_RECOVERY_ROOTFS_PATH}/${YOCTO_DEFAULT_IMAGE}\")" 118 echo " (default: \"${YOCTO_RECOVERY_ROOTFS_PATH}/${YOCTO_DEFAULT_IMAGE}\")"
111 echo " -n TEXT_FILE add a release Notes text file" 119 echo " -n TEXT_FILE add a release Notes text file"
112 echo 120 echo
113 } 121 }
114 122
115 if [[ $EUID -ne 0 ]] ; then 123 if [[ $EUID -ne 0 ]] ; then
116 echo "This script must be run with super-user privileges" 124 echo "This script must be run with super-user privileges"
117 exit 1 125 exit 1
118 fi 126 fi
119 127
120 if [[ $MACHINE != "smarcimx8mp4g" && $MACHINE != "smarcimx8mp6g" ]] ; then 128 if [[ $MACHINE != "smarcimx8mq2g" && $MACHINE != "smarcimx8mq4g" && $MACHINE != "smarcimx8mp4g" && $MACHINE != "smarcimx8mp6g" ]] ; then
121 help 129 help
122 exit 1 130 exit 1
123 fi 131 fi
124 132
125 133
126 # Parse command line 134 # Parse command line
127 moreoptions=1 135 moreoptions=1
128 node="na" 136 node="na"
129 cal_only=0 137 cal_only=0
130 138
131 while [ "$moreoptions" = 1 -a $# -gt 0 ]; do 139 while [ "$moreoptions" = 1 -a $# -gt 0 ]; do
132 case $1 in 140 case $1 in
133 -h) help; exit 3 ;; 141 -h) help; exit 3 ;;
134 -s) cal_only=1 ;; 142 -s) cal_only=1 ;;
135 -a) AUTO_FILL_SD=1 ;; 143 -a) AUTO_FILL_SD=1 ;;
136 -r) shift; 144 -r) shift;
137 YOCTO_RECOVERY_ROOTFS_MASK_PATH=`readlink -e "${1}.tar.bz2"`; 145 YOCTO_RECOVERY_ROOTFS_MASK_PATH=`readlink -e "${1}.tar.bz2"`;
138 YOCTO_RECOVERY_ROOTFS_PATH=`dirname ${YOCTO_RECOVERY_ROOTFS_MASK_PATH}` 146 YOCTO_RECOVERY_ROOTFS_PATH=`dirname ${YOCTO_RECOVERY_ROOTFS_MASK_PATH}`
139 YOCTO_RECOVERY_ROOTFS_BASE_IN_NAME=`basename ${1}` 147 YOCTO_RECOVERY_ROOTFS_BASE_IN_NAME=`basename ${1}`
140 ;; 148 ;;
141 -n) shift; 149 -n) shift;
142 RELEASE_NOTES_FILE=${1} 150 RELEASE_NOTES_FILE=${1}
143 ;; 151 ;;
144 *) moreoptions=0;; 152 *) moreoptions=0;;
145 esac 153 esac
146 [ "$moreoptions" = 0 ] && [ $# -gt 1 ] && help && exit 1 154 [ "$moreoptions" = 0 ] && [ $# -gt 1 ] && help && exit 1
147 [ "$moreoptions" = 1 ] && shift 155 [ "$moreoptions" = 1 ] && shift
148 done 156 done
149 157
150 part="" 158 part=""
151 if [ `echo ${LPARAM_BLOCK_DEVICE} | grep -c mmcblk` -ne 0 ]; then 159 if [ `echo ${LPARAM_BLOCK_DEVICE} | grep -c mmcblk` -ne 0 ]; then
152 part="p" 160 part="p"
153 fi 161 fi
154 162
155 # allow only removable/loopback devices, to protect host PC 163 # allow only removable/loopback devices, to protect host PC
156 echo "MACHINE=${MACHINE}" 164 echo "MACHINE=${MACHINE}"
157 echo "SD card rootfs: ${YOCTO_DEFAULT_IMAGE}" 165 echo "SD card rootfs: ${YOCTO_DEFAULT_IMAGE}"
158 echo "Recovery rootfs: ${YOCTO_DEFAULT_IMAGE}" 166 echo "Recovery rootfs: ${YOCTO_DEFAULT_IMAGE}"
159 echo "================================================" 167 echo "================================================"
160 check_device ${LPARAM_BLOCK_DEVICE} 168 check_device ${LPARAM_BLOCK_DEVICE}
161 echo "================================================" 169 echo "================================================"
162 read -p "Press Enter to continue" 170 read -p "Press Enter to continue"
163 171
164 function delete_device 172 function delete_device
165 { 173 {
166 echo 174 echo
167 echo "Deleting current partitions" 175 echo "Deleting current partitions"
168 for ((i=0; i<10; i++)) 176 for ((i=0; i<10; i++))
169 do 177 do
170 if [ `ls ${LPARAM_BLOCK_DEVICE}${part}$i 2> /dev/null | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then 178 if [ `ls ${LPARAM_BLOCK_DEVICE}${part}$i 2> /dev/null | grep -c ${LPARAM_BLOCK_DEVICE}${part}$i` -ne 0 ]; then
171 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE}${part}$i bs=512 count=1024 179 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE}${part}$i bs=512 count=1024
172 fi 180 fi
173 done 181 done
174 sync 182 sync
175 183
176 ((echo d; echo 1; echo d; echo 2; echo d; echo 3; echo d; echo w) | fdisk ${LPARAM_BLOCK_DEVICE} &> /dev/null) || true 184 ((echo d; echo 1; echo d; echo 2; echo d; echo 3; echo d; echo w) | fdisk ${LPARAM_BLOCK_DEVICE} &> /dev/null) || true
177 sync 185 sync
178 186
179 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE} bs=1M count=160 187 dd if=/dev/zero of=${LPARAM_BLOCK_DEVICE} bs=1M count=160
180 sync; sleep 1 188 sync; sleep 1
181 } 189 }
182 190
183 function ceildiv 191 function ceildiv
184 { 192 {
185 local num=$1 193 local num=$1
186 local div=$2 194 local div=$2
187 echo $(( (num + div - 1) / div )) 195 echo $(( (num + div - 1) / div ))
188 } 196 }
189 197
190 function create_parts 198 function create_parts
191 { 199 {
192 echo 200 echo
193 echo "Creating new partitions" 201 echo "Creating new partitions"
194 # Get total card size 202 # Get total card size
195 TOTAL_SIZE=`fdisk -s ${LPARAM_BLOCK_DEVICE}` 203 TOTAL_SIZE=`fdisk -s ${LPARAM_BLOCK_DEVICE}`
196 TOTAL_SIZE=`expr ${TOTAL_SIZE} / 1024` 204 TOTAL_SIZE=`expr ${TOTAL_SIZE} / 1024`
197 ROOTFS_SIZE=`expr ${TOTAL_SIZE} - ${BOOTLOAD_RESERVE_SIZE} - ${PART1_SIZE} - ${SPARE_SIZE}` 205 ROOTFS_SIZE=`expr ${TOTAL_SIZE} - ${BOOTLOAD_RESERVE_SIZE} - ${PART1_SIZE} - ${SPARE_SIZE}`
198 206
199 echo "ROOT SIZE=${ROOTFS_SIZE} TOTAl SIZE=${TOTAL_SIZE}" 207 echo "ROOT SIZE=${ROOTFS_SIZE} TOTAl SIZE=${TOTAL_SIZE}"
200 208
201 BLOCK=`echo ${LPARAM_BLOCK_DEVICE} | cut -d "/" -f 3` 209 BLOCK=`echo ${LPARAM_BLOCK_DEVICE} | cut -d "/" -f 3`
202 SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/physical_block_size` 210 SECT_SIZE_BYTES=`cat /sys/block/${BLOCK}/queue/physical_block_size`
203 211
204 BOOTLOAD_RESERVE_SIZE_BYTES=$((BOOTLOAD_RESERVE_SIZE * 1024 * 1024)) 212 BOOTLOAD_RESERVE_SIZE_BYTES=$((BOOTLOAD_RESERVE_SIZE * 1024 * 1024))
205 PART1_SIZE_BYTES=$((PART1_SIZE * 1024 * 1024)) 213 PART1_SIZE_BYTES=$((PART1_SIZE * 1024 * 1024))
206 PART1_END_BYTES=`expr ${BOOTLOAD_RESERVE_SIZE_BYTES} + ${PART1_SIZE_BYTES}` 214 PART1_END_BYTES=`expr ${BOOTLOAD_RESERVE_SIZE_BYTES} + ${PART1_SIZE_BYTES}`
207 ROOTFS_SIZE_BYTES=$((ROOTFS_SIZE * 1024 * 1024)) 215 ROOTFS_SIZE_BYTES=$((ROOTFS_SIZE * 1024 * 1024))
208 216
209 PART1_FIRST_SECT=`ceildiv ${BOOTLOAD_RESERVE_SIZE_BYTES} ${SECT_SIZE_BYTES}` 217 PART1_FIRST_SECT=`ceildiv ${BOOTLOAD_RESERVE_SIZE_BYTES} ${SECT_SIZE_BYTES}`
210 PART1_END_SECT=`ceildiv ${PART1_END_BYTES} ${SECT_SIZE_BYTES}` 218 PART1_END_SECT=`ceildiv ${PART1_END_BYTES} ${SECT_SIZE_BYTES}`
211 PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1 ` 219 PART2_FIRST_SECT=`expr ${PART1_END_SECT} + 1 `
212 220
213 (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \ 221 (echo n; echo p; echo $BOOTPART; echo $PART1_FIRST_SECT; \
214 echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \ 222 echo $PART1_END_SECT; echo n; echo p; echo $ROOTFSPART; \
215 echo $PART2_FIRST_SECT; echo; echo p; echo w) | fdisk -u ${LPARAM_BLOCK_DEVICE} > /dev/null 223 echo $PART2_FIRST_SECT; echo; echo p; echo w) | fdisk -u ${LPARAM_BLOCK_DEVICE} > /dev/null
216 224
217 sleep 2; sync; 225 sleep 2; sync;
218 fdisk -l ${LPARAM_BLOCK_DEVICE} 226 fdisk -l ${LPARAM_BLOCK_DEVICE}
219 227
220 sleep 2; sync; 228 sleep 2; sync;
221 } 229 }
222 230
223 function format_parts 231 function format_parts
224 { 232 {
225 echo 233 echo
226 echo "Formatting partitions" 234 echo "Formatting partitions"
227 mkfs.vfat -F 16 ${LPARAM_BLOCK_DEVICE}${part}1 -n boot 235 mkfs.vfat -F 16 ${LPARAM_BLOCK_DEVICE}${part}1 -n boot
228 mkfs.ext4 ${LPARAM_BLOCK_DEVICE}${part}2 -L rootfs 236 mkfs.ext4 ${LPARAM_BLOCK_DEVICE}${part}2 -L rootfs
229 sync; sleep 1 237 sync; sleep 1
230 } 238 }
231 239
232 function install_bootloader 240 function install_bootloader
233 { 241 {
234 echo 242 echo
235 echo "Installing U-Boot" 243 echo "Installing U-Boot"
236 dd if=${YOCTO_IMGS_PATH}/imx-boot-${MACHINE}-sd.bin-flash_evk of=${LPARAM_BLOCK_DEVICE} bs=1K seek=${BOOTLOADER_OFFSET}; sync 244 dd if=${YOCTO_IMGS_PATH}/imx-boot-${MACHINE}-sd.bin-flash_evk of=${LPARAM_BLOCK_DEVICE} bs=1K seek=${BOOTLOADER_OFFSET}; sync
237 } 245 }
238 246
239 function mount_parts 247 function mount_parts
240 { 248 {
241 mkdir -p ${P1_MOUNT_DIR} 249 mkdir -p ${P1_MOUNT_DIR}
242 mkdir -p ${P2_MOUNT_DIR} 250 mkdir -p ${P2_MOUNT_DIR}
243 sync 251 sync
244 252
245 mount ${LPARAM_BLOCK_DEVICE}${part}1 ${P1_MOUNT_DIR} 253 mount ${LPARAM_BLOCK_DEVICE}${part}1 ${P1_MOUNT_DIR}
246 mount ${LPARAM_BLOCK_DEVICE}${part}2 ${P2_MOUNT_DIR} 254 mount ${LPARAM_BLOCK_DEVICE}${part}2 ${P2_MOUNT_DIR}
247 sleep 2; sync; 255 sleep 2; sync;
248 } 256 }
249 257
250 function unmount_parts 258 function unmount_parts
251 { 259 {
252 umount ${P1_MOUNT_DIR} 260 umount ${P1_MOUNT_DIR}
253 umount ${P2_MOUNT_DIR} 261 umount ${P2_MOUNT_DIR}
254 262
255 rm -rf ${P1_MOUNT_DIR} 263 rm -rf ${P1_MOUNT_DIR}
256 rm -rf ${P2_MOUNT_DIR} 264 rm -rf ${P2_MOUNT_DIR}
257 } 265 }
258 266
259 function install_yocto 267 function install_yocto
260 { 268 {
261 echo 269 echo
262 echo "Flashing \"Image, device tree and uEnv.txt\" partition" 270 echo "Flashing \"Image, device tree and uEnv.txt\" partition"
263 cp -v ${YOCTO_IMGS_PATH}/Image ${P1_MOUNT_DIR}/ 271 cp -v ${YOCTO_IMGS_PATH}/Image ${P1_MOUNT_DIR}/
264 mkdir -p ${P1_MOUNT_DIR}/dtbs/ 272 mkdir -p ${P1_MOUNT_DIR}/dtbs/
273 if [ "${MACHINE}" = "smarcimx8mq2g" ] ||
274 [ "${MACHINE}" = "smarcimx8mq4g" ]; then
275 cp -v ${YOCTO_IMGS_PATH}/imx8mq-smarc${DISPLAY}.dtb ${P1_MOUNT_DIR}/dtbs/imx8mq-smarc.dtb
276 fi
277 if [ "${MACHINE}" = "smarcimx8mp4g" ] ||
278 [ "${MACHINE}" = "smarcimx8mp6g" ]; then
265 cp -v ${YOCTO_IMGS_PATH}/imx8mp-smarc${DISPLAY}.dtb ${P1_MOUNT_DIR}/dtbs/imx8mp-smarc.dtb 279 cp -v ${YOCTO_IMGS_PATH}/imx8mp-smarc${DISPLAY}.dtb ${P1_MOUNT_DIR}/dtbs/imx8mp-smarc.dtb
280 fi
266 cp -v ${YOCTO_SCRIPTS_PATH}/uEnv.txt ${P1_MOUNT_DIR}/ 281 cp -v ${YOCTO_SCRIPTS_PATH}/uEnv.txt ${P1_MOUNT_DIR}/
267 282
268 echo 283 echo
269 echo "Installing Yocto Root File System" 284 echo "Installing Yocto Root File System"
270 tar jxvf ${YOCTO_IMGS_PATH}/${YOCTO_DEFAULT_IMAGE}-${MACHINE}.tar.bz2 -C ${P2_MOUNT_DIR}/ 285 tar jxvf ${YOCTO_IMGS_PATH}/${YOCTO_DEFAULT_IMAGE}-${MACHINE}.tar.bz2 -C ${P2_MOUNT_DIR}/
271 sync 286 sync
272 } 287 }
273 288
274 function copy_images 289 function copy_images
275 { 290 {
276 echo 291 echo
277 echo "Copying Yocto images to /opt/images/" 292 echo "Copying Yocto images to /opt/images/"
278 mkdir -p ${P2_MOUNT_DIR}/opt/images/Yocto 293 mkdir -p ${P2_MOUNT_DIR}/opt/images/Yocto
279 294
280 # Copy image for eMMC 295 # Copy image for eMMC
281 if [ -f ${YOCTO_IMGS_PATH}/${YOCTO_DEFAULT_IMAGE}-${MACHINE}.tar.bz2 ]; then 296 if [ -f ${YOCTO_IMGS_PATH}/${YOCTO_DEFAULT_IMAGE}-${MACHINE}.tar.bz2 ]; then
282 pv ${YOCTO_IMGS_PATH}/${YOCTO_DEFAULT_IMAGE}-${MACHINE}.tar.bz2 > ${P2_MOUNT_DIR}/opt/images/Yocto/rootfs.tar.bz2 297 pv ${YOCTO_IMGS_PATH}/${YOCTO_DEFAULT_IMAGE}-${MACHINE}.tar.bz2 > ${P2_MOUNT_DIR}/opt/images/Yocto/rootfs.tar.bz2
283 else 298 else
284 echo "rootfs.tar.gz file is not present. Installation on \"eMMC\" will not be supported." 299 echo "rootfs.tar.gz file is not present. Installation on \"eMMC\" will not be supported."
285 fi 300 fi
286 301
287 echo 302 echo
288 echo "Copying Kernel Images to /opt/images/" 303 echo "Copying Kernel Images to /opt/images/"
289 cp ${YOCTO_IMGS_PATH}/Image ${P2_MOUNT_DIR}/opt/images/Yocto/Image 304 cp ${YOCTO_IMGS_PATH}/Image ${P2_MOUNT_DIR}/opt/images/Yocto/Image
290 305
291 echo 306 echo
292 echo "Copying Kernel Device Tree Blob to /opt/images/" 307 echo "Copying Kernel Device Tree Blob to /opt/images/"
293 cp -v ${YOCTO_IMGS_PATH}/*.dtb ${P2_MOUNT_DIR}/opt/images/Yocto/ 308 cp -v ${YOCTO_IMGS_PATH}/*.dtb ${P2_MOUNT_DIR}/opt/images/Yocto/
294 309
295 echo 310 echo
296 echo "Copying Kernel Parameter uEnv.txt to /opt/images/" 311 echo "Copying Kernel Parameter uEnv.txt to /opt/images/"
297 cp -v ${YOCTO_SCRIPTS_PATH}/uEnv_emmc.txt ${P2_MOUNT_DIR}/opt/images/Yocto/uEnv.txt 312 cp -v ${YOCTO_SCRIPTS_PATH}/uEnv_emmc.txt ${P2_MOUNT_DIR}/opt/images/Yocto/uEnv.txt
298 313
299 if [[ $MACHINE = "smarcimx8mp4g" || ${MACHINE} = "smarcimx8mp6g" ]]; then 314 if [[ $MACHINE = "smarcimx8mq2g" || ${MACHINE} = "smarcimx8mq4g" || $MACHINE = "smarcimx8mp4g" || ${MACHINE} = "smarcimx8mp6g" ]]; then
300 cp ${YOCTO_IMGS_PATH}/imx-boot-${MACHINE}-sd.bin-* ${P2_MOUNT_DIR}/opt/images/Yocto 315 cp ${YOCTO_IMGS_PATH}/imx-boot-${MACHINE}-sd.bin-* ${P2_MOUNT_DIR}/opt/images/Yocto
301 (cd ${P2_MOUNT_DIR}/opt/images/Yocto; ln -fs imx-boot-${MACHINE}-sd.bin-flash_evk imx-boot-sd.bin) 316 (cd ${P2_MOUNT_DIR}/opt/images/Yocto; ln -fs imx-boot-${MACHINE}-sd.bin-flash_evk imx-boot-sd.bin)
302 else 317 else
303 cp ${YOCTO_IMGS_PATH}/imx-boot-${MACHINE}-sd.bin ${P2_MOUNT_DIR}/opt/images/Yocto/imx-boot-sd.bin 318 cp ${YOCTO_IMGS_PATH}/imx-boot-${MACHINE}-sd.bin ${P2_MOUNT_DIR}/opt/images/Yocto/imx-boot-sd.bin
304 fi 319 fi
305 } 320 }
306 321
307 function copy_scripts 322 function copy_scripts
308 { 323 {
309 echo 324 echo
310 echo "Copying scripts" 325 echo "Copying scripts"
311 326
312 cp ${YOCTO_SCRIPTS_PATH}/emb-create-yocto-emmc.sh ${P2_MOUNT_DIR}/usr/bin/ 327 cp ${YOCTO_SCRIPTS_PATH}/emb-create-yocto-emmc.sh ${P2_MOUNT_DIR}/usr/bin/
313 } 328 }
314 329
315 umount ${LPARAM_BLOCK_DEVICE}${part}* 2> /dev/null || true 330 umount ${LPARAM_BLOCK_DEVICE}${part}* 2> /dev/null || true
316 331
317 delete_device 332 delete_device
318 create_parts 333 create_parts
319 format_parts 334 format_parts
320 335
321 mount_parts 336 mount_parts
322 install_yocto 337 install_yocto
323 copy_images 338 copy_images
324 copy_scripts 339 copy_scripts
325 340
326 echo 341 echo
327 echo "Syncing" 342 echo "Syncing"
328 sync | pv -t 343 sync | pv -t
329 344
330 unmount_parts 345 unmount_parts
331 346
332 install_bootloader 347 install_bootloader
333 348
334 echo 349 echo
335 echo "Done" 350 echo "Done"
336 echo "========Flash to SD card Completed!=========" 351 echo "========Flash to SD card Completed!========="
337 352
338 exit 0 353 exit 0
339 354
scripts/emb_mk_yocto_sdcard/uEnv.txt
1 optargs="video=HDMI-A-1:1920x1080-32@60 consoleblank=0" 1 optargs="video=HDMI-A-1:1920x1080-32@60 consoleblank=0"
2 #optargs="video=HDMI-A-1:3840x2160-32@30 consoleblank=0" 2 #optargs="video=HDMI-A-1:3840x2160-32@30 consoleblank=0"
3 #optargs="video=HDMI-A-1:3840x2160-32@60 consoleblank=0" 3 #optargs="video=HDMI-A-1:3840x2160-32@60 consoleblank=0"
4 #console port SER3 4 #console port SER3
5 console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200 5 console=ttymxc0,115200 earlycon=ec_imx6q,0x30860000,115200
6 #console port SER2 6 #console port SER2
7 #console=ttymxc2,115200 earlycon=ec_imx6q,0x30880000,115200 7 #console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200
8 #console port SER1 8 #console port SER1
9 #console=ttymxc3,115200 earlycon=ec_imx6q,0x30a60000,115200 9 #console=ttymxc2,115200 earlycon=ec_imx6q,0x30880000,115200
10 #console port SER0 10 #console port SER0
11 #console=ttymxc0,115200 earlycon=ec_imx6q,0x30860000,115200 11 #console=ttymxc3,115200 earlycon=ec_imx6q,0x30A60000,115200
12 mmcdev=1 12 mmcdev=1
13 mmcpart=1 13 mmcpart=1
14 image=Image 14 image=Image
15 loadaddr=0x40480000 15 loadaddr=0x40480000
16 fdt_addr=0x43000000 16 fdt_addr=0x43000000
17 mmcroot=/dev/mmcblk1p2 rw 17 mmcroot=/dev/mmcblk1p2 rw
18 usbroot=/dev/sda2 rw 18 usbroot=/dev/sda2 rw
19 mmcrootfstype=ext4 rootwait fixrtc 19 mmcrootfstype=ext4 rootwait fixrtc
20 netdev=eth0 20 netdev=eth0
21 ethact=FEC0 21 ethact=FEC0
22 ipaddr=192.168.1.150 22 ipaddr=192.168.1.150
23 serverip=192.168.1.53 23 serverip=192.168.1.53
24 gatewayip=192.168.1.254 24 gatewayip=192.168.1.254
25 mmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs} 25 mmcargs=setenv bootargs cma=1280M console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}
26 uenvcmd=run loadimage; run loadfdt; run mmcboot 26 uenvcmd=run loadimage; run loadfdt; run mmcboot
27 # USB Boot 27 # USB Boot
28 #usbargs=setenv bootargs console=${console} root=${usbroot} rootfstype=${mmcrootfstype} ${optargs} 28 #usbargs=setenv bootargs console=${console} root=${usbroot} rootfstype=${mmcrootfstype} ${optargs}
29 #uenvcmd=run loadusbimage; run loadusbfdt; run usbboot 29 #uenvcmd=run loadusbimage; run loadusbfdt; run usbboot
30 30
scripts/emb_mk_yocto_sdcard/uEnv_emmc.txt
1 optargs="video=HDMI-A-1:1920x1080-32@60 consoleblank=0" 1 optargs="video=HDMI-A-1:1920x1080-32@60 consoleblank=0"
2 #optargs="video=HDMI-A-1:3840x2160-32@30 consoleblank=0" 2 #optargs="video=HDMI-A-1:3840x2160-32@30 consoleblank=0"
3 #optargs="video=HDMI-A-1:3840x2160-32@60 consoleblank=0" 3 #optargs="video=HDMI-A-1:3840x2160-32@60 consoleblank=0"
4 #console port SER3 4 #console port SER3
5 console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200 5 console=ttymxc0,115200 earlycon=ec_imx6q,0x30860000,115200
6 #console port SER2 6 #console port SER2
7 #console=ttymxc2,115200 earlycon=ec_imx6q,0x30880000,115200 7 #console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200
8 #console port SER1 8 #console port SER1
9 #console=ttymxc3,115200 earlycon=ec_imx6q,0x30a60000,115200 9 #console=ttymxc2,115200 earlycon=ec_imx6q,0x30880000,115200
10 #console port SER0 10 #console port SER0
11 #console=ttymxc0,115200 earlycon=ec_imx6q,0x30860000,115200 11 #console=ttymxc3,115200 earlycon=ec_imx6q,0x30A60000,115200
12 mmcdev=2 12 mmcdev=0
13 mmcpart=1 13 mmcpart=1
14 image=Image 14 image=Image
15 loadaddr=0x40480000 15 loadaddr=0x40480000
16 fdt_addr=0x43000000 16 fdt_addr=0x43000000
17 mmcroot=/dev/mmcblk2p2 rw 17 mmcroot=/dev/mmcblk0p2 rw
18 usbroot=/dev/sda2 rw 18 usbroot=/dev/sda2 rw
19 mmcrootfstype=ext4 rootwait fixrtc 19 mmcrootfstype=ext4 rootwait fixrtc
20 netdev=eth0 20 netdev=eth0
21 ethact=FEC0 21 ethact=FEC0
22 ipaddr=192.168.1.150 22 ipaddr=192.168.1.150
23 serverip=192.168.1.53 23 serverip=192.168.1.53
24 gatewayip=192.168.1.254 24 gatewayip=192.168.1.254
25 mmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs} 25 mmcargs=setenv bootargs cma=1280M console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}
26 uenvcmd=run loadimage; run loadfdt; run mmcboot 26 uenvcmd=run loadimage; run loadfdt; run mmcboot
27 # USB Boot 27 # USB Boot
28 #usbargs=setenv bootargs console=${console} root=${usbroot} rootfstype=${mmcrootfstype} ${optargs} 28 #usbargs=setenv bootargs console=${console} root=${usbroot} rootfstype=${mmcrootfstype} ${optargs}
29 #uenvcmd=run loadusbimage; run loadusbfdt; run usbboot 29 #uenvcmd=run loadusbimage; run loadusbfdt; run usbboot
30 30