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/AM4376:Linux 4.4引导故障、潜在的 QSPI JFFS2

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/611308/linux-am4376-linux-4-4-boot-failures-potential-qspi-jffs2

器件型号:AM4376

工具/软件:Linux

您好!

我们需要在客户目标硬件上发布我们发现的 Linux 4.4内核问题、该硬件已从以前的 SDK 中运行以前的 Linux 4.1、但没有这些问题。 怀疑可能与 QSPI 或 JFFS2有关。 任何指针都会得到极大赞赏。

在我们运行的 Linux 内核4.4中、我们注意到偶尔会出现引导故障、这些故障表现为"Init"进程未启动或内核崩溃以及堆栈转储。

 

在我们尝试分析故障原因时、我们注意到来自 ti-QSPI 驱动程序的可疑消息、该消息似乎会导致 jffs2读取失败。

对于背景、我们对 QSPI NOR 使用 jffs2文件系统。 我们可以在基于 GP 和 HS 的电路板上看到这些问题。 我们的内核是 Krogoth 分支机构的4.4.y 内核。

 

平均而言、我们每1000个冷启动周期会看到25条"ti-QSPI 47900000:DMA WAIT_for_Complete_TIMEOUT"消息。 在这种情况下、Init 故障大约为4到5次。

 

从4.1.x Fido 分支运行时、来自 ti-QSPI 的此消息似乎也会出现。 但是、它不会导致2000冷周期启动时崩溃的锁定。

 

来自 ti-QSPI 驱动程序的可疑消息(在本例中初始化失败):

[1.772762]   OMAP_i2c 4802a000.i2c:总线1修订版0.12 (100kHz 时)

[1.780375]   hctosys:无法打开 RTC 器件(rtc0)

[1.793443]   释放未使用的内核内存:2004K (c07ef000 - c09e4000)

[1.799882]   此架构没有内核内存保护。

[8.132448]   random:非阻塞池已初始化

[8.562683]   jffs2:注意:(195) jffs2_build_xattr_subsystem:找到完整的 xattr 子系统、xdatum 的0 (未选中、0孤立)和 xref 的0 (0死、0孤立)。

[8.606267]   EXT4-FS (mmcblk0p4):由于功能不兼容、无法安装为 ext3

[8.616046]   EXT4-FS (mmcblk0p4):由于功能不兼容、无法安装为 ext2

[8.659588]   EXT4-FS (mmcblk0p4):恢复完成

[8.665091]   EXT4-FS (mmcblk0p4):已安装文件系统、具有有序数据模式。 OPTS:(空)

mount:在/rootfs 上装载/dev/mtdblock5失败:设备或资源占线

[8.861456]   ti-QSPI 47900000。QSPI:DMA WAIT_for_Complete_TIMEOUT

[8.867982]   jffs2:错误:(1) read_drentrry:读取名称的余数:错误-110

[8.875656]   jffs2:错误:(1) jffs2_do_read_inode_internal:无法读取 INO 13的节点、返回的错误为-5

[8.885788]   jffs2:iget()对于 INO #13失败

switch_root:无法执行'/sbin/init:输入/输出错误

[8.912758]   内核严重错误-未同步:尝试终止初始化! exitcode=0x00000100

[8.912758]    

[8.921893]   --[结束内核紧急状态-未同步:尝试终止初始化! exitcode=0x00000100

[8.921893]    

 

 

来自 ti-QSPI 驱动程序的可疑消息(在这种情况下启动正常初始化):

[1.642776]   OMAP_i2c 4802a000.i2c:总线1 rev0.12为100kHz

[1.650388]   hctosys:无法打开 RTC 设备(rtc0)

[7.589789]   random:非阻塞池已初始化

[8.210623]   jffs2:注意:(1) jffs2_build_xattr_subsystem:完整构建 xattr 子系统、找到 xdatum 的0 (未检查、0无主)和 xref 的0 (0死、0无主)。

[8.229641]   VFS:在器件31:5上安装了根(jffs2文件系统)。

[8.236097]   devtmpfs:已安装

[8.239535]   释放未使用的内核内存:260k (c080b000 - c084c000)

[8.245909]   此架构没有内核内存保护。

init:版本2.88正在引导

[9.343013]   EXT4-FS (mmcblk0p3):恢复完成

[9.348311]   EXT4-FS (mmcblk0p3):已安装文件系统、具有有序数据模式。 OPTS:(空)

[9.361185]   EXT4-FS (mmcblk0p4):恢复完成

[9.366126]   EXT4-FS (mmcblk0p4):已安装文件系统、具有有序数据模式。 OPTS:(空)

正在启动 udev

[9.461479]   ti-QSPI 47900000。QSPI:DMA WAIT_for_Complete_TIMEOUT

[9.467681]   jffs2:错误:(83) read_drentrry:读取名称的余数:错误-110

[9.475239]   jffs2:错误:(83) jffs2_do_read_inode_internal:无法读取 INO 810的节点、返回的错误为-5

[9.485656]   jffs2: iget() failed for ino #810

[9.881995]   udevd[97]:开始版本3.1.5

[10.236832]  OMAP_RTC 44e3e000.RTC:已在运行

[10.296200]  OMAP_RTC 44e3e000.RTC:RTC 内核:将44e3e000.RTC 注册为 rtc0

[10.324644]  OMAP_WDT:OMAP 看门狗计时器修订版0x01:初始超时60秒

 

不包含此类消息的类似引导:

[1.642787]   OMAP_i2c 4802a000.i2c:总线1 rev0.12为100kHz

[1.650397]   hctosys:无法打开 RTC 器件(rtc0)

[7.598711]   random:非阻塞池已初始化

[8.067240]   jffs2:注意:(1) jffs2_build_xattr_subsystem:完整构建 xattr 子系统、找到 xdatum 的0 (未选中、0孤立)和 xref 的0 (0死、0孤立)。

[8.085259]   VFS:已在器件31:5上安装根(jffs2文件系统)。

[8.091747]   devtmpfs:已安装

[8.095196]   释放未使用的内核内存:260k (c080b000 - c084c000)

[8.101577]   此架构没有内核内存保护。

init:版本2.88正在引导

[9.163412]   EXT4-FS (mmcblk0p3):恢复完成

[9.168675]   EXT4-FS (mmcblk0p3):已安装文件系统、具有有序数据模式。 OPTS:(空)

[9.182149]   EXT4-FS (mmcblk0p4):恢复完成

[9.186962]   EXT4-FS (mmcblk0p4):已安装的文件系统、具有有序数据模式。 OPTS:(空)

正在启动 udev

udev:由于检测到以下文件中的更改,所以不使用 udev 超速缓存:

udev:    /proc/version /proc/cmdline /proc/devices

udev:    lib/udev/rules.d/* etc/udev/rules.d/*

udev:将重新生成 udev 超速缓存。 要识别检测到的变化、

udev:比较  /etc/udev/cache.data 上缓存的 sysconf

udev:与 /dev/shm/udev.cache 上的当前 sysconf 相对应

[9.549253]   udevd[96]:开始版本3.1.5

[9.934537]   OMAP_RTC 44e3e000.RTC:已在运行

[9.967047]   OMAP_RTC 44e3e000.RTC:RTC 内核:将44e3e000.RTC 注册为 rtc0

[10.025894]  OMAP-WDT:OMAP 看门狗计时器版本0x01:初始超时60秒

[10.093914]  OMAP_rng 48310010.rng:OMAP 随机数生成器版本 20.

 

内核崩溃也会显示为具有表示 jffs2操作正在进行的签名(从回扫)。 请参阅随附的 crash_log.txt。

 

在初始审阅中、我们注意到在 krogoth 分支中为 SPI-ti-QSPI.c 的 QSPI 启用 DMA 和 MMAP 读取相关的一些校验

如果有人可以快速查看此问题并为我们提供有关如何调试此问题的一些指导、那将非常有帮助。

 

这些消息是否出现在 SDK 系统测试中?

 

 

谢谢、

-Gunter

e2e.ti.com/.../7563.bootissue.zip

 

 

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

    能否检查上一个 PDK v04.00与 Linux 内核4.9.28是否出现相同的启动问题?

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

    Gunter、

    经过一些调查、我找到了 DMA 超时的位置。 /drivers/spi/spi-ti-qspi.c 文件的"QSPI_DMA_transfer"函数中似乎存在时序问题。 "WAIT_for_Complete_TIMEOUT"的等待周期过期、这会导致错误消息"DMA WAIT_for_Complete_TIMEOUT"。 这意味着任务被标记为 Task_uninterruptible、并将等待一段时间(以 jiffies 为单位)。
    我建议您仅增加或乘以实验周期、以检查出现的问题是否会更改。
    例如更改

    RET = WAIT_for_Completion_TIMEOUT (&QSPI->TRANSFER_COMPLETE、
    mss_TO_jiffies (len)); 


    使用

    RET = WAIT_for_Completion_TIMEOUT (&QSPI->TRANSFER_COMPLETE、
    2 * mss_TO_jiffies (len); 

    或使用较高的乘法因子(例如4)。

    BR
    Tsvetolin Shulev