123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- .. SPDX-License-Identifier: GPL-2.0+
- Colibri iMX7
- ============
- Quick Start
- -----------
- - Build U-Boot
- - NAND IMX image adjustments before flashing
- - Flashing manually U-Boot to eMMC
- - Flashing manually U-Boot to NAND
- - Using ``update_uboot`` script
- Build U-Boot
- ------------
- .. code-block:: bash
- $ export CROSS_COMPILE=arm-linux-gnueabi-
- $ make colibri_imx7_emmc_defconfig # For NAND: colibri_imx7_defconfig
- $ make
- After build succeeds, you will obtain final ``u-boot-dtb.imx`` IMX specific
- image, ready for flashing (but check next section for additional
- adjustments).
- Final IMX program image includes (section ``6.6.7`` from `IMX7DRM
- <https://www.nxp.com/webapp/Download?colCode=IMX7DRM>`_):
- * **Image vector table** (IVT) for BootROM
- * **Boot data** -indicates the program image location, program image size
- in bytes, and the plugin flag.
- * **Device configuration data**
- * **User image**: U-Boot image (``u-boot-dtb.bin``)
- IMX image adjustments prior to flashing
- ---------------------------------------
- 1. U-Boot for both Colibri iMX7 NAND and eMMC versions
- is built with HABv4 support (`AN4581.pdf
- <https://www.nxp.com/docs/en/application-note/AN4581.pdf>`_)
- enabled by default, which requires to generate a proper
- Command Sequence File (CSF) by srktool from NXP (not included in the
- U-Boot tree, check additional details in introduction_habv4.txt)
- and concatenate it to the final ``u-boot-dtb.imx``.
- 2. In case if you don't want to generate a proper ``CSF`` (for any reason),
- you still need to pad the IMX image so i has the same size as specified in
- in **Boot Data** section of IMX image.
- To obtain this value, run:
- .. code-block:: bash
- $ od -X -N 0x30 u-boot-dtb.imx
- 0000000 402000d1 87800000 00000000 877ff42c
- 0000020 877ff420 877ff400 878a5000 00000000
- ^^^^^^^^
- 0000040 877ff000 000a8060 00000000 40b401d2
- ^^^^^^^^ ^^^^^^^^
- Where:
- * ``877ff400`` - IVT self address
- * ``877ff000`` - Program image address
- * ``000a8060`` - Program image size
- To calculate the padding:
- * IVT offset = ``0x877ff400`` - ``0x877ff000`` = ``0x400``
- * Program image size = ``0xa8060`` - ``0x400`` = ``0xa7c60``
- and then pad the image:
- .. code-block:: bash
- $ objcopy -I binary -O binary --pad-to 0xa7c60 --gap-fill=0x00 \
- u-boot-dtb.imx u-boot-dtb.imx.zero-padded
- 3. Also, according to requirement from ``6.6.7.1``, the final image
- should have ``0x400`` offset for initial IVT table.
- For eMMC setup we handle this by flashing it to ``0x400``, howewer
- for NAND setup we adjust the image prior to flashing, adding padding in the
- beginning of the image.
- .. code-block:: bash
- $ dd if=u-boot-dtb.imx.zero-padded of=u-boot-dtb.imx.ready bs=1024 seek=1
- Flash U-Boot IMX image to eMMC
- ------------------------------
- Flash the ``u-boot-dtb.imx.zero-padded`` binary to the primary eMMC hardware
- boot area partition:
- .. code-block:: bash
- => load mmc 1:1 $loadaddr u-boot-dtb.imx.zero-padded
- => setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt ${blkcnt} / 0x200
- => mmc dev 0 1
- => mmc write ${loadaddr} 0x2 ${blkcnt}
- Flash U-Boot IMX image to NAND
- ------------------------------
- .. code-block:: bash
- => load mmc 1:1 $loadaddr u-boot-dtb.imx.ready
- => nand erase.part u-boot1
- => nand write ${loadaddr} u-boot1 ${filesize}
- => nand erase.part u-boot2
- => nand write ${loadaddr} u-boot2 ${filesize}
- Using update_uboot script
- -------------------------
- You can also usb U-Boot env update_uboot script,
- which wraps all eMMC/NAND specific command invocation:
- .. code-block:: bash
- => load mmc 1:1 $loadaddr u-boot-dtb.imx.ready
- => run update_uboot
|