This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3352:从 SPI NOR 闪存引导 UBIFS 时出现问题

Guru**** 2563740 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/583381/linux-am3352-problems-booting-ubifs-from-spi-nor-flash

器件型号:AM3352

工具/软件:Linux

你(们)好

我正在寻找尝试调试为什么无法安装根文件系统的帮助。
我在基于 BeagleBoneBlack 的电路板上使用的是最新 SDK 上的 am355x

它旨在用作驻留在 SPI NOR 闪存上的小型文件系统。

我们使用的是 N25Q256芯片、页面大小为256字节、擦除大小为4 KiB、总共32 MIB。

它在设备树中被划分为:

&spi0{
status ="确定";
pinctrl-names ="默认值";
pinctrl-0 =<&spi0_PINs>;

SPI-FLASH@0{
compatible ="micron、n25q256a"、"JEDEC、SPI-NOR ";
SPI-max-frequency =<48000000>;
status ="确定";
reg =<25mp>
快速读取;
#address-cells =<1>;
#size-cells =<1>;
分区@0 {
标签="SPL";
reg =<0x00000000 0x00020000>;
}
;分区@20000 {
标签="u-boot";
reg =<0x00020000 0x00066000>;
};
分区@



@86000 {标签="DTB";reg = 0x00000000>
;分区0x96000内核= 0x000000>;


分区@5a0000{
标签="-";
reg =<0x005a0000 0x01a60000>;
};
};
}; 

在引导内核时、这些显示为:

[1.094466] m25p80 spi1.0:n25q256a (32768 KB)
[1.098993] 5个在 MTD 设备 spi1.0
[1.104083]上找到的部件分区在"spi1.0"上创建5个 MTD 分区:
[1.108555] 0x000000000000-0x000000020000:"SPL"
[1.114190] 0x000000066200000-0x000000086000

:0x000000015000-0x000000064000-0x000000064000-0x000000064000-0x0006400000:[0x0000-0x00000006400]

我使用了 BitBake 和 processors.wiki.ti.com/.../Processor_SDK_Building_The_SDK 中的指令 来创建 ubifs 和 ubi
我修改了机器配置中的描述符、以尝试匹配我们正在使用的芯片。
这些修改是:

MKUBIFS_args ="-F -m 256 -e 126976 -c 110"
UBINIZE_args ="-m 256 -p 4KiB" 

然后、我通过 u-boot (SF 擦除和 SD 写入)将.ubi 文件传输到芯片的预期位置
- SPL、u-boot、内核和 devicetree 均可从 SPI 闪存加载并运行、而不会出现任何问题

但是,rootfs 无法安装,特别是无法"连接"mtd4:

[0.000000]内核命令行:console=ttyO0、115200n8 noinitrd ip=off RW ubi.mtd=4、256 noinitrd rootfstype=ubifs m
em=256M root=ubi0:rootfs rootwait=1

[1.607933] ubi0:连接 mtd4
[1.617855] ubi0错误:validate_EC_HDR:错误数据偏移512、预期为320
[ 1.624236] ubi0错误:validate_EC_HDR:错误 EC 标头
[1.637806]擦除计数器标头转储:
[1.641286] magic 0x55424923
[1.644762]版本1
[1.647511] EC 0
[1.667801] vd_dhdr_offset 256
[1.670715] data_offset 512
[1.673627] image_seq 645878812
[1.6770707070] HDR_CRC
计数器0x63941dbf [1.68767717]硬件名称:bdbdb0174[1.67174]f [1.674]f
:bdbdbdb:
硬件转储[1.674[1.67174]f:硬件转储[1.674b0641.674]b064 通用 AM33XX (平展器件树)
[1.713466]背板:
[1.715779][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
[1.737804] r7:00000000 R6:00000000 R5:cd824000 R4:cdd19340
[1.743107][ ](show_stack)从[ ](dump_stack+0x24/0x28)
[ 1.767829][ ](dump_stack)从[ ](VALIDATE_EC_HDR+0xc0/0x12c)
[ 1.775023][ ](VALIDATE_EC_HDR)从[ ](ubi_IO_READ_EC_HDR+0x168/0x218)
[1.797806] r7:cd824000 R6:55424923 R5:cdd19340 R4:00000000
[ 1.803097][ ](ubi_io_read_ec_HDR)、来自[ ](ubi_attach+0x184/0x14b0)
[ 1.817804] R10:cdd11a80 R9:c09a531c R8:00000000 r7:cd824000 R6:00000000 R5:cd824000
[ 1.825102] R4:00000000
[ 1.827465][ ](ubi-attach)从[ ](ubi_attach_MTD_DEV_0x640/bbf0)
[ 1.857801] r10:fffff000 r9:00000140 r8:cdc73800 r7:cd824000 r6:00000000 r5:cdc73800
[ 1.865098] r4:00000001
[ 1.867463][ ](ubi-attach_MTD_dev)、来自[ ](ubi_init+0x1e4/0x26c)
[1.887801] r10:fffff000 r9:c0865488 r8:c08654b4 r7:c090d680 r6:c090d684 r5:cdc73800
[1.895099] r4:00000000
[1.897462][ ](ubi-init)、来自[ ](DO_Oe_initcall+0x98/0x1e4)
[1.917805] R10:00000000 R9:c08d3600 R8:000000a9 r7:cdd19280 R6:c091ac60 R5:c08f65d8
[1.925103] R4:c091ac60
[1.927478][ ](多个_initcall)、来自[ ](kernel_init_freeed+0x138/0x1cc)
[1.957802] r10:00000008 r9:c08d3600 r8:000000a9 r7:c0907834 r6:c0914120 r5:c0964d80
[1.965102] r4:c0964d80
[1.967472][ ](kernel_init_freable)从[ ](kernel_init+0x18/0xf4)
[1.987801] r10:00000000 R9:00000000 R8:00000000 r7:00000000 R6:00000000 R5:c0680014
[1.995097] r4:c0964d80
[1.997461][ ](kernel_init)、来自[ ](RET_FANK_0x14/0x3c)
[2.027801] R5:c0680014 R4:00000000
[2.031133] ubi0错误:ubi_IO_READ_EC_HDR:PEB 验证失败
[2.037279] ubi0错误:ubi_attach_MTD_dev:无法连接 mtd4、
rtc1286]
错误
:无法连接到 rtc1286](rtcr) 禁用
[2.04658] ALSA 设备列表:
[2.087413]找不到声卡。
[2.109328] UBIFS 错误(pid:1):无法打开"ubi0:rootfs"、错误-19VFS:无法打开根设备"ubi0:rootfs"或
未知块(0、0):错误-19
[2.127837]请附加正确的"root="引导选项;以下是可用分区:
[2.1356m块(0)
[2.158792] 1f01 408 mtdblock1 (驱动程序?)
[2.163487] 1f02 64 mtdblock2 (驱动程序?)
[2.177811] 1f03 5160 mtdblock3 (驱动程序?)
[2.182509] 1f04 27008 mtdblock4 (驱动程序?)
[2.187803]内核紧急状态-未同步:VFS:无法在未知块(0、0)上安装根 FS
[2.194875]-[结束内核紧急状态-未同步:VFS:无法在未知块(0、0)上安装根 FS 

我在没有成功的情况下尝试了几种不同的 bootargs:

包括:

root=/dev/mtd4
root=/dev/mtdblock
root=ubi0:rootfs 

如果有人建议我做些什么,我将不胜感激。

此致、
Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    进一步深入了解、我发现我的 mkfs.ubi 参数看起来不适合我使用的 SPI 和闪存(我认为我一定会混淆阅读以 NAND 为中心的文档)。

    但是、如果我将 mkfs/uninize argumentsas 更改为:

    MKUBIFS_args ="-F -m 1 -e 65408 -c 225"
    UBINIZE_args ="-m 1 -p 64KiB -O 64" 

    -基于使用64KB "扇区"擦除分区而不是报告的4KB "子扇区"的图

    和与 e2e.ti.com/.../1531937中的值类似

    我得到一个看起来非常相似的错误:

    [1.607933] ubi0:连接 mtd4
    [1.617843] ubi0错误:validate_EC_HDR:错误的 VID 标头偏移64、预期的值为256
    [1.624627] ubi0错误:validate_EC_HDR:错误的 EC 标头
    [1.637792]擦除计数器标头转储:
    [1.641272] magic 0x55424923
    [1.6447477] version 1
    [1.647495] EC 0
    [1.667788] vid_HDR_offset 64
    [1.670620] data_offset 128
    [1.673532] image_seq 422620020
    [1.676925] HDR_CRC 0x37adbf5b [1.6877074]
    
    不是 CPU 头文件[1.6774]硬件错误:bdbdb:bdbdb 1.6774]硬件错误[1.6799] bdb:bdb:bdbdump [1.674099]
    通用 AM33XX (平展器件树)
    [1.713453]背板:
    [1.715767][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [1.737791] r7:00000000 R6:00000000 R5:cd824000 R4:cdd19340
    [1.743093][ ](show_stack)从[ ](dump_stack+0x24/0x28)
    [ 1.767814][ ](dump_stack)从[ ](VALIDATE_EC_HDR+0xc0/0x12c)
    [ 1.775008][ ](VALIDATE_EC_HDR)从[ ](ubi_IO_READ_EC_HDR+0x168/0x218)
    [1.797792] r7:cd824000 R6:55424923 R5:cdd19340 R4:00000000
    [1.803083][ ](ubi_io_read_ec_HDR)、来自[ ](ubi_attach+0x184/0x14b0)
    [ 1.817790] r10:cdd11a80 r9:c09a531c r8:00000000 r7:cd824000 r6:00000000 r5:cd824000
    [ 1.825089] r4:00000000
    [ 1.827453][ ](ubi-attach)从[ ](ubi_attach_mtd_dev+0x640/bbf0)
    [ 1.857788] r10:fffff000 r9:00000140 r8:cdc73800 r7:cd824000 r6:00000000 r5:cdc73800
    [ 1.865085] r4:00000001
    [ 1.867450][ ](ubi-attach_MTD_dev)、来自[ ](ubi_init+0x1e4/0x26c)
    [1.887788] r10:fffff000 r9:c0865488 r8:c08654b4 r7:c090d680 r6:c090d684 r5:cdc73800
    [1.895085] r4:00000000
    [1.897446][ ](ubi-init)、来自[ ](DO_Oe_initcall+0x98/0x1e4)
    [1.917792] R10:00000000 R9:c08d3600 R8:000000a9 r7:cdd19280 R6:c091ac60 R5:c08f65d8
    [1.925093] R4:c091ac60
    [1.927469] ](多个_initcall)、来自[ ](kernel_init_freeed+0x138/0x1cc)
    [1.957788] r10:00000008 r9:c08d3600 r8:000000a9 r7:c0907834 r6:c0914120 r5:c0964d80
    [1.965089] r4:c0964d80
    [1.967459][ ](kernel_init_freable)从[ ](kernel_init+0x18/0xf4)
    [1.987788] r10:00000000 R9:00000000 R8:00000000 r7:00000000 R6:00000000 R5:c0680014
    [1.995087] r4:c0964d80
    [1.997451][ ](kernel_init)、来自[ ](RET_FAULT+0x14/0x3c)
    [2.027788] R5:c0680014 R4:00000000
    [2.031122] ubi0错误:ubi_IO_READ_EC_HDR:无法对 PEB 进行验证
    [2.037266] ubi0错误:ubi_attach 806_MTD_dev:无法连接 mtd4、
    
    无法连接 mmtc1224]错误[ 2.037266] rb](rtcr
    ) 禁用
    [2.04647] ALSA 设备列表:
    [2.087400]找不到声卡。
    [2.109312] UBIFS 错误(pid:1):无法打开“ubi0:rootfs”,错误-19VFS:无法打开根设备“ubi0:ro9
    [2.127822]请附加正确的“root=”引导选项;以下是可用分区:
    [2.135601] 1f00 128 mtdblock0 (驱动程序?)
    [2.158779] 1f01 408 mtdblock1 (驱动程序?)
    [2.163475] 1f02 64 mtdblock2 (驱动程序?)
    [2.177797] 1f03 5160 mtdblock3 (驱动程序?)
    [2.182494] 1f04 27008 mtdblock4 (驱动程序?)
    [ 2.187188]内核紧急状态-未同步:VFS:无法在未知块(0、0)上安装根 FS
    [2.194861]-[结束内核紧急状态-未同步:VFS:无法在未知块(0、0)上安装根 FS
    
    

    感谢您的任何建议

    祝你一切顺利、
    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我花了一些时间从另一个方向接近它、试图了解正在发生的情况

    因此、我在 u-boot 中启用了 MTD 和 UBI 支持;

    我目前已将分区定义如下

    => mtdparts
    
    --mtdparts_init--
    last_ids:nor0=spi1.0
    env_ID:nor0=spi1.0
    last_parts:mtdparts=spi1.0:0x00020000@0x00000000 (SPL)、0x00066000
    SPL@0x00020000 (u-boot)、0x00010000@@@@@@0x00086000 (tbt)
    
    
    
    
    
    
    、0x00080000800008000080000_parts (neld000-0xtbt)、0x00080000800008000080000_parts (neltbt ,#部件=5#:
    名称 尺寸 偏移 MASK_FLAGS
    0:SPL 0x00020000 0x00000000 0
    1:U-boot 0x00066000 0x00020000 0
    2:dtb 0x00010000 0x00086000 0
    3:内核 0x0050a000 0x00096000 0
    4:rootfs 0x01a60000 0x005a0000 0
    
    -- MTD_PART_INFO:器件 nor0 (spi1.0)
    
    活动分区的分区编号0:nor0、0 -(SPL) 0x00020000 @ 0x00000000
    
    

    并成功使用 ubi 部件在 MTD:rootfs 上创建 ubi 分区  

    我在特定情况下键入了命令:ubi part rootfs

    以下输出(以及 ubi info 示例)完成了此操作。

    ubi DBG EBA (pid 1):初始化 EBA 子系统
    UBI DBG EBA (pid 1):EBA 子系统已初始化
    UBI DBG gen (pid 1):ubi0 MAJOR 为0
    
    ubi0:连接的 mtd1 (名称"MTD=4"、大小为26 MiB)
    
    最大值0:PEB 大小:4096字节(4 KB)、最大值39B:最小值39B I/O 单元大小:1/256、子页大小1
    ubi0:VID 头偏移:64 (对齐64)、数据偏移:128
    ub0:良好的 PEB:6752、错误的 PEB:0、损坏的 PEB:0
    ubi0:用户卷:0、内部卷:1、最大值 卷数:23
    ubi0:最大/平均擦除计数器:1/0、WL 阈值:4096、图像序列号:0
    ubi0:可用 PEB:6748、总保留 PEB:4、为错误的 PEB 处理保留的 PEB:0
    
    => ubi 信息0
    UBI:MTD 器件名称: "MTD=4"
    UBI:MTD 器件尺寸: 26 MIB
    UBI:物理内存块大小:4096字节(4 KiB)
    UBI:逻辑内存块大小:3968字节
    UBI:良好的 PEB 数量: 6752
    UBI:不良 PEB 数: 0
    UBI:最小的闪存 I/O 单元:1
    UBI:VID 标头偏移: 64 (对齐64)
    UBI:数据偏移: 128
    UBI:最大 允许的卷: 23
    UBI:磨损矫正阈值:4096
    UBI:内部卷数:1
    UBI:用户卷数: 0
    UBI:可用 PEB: 6748
    UBI:保留的 PEB 总数:4
    UBI:为错误的 PEB 处理保留的 PEB 数:0
    UBI:最大/平均擦除计数器:1/0
    

    这将导致我相信我应该提供给 mkfs.ubi 和 ubbinize 的选项

    MKUBIFS_args ="-F -m 1 -e 3968 -c 6752 -x zlib"

    UBINIZE_args ="-m 1 -p 4KiB -O 64"

    但是,当我运行 machine=时 bitbake core-image-minimal


    日志数据如下:
    |调试:执行 python 函数 set_image_size
    |调试:Python 函数 SET_IMAGE_SIZE 完成
    |调试:执行 shell 函数 do _image_ubifs
    |错误:LEB 大小太小3968、最小值为15360

    这似乎是一个过去为他人而出现的问题(例如、http://lists.infradead.org/pipermail/linux-mtd/2013-July/047665.html)

    有人能不能建议修改 Arago 编译中使用的 mkfs 工具的最佳方法是什么、以便我可以解决此 eraseblock 大小限制?

    或者确实还有其他更清洁的解决方案

    感谢你的任何帮助。

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Richard、

    您正将哪个文件系统创建为 UBI 映像? 默认情况下、我们具有最小 Arago FS:

    TI-PROCESSOR-SDK-LINUX-AM335x-EVM-03.02.00.05/文件系统/Arago-base-tisdk-image-am335x-evm.ubi

    与 EVM 上的 NAND 闪存相比、SPI 闪存非常慢、因此 UBIFS 的性能不会那么好。 您还可以尝试使用 ramdisk 和/或 JFFS2 (而不是 UBIFS)

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Pavel

    我使用 Arago 项目创建了一个非常精简的内核镜像-最小化版本(删除了所有不必要的功能、系统上的 Busybox)

    它目前正作为 NFS 映像用于我们的应用程序进行测试;现在,我需要权衡如何为最终目标构建(并确实分区) rootfs 的不同选项。

    其中一部分涉及让我了解方案的差异以及权衡因素(例如大小、引导时间、稳健性和性能之间)

    根据文档、UBIFS 被推荐为优于 JFFS2的首选。  

    因为它代表了其中的任一种、所以我认为我必须修改工具、使它们能够构建一个能够在我们使用的小型 NOR 芯片上工作的映像。
    因此我计划配置 Arago 项目配方以构建两者(可能还有其他几个)、以便我可以尝试它们、看看它们有何不同。

    我感谢对这种做法提出的任何和所有建议;或对这种做法的反馈

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Richard、

    请使用以下 wiki 页面仔细检查您的计算结果以供参考:

    processors.wiki.ti.com/.../UBIFS_Support
    processors.wiki.ti.com/.../TI811x_UBIFS_Support
    processors.wiki.ti.com/.../MTD_Utilities

    关于 MTD 工具支持、您还可以使用 Linux-MTD 邮件列表。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    刚才我简单地回答说、我已经采纳了您先前关于现在使用 JFFS2的建议。

    安装速度可能会慢一些、但至少我可以获得一些启动内容。

    我将深入了解在未来的某个时候可以采取哪些措施来启用 UBIFS 支持、以及支持小型擦除块的工具的必要模板、这些模块将应用程序与 SIGSEV 留在别处。

    感谢你的帮助
    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    64K 正常
    //UBI 4K 不支持
    {"gd25q256"、info (0xc84019、0、64 * 1024、512、 0/*sect_4k*/)},
    {"gd25q512"、INFO (0xc84020、0、64 * 1024、1024、 0/*sect_4k*/)},