2417360_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2417360_zh-CN

2417360_zh-CN

LX2160ARDB SD卡启动,LSDK FitImage

您好,


我已经安装了 LSDK 21.08,并且 atf、rcw、u-boot、ddr-phy 文件夹都已存在,但是为什么源代码不在其中,而需要为每个源代码进行 git clone 操作?

为了实现完整的 SD 卡启动,我已将以下文件部署到下面提到的区块中。

1. bl2_sd.pbl - 0x8

2. fip.bin - 0x800

3. fip_ddr_all.bin - 0x4000

4. mc_lx2160a_10.40.0.itb - 0x5000

5. dpc-usxgmii.dtb - 0x7000

6. fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin - 0x8000

我已在 SD 卡(64GB)上创建了如下分区。

1. /dev/mmcblk0p1 - 扇区 409600 至扇区 42352640

2. /dev/mmcblk0p2 - 扇区 42352640 至扇区 121534463

并使用 u-boot 的 bootargs 命令将根文件系统“fsl-image-networking-full-lx2160ardb-rev2-20260310091147.rootfs.tar.gz”挂载到 /dev/mmcblk0p1 分区。

-> setenv bootcmd 'setenv bootargs root=/dev/mmcblk0p1 rw rootwait console=ttyAMA0,115200; mmc dev 0; mmc read 0x90000000 0x8000 0x14000; bootm 0x90000000'

这样做对吗?请提出任何更好的方法。


在 LSDK 中,如何为内核和 dtb 生成 fitImage 二进制文件,就像 LSDK 中 distro/build_lx2160ardb-rev2/tmp/deploy/images/lx2160ardb-rev2/ 目录下的 fitImage 文件一样,例如 fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin。

Re: LX2160ARDB SD Card Booting, LSDK FitImage

您好,


感谢您的详细解释。


我们按照 UG10374 中给出的 Yocto 项目构建了 LSDK 环境。

1.对于 SD 卡启动,在我们遵循的步骤中,我们创建了分区并提取了您提到的 rootfs,其中包含有效的 /sbin/init。通过在 emmc 闪存中创建分区 (/dev/mmcblk1p1)、提取根文件系统并能够将系统挂载到其分区中,但无法将其挂载到 SD 卡中,也验证了这一点。

能否通过将启动映像以块写入方式加载到 SD 卡,并将根文件系统挂载到分区(/dev/mmcblk0p1)上来实现启动?

因为在 SD 卡分区挂载失败后,从 qspi 启动后使用 lsblk 命令检查分区时,不会列出这些分区。

2. 实际的 fitImage 二进制文件大小约为 16MB,块大小为 0x8000……但启动时的日志如下:

=> setenv bootcmd 'setenv bootargs root=/dev/mmcblk1p1 rw rootwait console=ttyAMA0,115200; mmc dev 0; mmc read 90000000 8000 8800; bootm 90000000'
=>
=>
=> 启动

切换到分区 #0,成功
mmc0 是当前设备

MMC 读取:设备 # 0,块 # 32768,计数 35000 ... 已读取 35000 个块:成功
## Loading kernel from FIT Image at 90000000 ...
Using 'conf-freescale_fsl-lx2160a-rdb.dtb' configuration
Trying 'kernel-1' kernel subimage
Description: Linux kernel
Created: 2023-02-08 3:38:28 UTC
Type: Kernel Image
Compression: gzip compressed
Data Start: 0x90000114
Data Size: 16608244 Bytes = 15.8 MiB
Architecture: AArch64
OS: Linux
Load Address: 0x80080000
Entry Point: 0x80080000
Hash algo: sha256
Hash value: 59af2bda187c7e19bd0a37818f1c22c24d30562979041f7bee01288661ae5bee
Verifying Hash Integrity ... sha256+ OK
##从位于 90000000 的 FIT 图像加载 fdt...
使用“conf-freescale_fsl-lx2160a-rdb.dtb”配置
尝试使用 'fdt-freescale_fsl-lx2160a-rdb.dtb' fdt 子映像
描述:扁平化的设备树斑点
创建时间:2023年2月8日 3:38:28 UTC
类型:扁平设备树
压缩:未压缩
数据起始地址:0x90fd6e28
数据大小:33857 字节 = 33.1 KiB
建筑:AArch64
哈希算法:sha256
哈希值:32858f2c5f385a1a4410b8d4bff2414b1c4d36a13493cc8242eab6464e8d1d82
正在验证哈希完整性……sha256+ 通过
使用位于 0x90fd6e28 的 fdt blob 启动
解压缩内核图像
正在加载设备树至 000000009fff4000,结束于 000000009ffff440 ... 成功
fsl-mc:DPL 未部署,DPAA2 以太网无法工作

正在启动内核...

“同步中止”处理程序,esr 0x02000000
elr: 000000000636a000 lr: 0000000082005fd0 (重定位)
elr: 0000000080080000 lr: 00000000fbd1bfd0
x0 : 000000009fff4000 x1 : 0000000000000000
x2 : 0000000000000000 x3 : 0000000000000000
x4:0000000080080000 x5:0000000000000001
x6 : 0000000000000008 x7 : 0000000000000000
x8:00000000fbb0e7c8 x9:0000010000000000
x10: 000000000a200023 x11: 0000000000000002
x12: 0000000000000002 x13: 00000000fbdfffff
x14: 000000009fff4000 x15: 00000000fbd18be8
x16: 00000000fbd52f58 x17: 00000000fbb31560
x18: 00000000fbb11d90 x19: 00000000fbde6c98
x20: 0000000000000000 x21: 0000000000000400
x22: 0000000000000001 x23: 00000000fbb16538
x24: 00000000fbb16538 x25: 00000000fbdd1978
x26: 0000000000000000 x27: 00000000fbd1bff8
x28: 0000000090000114 x29: 00000000fbd1bf98

代码:00000000 00000000 00000000 00000000 (00000000)
正在重置CPU...

### ERROR ### Please RESET the 板 ###

3. 将检查 sd_bootcmd 序列,并尝试通过生成的固件映像启动。

4. 根据 TRM 中 Flash 布局表中提到的位置加载 fip.bin 和 fip_ddr_all.bin。


感谢您提供生成 FIT 图像的步骤。




Re: LX2160ARDB SD Card Booting, LSDK FitImage

你好,

你的方法并非 LSDK 推荐的方法。单个原始映像可以使用,但您还必须为 LX2160A 重现完整的 U-Boot 环境和启动顺序。更安全的方法是生成并刷写复合固件镜像:

flex-builder -i mkfw -m lx2160ardb_rev2 -b sd
 
 

这将生成:

build/images/firmware_lx2160ardb_rev2_sdboot.img
 
 

然后将其写入SD卡:

sudo flex-installer -f firmware_lx2160ardb_rev2_sdboot.img -d /dev/mmcblk0
 
 

备选:

sudo dd if=firmware_lx2160ardb_rev2_sdboot.img \
        of=/dev/mmcblk0 bs=1k seek=4 conv=fsync
 

所提程序存在的问题

  1. 只有当分区 1 包含提取的 Linux 根文件系统时, root=/dev/mmcblk0p1才有效。.tar.gz文件本身并不是已挂载的根文件系统;它必须被解压到分区中:
sudo mkfs.ext4 /dev/mmcblk0p1
sudo mount /dev/mmcblk0p1 /mnt
sudo tar -xpf fsl-image-networking-full-lx2160ardb-rev2-*.rootfs.tar.gz \
    -C /mnt
sudo umount /mnt
狂欢
 
  1. 该命令假定 FIT 图像正好占用0x14000个块:
mmc read 0x90000000 0x8000 0x14000
 
 

该大小必须与实际的 FIT 文件大小相符,向上取整到 512 字节扇区。否则,U-Boot 可能会读取的数据过少或覆盖相邻的内存。

  1. 你绕过了正常的sd_bootcmd序列。标准序列还会加载管理复合体固件、DPC 和其他所需元器件。LSDK 指南定义了复合 SD 卡布局,并建议通过生成的固件映像启动,而不是手动放置每个组件。

  2. 您的fip.bin和fip_ddr_all.bin条目不应视为可以互换。它们正确的位置和加载命令取决于生成的 U-Boot 环境和固件布局。

安装复合镜像后,更好的手动启动测试方法是:

=> run sd_bootcmd
 
 

或者直接重置电路板,并将启动开关配置为 SD 卡启动。

为什么源目录为空

LSDK 包将构建框架与组件源代码树分离。components/firmware目录下可能包含清单、配置、配方或参考资料,而实际的 ATF、U-Boot、RCW、DDR PHY 和 Linux 源代码是根据 LSDK 清单/配置获取的。因此,从源代码构建时,需要克隆组件存储库。请使用 LSDK 版本中指定的精确修订版本,而不是任意上游分支。

例如,使用 Flexbuild 进行构建,而不是独立克隆和构建每个元器件:

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
 
 

对于生产环境版本,请使用官方的flexbuild_lsdk2108.tgz归档文件,因为它包含与版本匹配的配置和元器件修订。

生成 FIT 图像

使用 U-Boot 的mkimage工具,根据 ITS 描述生成 FIT 镜像:

mkimage -f lx2160.its lx2160.fit
 
 

ITS 文件描述了内核、设备树、可选的 initramfs、加载地址、压缩、哈希和配置。LSDK 指南对此过程进行了详细记录,并给出了上述命令格式。

一个最小的内核加 DTB 示例是:

/dts-v1/;

/ {
    description = "LX2160A kernel and device tree FIT";
    #address-cells = <1>;

    images {
        kernel {
            description = "Linux kernel";
            data = /incbin/("Image");
            type = "kernel";
            arch = "arm64";
            os = "linux";
            compression = "none";
            load = <0x81080000>;
            entry = <0x81080000>;

            hash-1 {
                algo = "sha256";
            };
        };

        fdt {
            description = "LX2160ARDB Rev2 device tree";
            data = /incbin/("fsl-lx2160a-rdb.dtb");
            type = "flat_dt";
            arch = "arm64";
            compression = "none";
            load = <0x90000000>;

            hash-1 {
                algo = "sha256";
            };
        };
    };

    configurations {
        default = "conf";

        conf {
            kernel = "kernel";
            fdt = "fdt";
        };
    };
};
 
 

使用 LSDK U-Boot 工具提供的mkimage构建它:

mkimage -f lx2160.its fitImage
 
 

对于压缩内核,请使用Image.gz并进行如下设置:

compression = "gzip";
 
 

确保内核、FDT、initramfs 和 U-Boot 加载区域不重叠。tmp/deploy/images/.../fitImage-*.bin中生成的文件通常是 Yocto 生成的 FIT 工件;其时间戳和 Git 哈希值是打包元数据,而不是特殊的二进制格式。FIT 格式本身是由mkimage生成的。

最后,请注意,文档中记录的 LSDK 21.08 FIT 示例包括 initramfs/rootfs 以及内核和 DTB。如果使用root=/dev/mmcblk0p1启动,则可以省略 initramfs,但必须正确提取根文件系统并包含有效的/sbin/init 。

此致

タグ(1)
評価なし
バージョン履歴
最終更新日:
木曜日
更新者: