<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>LayerscapeのトピックRe: LX2160ARDB SD Card Booting, LSDK FitImage</title>
    <link>https://community.nxp.com/t5/Layerscape/LX2160ARDB-SD-Card-Booting-LSDK-FitImage/m-p/2417590#M16898</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;Your approach is &lt;STRONG&gt;not the recommended LSDK method&lt;/STRONG&gt;. The individual raw images can work, but you must also reproduce the complete U-Boot environment and boot sequence for LX2160A. The safer method is to generate and flash the composite firmware image:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;flex-builder -i mkfw -m lx2160ardb_rev2 -b sd
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;This generates:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-text p8i6j0g hljs language-text _12n1b832"&gt;build/images/firmware_lx2160ardb_rev2_sdboot.img
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Then write it to the SD card:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; flex-installer -f firmware_lx2160ardb_rev2_sdboot.img -d /dev/mmcblk0
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Alternatively:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; &lt;SPAN class="hljs-built_in"&gt;dd&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;if&lt;/SPAN&gt;=firmware_lx2160ardb_rev2_sdboot.img \
        of=/dev/mmcblk0 bs=1k seek=4 conv=fsync
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;H3 class="_9k2iva0 p8i6j0e _1ibi0s3e heading3 _9k2iva1"&gt;Problems in the proposed procedure&lt;/H3&gt;
&lt;OL class="p8i6j04"&gt;
&lt;LI class="p8i6j0c"&gt;&lt;CODE class="p8i6j0h"&gt;root=/dev/mmcblk0p1&lt;/CODE&gt; is valid only if partition 1 contains an extracted Linux root filesystem. A &lt;CODE class="p8i6j0h"&gt;.tar.gz&lt;/CODE&gt; file itself is not a mounted root filesystem; it must be extracted into the partition:&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; mkfs.ext4 /dev/mmcblk0p1
&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; mount /dev/mmcblk0p1 /mnt
&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; tar -xpf fsl-image-networking-full-lx2160ardb-rev2-*.rootfs.tar.gz \
    -C /mnt
&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; umount /mnt
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;bash&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;OL class="p8i6j04" start="2"&gt;
&lt;LI class="p8i6j0c"&gt;This command assumes that the FIT image occupies exactly &lt;CODE class="p8i6j0h"&gt;0x14000&lt;/CODE&gt; blocks:&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-text p8i6j0g hljs language-text _12n1b832"&gt;mmc &lt;SPAN class="hljs-built_in"&gt;read&lt;/SPAN&gt; 0x90000000 0x8000 0x14000
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;That size must match the actual FIT file size, rounded up to 512-byte sectors. Otherwise, U-Boot may read too little or overwrite adjacent memory.&lt;/P&gt;
&lt;OL class="p8i6j04" start="3"&gt;
&lt;LI class="p8i6j0c"&gt;
&lt;P class="p8i6j03 paragraph"&gt;You are bypassing the normal &lt;CODE class="p8i6j0h"&gt;sd_bootcmd&lt;/CODE&gt; sequence. The standard sequence also loads the Management Complex firmware, DPC, and other required components. The LSDK guide defines a composite SD layout and recommends booting through the generated firmware image rather than manually placing each component. &lt;A id="base-ui-:r2tea:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://www.nxp.com/docs/en/user-guide/LSDKUG_Rev21.08.pdf" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="1" aria-label="Citation 1" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="p8i6j0c"&gt;
&lt;P class="p8i6j03 paragraph"&gt;Your &lt;CODE class="p8i6j0h"&gt;fip.bin&lt;/CODE&gt; and &lt;CODE class="p8i6j0h"&gt;fip_ddr_all.bin&lt;/CODE&gt; entries should not be treated as interchangeable. Their correct locations and loading commands depend on the generated U-Boot environment and firmware layout.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="p8i6j03 paragraph"&gt;A better manual boot test, after the composite image is installed, is:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-text p8i6j0g hljs language-text _12n1b832"&gt;=&amp;gt; run sd_bootcmd
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;or simply reset the board with the boot switches configured for SD boot.&lt;/P&gt;
&lt;H3 class="_9k2iva0 p8i6j0e _1ibi0s3e heading3 _9k2iva1"&gt;Why source directories are empty&lt;/H3&gt;
&lt;P class="p8i6j03 paragraph"&gt;The LSDK package separates the build framework from component source trees. The directories under &lt;CODE class="p8i6j0h"&gt;components/firmware&lt;/CODE&gt; may contain manifests, configuration, recipes, or references, while the actual ATF, U-Boot, RCW, DDR PHY, and Linux sources are fetched according to the LSDK manifest/configuration. Therefore, cloning the component repositories is expected when building from source. Use the exact revisions specified by the LSDK release rather than arbitrary upstream branches.&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;For example, build through Flexbuild instead of independently cloning and building each component:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;flex-builder -c atf   -m lx2160ardb_rev2 -b sd
flex-builder -c linux -m lx2160ardb_rev2
flex-builder -i mkfw  -m lx2160ardb_rev2 -b sd
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;For a production build, use the official &lt;CODE class="p8i6j0h"&gt;flexbuild_lsdk2108.tgz&lt;/CODE&gt; archive because it contains the release-matched configuration and component revisions. &lt;A id="base-ui-:r2tej:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://nxp.lightning.force.com/lightning/r/Case/5002p00002ZJ9ZvAAL/view" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="3" aria-label="Citation 3" target="_blank"&gt;&lt;/A&gt;&lt;A id="base-ui-:r2tel:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://nxp.lightning.force.com/lightning/r/Case/5002p00002fYGxCAAW/view" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="4" aria-label="Citation 4" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3 class="_9k2iva0 p8i6j0e _1ibi0s3e heading3 _9k2iva1"&gt;Generating a FIT image&lt;/H3&gt;
&lt;P class="p8i6j03 paragraph"&gt;A FIT image is generated from an ITS description using U-Boot’s &lt;CODE class="p8i6j0h"&gt;mkimage&lt;/CODE&gt; utility:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;mkimage -f lx2160.its lx2160.fit
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;The ITS file describes the kernel, device tree, optional initramfs, load addresses, compression, hashes, and configuration. The LSDK guide explicitly documents this process and gives the command format above. &lt;A id="base-ui-:r2tes:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://www.nxp.com/docs/en/user-guide/LSDKUG_Rev21.08.pdf" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="1" aria-label="Citation 1" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;A minimal kernel-plus-DTB example is:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-dts p8i6j0g hljs language-dts _12n1b832"&gt;/dts-v1/;

/ {
    description = &lt;SPAN class="hljs-string"&gt;"LX2160A kernel and device tree FIT"&lt;/SPAN&gt;;
    &lt;SPAN class="hljs-comment"&gt;#address-cells = &amp;lt;1&amp;gt;;&lt;/SPAN&gt;

    images {
        kernel {
            description = &lt;SPAN class="hljs-string"&gt;"Linux kernel"&lt;/SPAN&gt;;
            data = /incbin/(&lt;SPAN class="hljs-string"&gt;"Image"&lt;/SPAN&gt;);
            &lt;SPAN class="hljs-built_in"&gt;type&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"kernel"&lt;/SPAN&gt;;
            &lt;SPAN class="hljs-built_in"&gt;arch&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"arm64"&lt;/SPAN&gt;;
            os = &lt;SPAN class="hljs-string"&gt;"linux"&lt;/SPAN&gt;;
            compression = &lt;SPAN class="hljs-string"&gt;"none"&lt;/SPAN&gt;;
            load = &amp;lt;0x81080000&amp;gt;;
            entry = &amp;lt;0x81080000&amp;gt;;

            hash-1 {
                algo = &lt;SPAN class="hljs-string"&gt;"sha256"&lt;/SPAN&gt;;
            };
        };

        fdt {
            description = &lt;SPAN class="hljs-string"&gt;"LX2160ARDB Rev2 device tree"&lt;/SPAN&gt;;
            data = /incbin/(&lt;SPAN class="hljs-string"&gt;"fsl-lx2160a-rdb.dtb"&lt;/SPAN&gt;);
            &lt;SPAN class="hljs-built_in"&gt;type&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"flat_dt"&lt;/SPAN&gt;;
            &lt;SPAN class="hljs-built_in"&gt;arch&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"arm64"&lt;/SPAN&gt;;
            compression = &lt;SPAN class="hljs-string"&gt;"none"&lt;/SPAN&gt;;
            load = &amp;lt;0x90000000&amp;gt;;

            hash-1 {
                algo = &lt;SPAN class="hljs-string"&gt;"sha256"&lt;/SPAN&gt;;
            };
        };
    };

    configurations {
        default = &lt;SPAN class="hljs-string"&gt;"conf"&lt;/SPAN&gt;;

        conf {
            kernel = &lt;SPAN class="hljs-string"&gt;"kernel"&lt;/SPAN&gt;;
            fdt = &lt;SPAN class="hljs-string"&gt;"fdt"&lt;/SPAN&gt;;
        };
    };
};
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Build it with the &lt;CODE class="p8i6j0h"&gt;mkimage&lt;/CODE&gt; supplied by the LSDK U-Boot tools:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;mkimage -f lx2160.its fitImage
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;For a compressed kernel, use &lt;CODE class="p8i6j0h"&gt;Image.gz&lt;/CODE&gt; and set:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-dts p8i6j0g hljs language-dts _12n1b832"&gt;compression = &lt;SPAN class="hljs-string"&gt;"gzip"&lt;/SPAN&gt;;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Ensure that the kernel, FDT, initramfs, and U-Boot load regions do not overlap. The generated file in &lt;CODE class="p8i6j0h"&gt;tmp/deploy/images/.../fitImage-*.bin&lt;/CODE&gt; is normally a Yocto-generated FIT artifact; its timestamp and Git hash are packaging metadata, not a special binary format. The FIT format itself is produced by &lt;CODE class="p8i6j0h"&gt;mkimage&lt;/CODE&gt;.&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;Finally, note that the documented LSDK 21.08 FIT example includes an initramfs/rootfs as well as kernel and DTB. If you boot with &lt;CODE class="p8i6j0h"&gt;root=/dev/mmcblk0p1&lt;/CODE&gt;, you can omit the initramfs, but the root filesystem must be properly extracted and contain a valid &lt;CODE class="p8i6j0h"&gt;/sbin/init&lt;/CODE&gt;. &lt;A id="base-ui-:r2tf8:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://www.nxp.com/docs/en/user-guide/LSDKUG_Rev21.08.pdf" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="1" aria-label="Citation 1" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;Regards&lt;/P&gt;</description>
    <pubDate>Wed, 30 Sep 2026 18:10:29 GMT</pubDate>
    <dc:creator>Bio_TICFSL</dc:creator>
    <dc:date>2026-09-30T18:10:29Z</dc:date>
    <item>
      <title>LX2160ARDB SD Card Booting, LSDK FitImage</title>
      <link>https://community.nxp.com/t5/Layerscape/LX2160ARDB-SD-Card-Booting-LSDK-FitImage/m-p/2417360#M16897</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have installed the LSDK 21.08 and the atf, rcw, u-boot, ddr-phy folders are already available but why the source isn't available in it and have to git clone for each source?&lt;/P&gt;&lt;P&gt;For complete SD card booting, i have deployed the following files at blocks mentioned below&lt;/P&gt;&lt;P&gt;1. bl2_sd.pbl - 0x8&lt;/P&gt;&lt;P&gt;2. fip.bin - 0x800&lt;/P&gt;&lt;P&gt;3. fip_ddr_all.bin - 0x4000&lt;/P&gt;&lt;P&gt;4. mc_lx2160a_10.40.0.itb - 0x5000&lt;/P&gt;&lt;P&gt;5. dpc-usxgmii.dtb - 0x7000&lt;/P&gt;&lt;P&gt;6. fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin - 0x8000&lt;/P&gt;&lt;P&gt;And I have made partitions in SD card(64GB) as below&lt;/P&gt;&lt;P&gt;1. /dev/mmcblk0p1 - sector 409600 to sector 42352640&lt;/P&gt;&lt;P&gt;2. /dev/mmcblk0p2 - sector 42352640 to sector 121534463&lt;/P&gt;&lt;P&gt;and mounting the rootfs "fsl-image-networking-full-lx2160ardb-rev2-20260310091147.rootfs.tar.gz" on /dev/mmcblk0p1 partition using the bootargs command at u-boot as&lt;/P&gt;&lt;P&gt;=&amp;gt; setenv bootcmd 'setenv bootargs root=/dev/mmcblk0p1 rw rootwait console=ttyAMA0,115200; mmc dev 0; mmc read 0x90000000 0x8000 0x14000; bootm 0x90000000'&lt;/P&gt;&lt;P&gt;is this the right approach do it?? Please suggest any better approach that can be done.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And in LSDK how to generate the fitImage binary file for kernel and dtb, like the fitImages present in the LSDK under distro/build_lx2160ardb-rev2/tmp/deploy/images/lx2160ardb-rev2/ directory like fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin.&lt;/P&gt;</description>
      <pubDate>Wed, 30 Sep 2026 06:52:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LX2160ARDB-SD-Card-Booting-LSDK-FitImage/m-p/2417360#M16897</guid>
      <dc:creator>Priyaa</dc:creator>
      <dc:date>2026-09-30T06:52:20Z</dc:date>
    </item>
    <item>
      <title>Re: LX2160ARDB SD Card Booting, LSDK FitImage</title>
      <link>https://community.nxp.com/t5/Layerscape/LX2160ARDB-SD-Card-Booting-LSDK-FitImage/m-p/2417590#M16898</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;Your approach is &lt;STRONG&gt;not the recommended LSDK method&lt;/STRONG&gt;. The individual raw images can work, but you must also reproduce the complete U-Boot environment and boot sequence for LX2160A. The safer method is to generate and flash the composite firmware image:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;flex-builder -i mkfw -m lx2160ardb_rev2 -b sd
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;This generates:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-text p8i6j0g hljs language-text _12n1b832"&gt;build/images/firmware_lx2160ardb_rev2_sdboot.img
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Then write it to the SD card:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; flex-installer -f firmware_lx2160ardb_rev2_sdboot.img -d /dev/mmcblk0
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Alternatively:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; &lt;SPAN class="hljs-built_in"&gt;dd&lt;/SPAN&gt; &lt;SPAN class="hljs-keyword"&gt;if&lt;/SPAN&gt;=firmware_lx2160ardb_rev2_sdboot.img \
        of=/dev/mmcblk0 bs=1k seek=4 conv=fsync
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;H3 class="_9k2iva0 p8i6j0e _1ibi0s3e heading3 _9k2iva1"&gt;Problems in the proposed procedure&lt;/H3&gt;
&lt;OL class="p8i6j04"&gt;
&lt;LI class="p8i6j0c"&gt;&lt;CODE class="p8i6j0h"&gt;root=/dev/mmcblk0p1&lt;/CODE&gt; is valid only if partition 1 contains an extracted Linux root filesystem. A &lt;CODE class="p8i6j0h"&gt;.tar.gz&lt;/CODE&gt; file itself is not a mounted root filesystem; it must be extracted into the partition:&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; mkfs.ext4 /dev/mmcblk0p1
&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; mount /dev/mmcblk0p1 /mnt
&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; tar -xpf fsl-image-networking-full-lx2160ardb-rev2-*.rootfs.tar.gz \
    -C /mnt
&lt;SPAN class="hljs-built_in"&gt;sudo&lt;/SPAN&gt; umount /mnt
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;bash&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;OL class="p8i6j04" start="2"&gt;
&lt;LI class="p8i6j0c"&gt;This command assumes that the FIT image occupies exactly &lt;CODE class="p8i6j0h"&gt;0x14000&lt;/CODE&gt; blocks:&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-text p8i6j0g hljs language-text _12n1b832"&gt;mmc &lt;SPAN class="hljs-built_in"&gt;read&lt;/SPAN&gt; 0x90000000 0x8000 0x14000
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;That size must match the actual FIT file size, rounded up to 512-byte sectors. Otherwise, U-Boot may read too little or overwrite adjacent memory.&lt;/P&gt;
&lt;OL class="p8i6j04" start="3"&gt;
&lt;LI class="p8i6j0c"&gt;
&lt;P class="p8i6j03 paragraph"&gt;You are bypassing the normal &lt;CODE class="p8i6j0h"&gt;sd_bootcmd&lt;/CODE&gt; sequence. The standard sequence also loads the Management Complex firmware, DPC, and other required components. The LSDK guide defines a composite SD layout and recommends booting through the generated firmware image rather than manually placing each component. &lt;A id="base-ui-:r2tea:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://www.nxp.com/docs/en/user-guide/LSDKUG_Rev21.08.pdf" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="1" aria-label="Citation 1" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI class="p8i6j0c"&gt;
&lt;P class="p8i6j03 paragraph"&gt;Your &lt;CODE class="p8i6j0h"&gt;fip.bin&lt;/CODE&gt; and &lt;CODE class="p8i6j0h"&gt;fip_ddr_all.bin&lt;/CODE&gt; entries should not be treated as interchangeable. Their correct locations and loading commands depend on the generated U-Boot environment and firmware layout.&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P class="p8i6j03 paragraph"&gt;A better manual boot test, after the composite image is installed, is:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-text p8i6j0g hljs language-text _12n1b832"&gt;=&amp;gt; run sd_bootcmd
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;or simply reset the board with the boot switches configured for SD boot.&lt;/P&gt;
&lt;H3 class="_9k2iva0 p8i6j0e _1ibi0s3e heading3 _9k2iva1"&gt;Why source directories are empty&lt;/H3&gt;
&lt;P class="p8i6j03 paragraph"&gt;The LSDK package separates the build framework from component source trees. The directories under &lt;CODE class="p8i6j0h"&gt;components/firmware&lt;/CODE&gt; may contain manifests, configuration, recipes, or references, while the actual ATF, U-Boot, RCW, DDR PHY, and Linux sources are fetched according to the LSDK manifest/configuration. Therefore, cloning the component repositories is expected when building from source. Use the exact revisions specified by the LSDK release rather than arbitrary upstream branches.&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;For example, build through Flexbuild instead of independently cloning and building each component:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;flex-builder -c atf   -m lx2160ardb_rev2 -b sd
flex-builder -c linux -m lx2160ardb_rev2
flex-builder -i mkfw  -m lx2160ardb_rev2 -b sd
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;For a production build, use the official &lt;CODE class="p8i6j0h"&gt;flexbuild_lsdk2108.tgz&lt;/CODE&gt; archive because it contains the release-matched configuration and component revisions. &lt;A id="base-ui-:r2tej:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://nxp.lightning.force.com/lightning/r/Case/5002p00002ZJ9ZvAAL/view" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="3" aria-label="Citation 3" target="_blank"&gt;&lt;/A&gt;&lt;A id="base-ui-:r2tel:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://nxp.lightning.force.com/lightning/r/Case/5002p00002fYGxCAAW/view" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="4" aria-label="Citation 4" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3 class="_9k2iva0 p8i6j0e _1ibi0s3e heading3 _9k2iva1"&gt;Generating a FIT image&lt;/H3&gt;
&lt;P class="p8i6j03 paragraph"&gt;A FIT image is generated from an ITS description using U-Boot’s &lt;CODE class="p8i6j0h"&gt;mkimage&lt;/CODE&gt; utility:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;mkimage -f lx2160.its lx2160.fit
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;The ITS file describes the kernel, device tree, optional initramfs, load addresses, compression, hashes, and configuration. The LSDK guide explicitly documents this process and gives the command format above. &lt;A id="base-ui-:r2tes:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://www.nxp.com/docs/en/user-guide/LSDKUG_Rev21.08.pdf" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="1" aria-label="Citation 1" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;A minimal kernel-plus-DTB example is:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-dts p8i6j0g hljs language-dts _12n1b832"&gt;/dts-v1/;

/ {
    description = &lt;SPAN class="hljs-string"&gt;"LX2160A kernel and device tree FIT"&lt;/SPAN&gt;;
    &lt;SPAN class="hljs-comment"&gt;#address-cells = &amp;lt;1&amp;gt;;&lt;/SPAN&gt;

    images {
        kernel {
            description = &lt;SPAN class="hljs-string"&gt;"Linux kernel"&lt;/SPAN&gt;;
            data = /incbin/(&lt;SPAN class="hljs-string"&gt;"Image"&lt;/SPAN&gt;);
            &lt;SPAN class="hljs-built_in"&gt;type&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"kernel"&lt;/SPAN&gt;;
            &lt;SPAN class="hljs-built_in"&gt;arch&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"arm64"&lt;/SPAN&gt;;
            os = &lt;SPAN class="hljs-string"&gt;"linux"&lt;/SPAN&gt;;
            compression = &lt;SPAN class="hljs-string"&gt;"none"&lt;/SPAN&gt;;
            load = &amp;lt;0x81080000&amp;gt;;
            entry = &amp;lt;0x81080000&amp;gt;;

            hash-1 {
                algo = &lt;SPAN class="hljs-string"&gt;"sha256"&lt;/SPAN&gt;;
            };
        };

        fdt {
            description = &lt;SPAN class="hljs-string"&gt;"LX2160ARDB Rev2 device tree"&lt;/SPAN&gt;;
            data = /incbin/(&lt;SPAN class="hljs-string"&gt;"fsl-lx2160a-rdb.dtb"&lt;/SPAN&gt;);
            &lt;SPAN class="hljs-built_in"&gt;type&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"flat_dt"&lt;/SPAN&gt;;
            &lt;SPAN class="hljs-built_in"&gt;arch&lt;/SPAN&gt; = &lt;SPAN class="hljs-string"&gt;"arm64"&lt;/SPAN&gt;;
            compression = &lt;SPAN class="hljs-string"&gt;"none"&lt;/SPAN&gt;;
            load = &amp;lt;0x90000000&amp;gt;;

            hash-1 {
                algo = &lt;SPAN class="hljs-string"&gt;"sha256"&lt;/SPAN&gt;;
            };
        };
    };

    configurations {
        default = &lt;SPAN class="hljs-string"&gt;"conf"&lt;/SPAN&gt;;

        conf {
            kernel = &lt;SPAN class="hljs-string"&gt;"kernel"&lt;/SPAN&gt;;
            fdt = &lt;SPAN class="hljs-string"&gt;"fdt"&lt;/SPAN&gt;;
        };
    };
};
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Build it with the &lt;CODE class="p8i6j0h"&gt;mkimage&lt;/CODE&gt; supplied by the LSDK U-Boot tools:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-bash p8i6j0g hljs language-bash _12n1b832"&gt;mkimage -f lx2160.its fitImage
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;For a compressed kernel, use &lt;CODE class="p8i6j0h"&gt;Image.gz&lt;/CODE&gt; and set:&lt;/P&gt;
&lt;DIV class="l8rrz21 _1ibi0s3et" data-ui-element="code-block-container"&gt;
&lt;PRE&gt;&lt;CODE class="markdown-code-dts p8i6j0g hljs language-dts _12n1b832"&gt;compression = &lt;SPAN class="hljs-string"&gt;"gzip"&lt;/SPAN&gt;;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="l8rrz23 _1ibi0s344 _1ibi0s32o _1ibi0s3dv _1ibi0s3eu _1ibi0s3ce"&gt;
&lt;DIV class="l8rrz25 _1ibi0s3eh"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="lqznwq0" style="mask-image: url('/images/copy.svg'); vertical-align: text-bottom; height: 14px; min-width: 14px; width: 14px;"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P class="p8i6j03 paragraph"&gt;Ensure that the kernel, FDT, initramfs, and U-Boot load regions do not overlap. The generated file in &lt;CODE class="p8i6j0h"&gt;tmp/deploy/images/.../fitImage-*.bin&lt;/CODE&gt; is normally a Yocto-generated FIT artifact; its timestamp and Git hash are packaging metadata, not a special binary format. The FIT format itself is produced by &lt;CODE class="p8i6j0h"&gt;mkimage&lt;/CODE&gt;.&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;Finally, note that the documented LSDK 21.08 FIT example includes an initramfs/rootfs as well as kernel and DTB. If you boot with &lt;CODE class="p8i6j0h"&gt;root=/dev/mmcblk0p1&lt;/CODE&gt;, you can omit the initramfs, but the root filesystem must be properly extracted and contain a valid &lt;CODE class="p8i6j0h"&gt;/sbin/init&lt;/CODE&gt;. &lt;A id="base-ui-:r2tf8:" class="wdbi343 wdbi341 _1ibi0s3ei _1ibi0s38m" tabindex="0" role="button" href="https://www.nxp.com/docs/en/user-guide/LSDKUG_Rev21.08.pdf" rel="noreferrer" aria-expanded="false" aria-haspopup="dialog" data-base-ui-click-trigger="" data-label="1" aria-label="Citation 1" target="_blank"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class="p8i6j03 paragraph"&gt;Regards&lt;/P&gt;</description>
      <pubDate>Wed, 30 Sep 2026 18:10:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LX2160ARDB-SD-Card-Booting-LSDK-FitImage/m-p/2417590#M16898</guid>
      <dc:creator>Bio_TICFSL</dc:creator>
      <dc:date>2026-09-30T18:10:29Z</dc:date>
    </item>
    <item>
      <title>Re: LX2160ARDB SD Card Booting, LSDK FitImage</title>
      <link>https://community.nxp.com/t5/Layerscape/LX2160ARDB-SD-Card-Booting-LSDK-FitImage/m-p/2417683#M16899</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for the detailed explanation.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We have build the LSDK setup using yocto project as given in UG10374&lt;/P&gt;&lt;P&gt;1. For SD card booting, in the procedure we followed we have created the partition and extracted the rootfs as mentioned by you and contains a valid /sbin/init. This was also verfied by making partition(/dev/mmcblk1p1) in emmc flash, extracting the rootfs and able to mount the system in its partition but not getting when its in SD.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Is the booting possible by loading the boot images through block write into SD card and mounting rootfs on the partition(/dev/mmcblk0p1)??&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Because after the mounting on SD card partition gets failed, the partitions are not listed when checked by the command lsblk after booting from qspi.&lt;/P&gt;&lt;P&gt;2. The actual file size fitImage binary is around 16MB and block size of 0x8000...but the log is as follows when booted&lt;/P&gt;&lt;P&gt;=&amp;gt; setenv bootcmd 'setenv bootargs root=/dev/mmcblk1p1 rw rootwait console=ttyAMA0,115200; mmc dev 0; mmc read 90000000 8000 8800; bootm 90000000'&lt;BR /&gt;=&amp;gt;&lt;BR /&gt;=&amp;gt;&lt;BR /&gt;=&amp;gt; boot&lt;/P&gt;&lt;P&gt;switch to partitions #0, OK&lt;BR /&gt;mmc0 is current device&lt;/P&gt;&lt;P&gt;MMC read: dev # 0, block # 32768, count 35000 ... 35000 blocks read: OK&lt;BR /&gt;## Loading kernel from FIT Image at 90000000 ...&lt;BR /&gt;Using 'conf-freescale_fsl-lx2160a-rdb.dtb' configuration&lt;BR /&gt;Trying 'kernel-1' kernel subimage&lt;BR /&gt;Description: Linux kernel&lt;BR /&gt;Created: 2023-02-08 3:38:28 UTC&lt;BR /&gt;Type: Kernel Image&lt;BR /&gt;Compression: gzip compressed&lt;BR /&gt;Data Start: 0x90000114&lt;BR /&gt;Data Size: 16608244 Bytes = 15.8 MiB&lt;BR /&gt;Architecture: AArch64&lt;BR /&gt;OS: Linux&lt;BR /&gt;Load Address: 0x80080000&lt;BR /&gt;Entry Point: 0x80080000&lt;BR /&gt;Hash algo: sha256&lt;BR /&gt;Hash value: 59af2bda187c7e19bd0a37818f1c22c24d30562979041f7bee01288661ae5bee&lt;BR /&gt;Verifying Hash Integrity ... sha256+ OK&lt;BR /&gt;## Loading fdt from FIT Image at 90000000 ...&lt;BR /&gt;Using 'conf-freescale_fsl-lx2160a-rdb.dtb' configuration&lt;BR /&gt;Trying 'fdt-freescale_fsl-lx2160a-rdb.dtb' fdt subimage&lt;BR /&gt;Description: Flattened Device Tree blob&lt;BR /&gt;Created: 2023-02-08 3:38:28 UTC&lt;BR /&gt;Type: Flat Device Tree&lt;BR /&gt;Compression: uncompressed&lt;BR /&gt;Data Start: 0x90fd6e28&lt;BR /&gt;Data Size: 33857 Bytes = 33.1 KiB&lt;BR /&gt;Architecture: AArch64&lt;BR /&gt;Hash algo: sha256&lt;BR /&gt;Hash value: 32858f2c5f385a1a4410b8d4bff2414b1c4d36a13493cc8242eab6464e8d1d82&lt;BR /&gt;Verifying Hash Integrity ... sha256+ OK&lt;BR /&gt;Booting using the fdt blob at 0x90fd6e28&lt;BR /&gt;Uncompressing Kernel Image&lt;BR /&gt;Loading Device Tree to 000000009fff4000, end 000000009ffff440 ... OK&lt;BR /&gt;fsl-mc: DPL not deployed, DPAA2 ethernet not work&lt;/P&gt;&lt;P&gt;Starting kernel ...&lt;/P&gt;&lt;P&gt;"Synchronous Abort" handler, esr 0x02000000&lt;BR /&gt;elr: 000000000636a000 lr : 0000000082005fd0 (reloc)&lt;BR /&gt;elr: 0000000080080000 lr : 00000000fbd1bfd0&lt;BR /&gt;x0 : 000000009fff4000 x1 : 0000000000000000&lt;BR /&gt;x2 : 0000000000000000 x3 : 0000000000000000&lt;BR /&gt;x4 : 0000000080080000 x5 : 0000000000000001&lt;BR /&gt;x6 : 0000000000000008 x7 : 0000000000000000&lt;BR /&gt;x8 : 00000000fbb0e7c8 x9 : 0000010000000000&lt;BR /&gt;x10: 000000000a200023 x11: 0000000000000002&lt;BR /&gt;x12: 0000000000000002 x13: 00000000fbdfffff&lt;BR /&gt;x14: 000000009fff4000 x15: 00000000fbd18be8&lt;BR /&gt;x16: 00000000fbd52f58 x17: 00000000fbb31560&lt;BR /&gt;x18: 00000000fbb11d90 x19: 00000000fbde6c98&lt;BR /&gt;x20: 0000000000000000 x21: 0000000000000400&lt;BR /&gt;x22: 0000000000000001 x23: 00000000fbb16538&lt;BR /&gt;x24: 00000000fbb16538 x25: 00000000fbdd1978&lt;BR /&gt;x26: 0000000000000000 x27: 00000000fbd1bff8&lt;BR /&gt;x28: 0000000090000114 x29: 00000000fbd1bf98&lt;/P&gt;&lt;P&gt;Code: 00000000 00000000 00000000 00000000 (00000000)&lt;BR /&gt;Resetting CPU ...&lt;/P&gt;&lt;P&gt;### ERROR ### Please RESET the board ###&lt;/P&gt;&lt;P&gt;3. Once will check the sd_bootcmd sequence and try to boot through the generated firmware image&lt;/P&gt;&lt;P&gt;4. fip.bin and fip_ddr_all.bin are loaded according to the locations mentioned in the Flash layout table in TRM.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for providing the procedure for generating a FIT image.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 01 Oct 2026 06:52:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LX2160ARDB-SD-Card-Booting-LSDK-FitImage/m-p/2417683#M16899</guid>
      <dc:creator>Priyaa</dc:creator>
      <dc:date>2026-10-01T06:52:44Z</dc:date>
    </item>
  </channel>
</rss>

