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.

[参考译文] AM5728:内核错误

Guru**** 2588945 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/634591/am5728-kernel-errors

器件型号:AM5728

您好!

我正在尝试基于 AM5728构建定制板。 我设法进入内核启动、如我附加的日志中所示。 我甚至接受了欢迎阿拉戈的信息、但似乎有一种前后一致的做法。 它几乎总是以"Starting udev Coldplug All Devices..."开头 ,然后抛出“无法在虚拟地址处理内核分页请求”,后跟“systemd 已污染”、“udevadm 已污染”、“systemd-udevd 已污染”或类似内容。 我主要在尝试启动完整的 rootfs ("tisdk-rootfs-image-am57xx-evm")时遇到此问题、而当我使用基本 rootfs ("arago-base-tisdk-image-am57xx-evm")时、我可以转到命令行。

我已执行的基本步骤如下。 请告诉我这是不是正确的方法。


1) 1)在 SD 卡上的 u-boot 分区上构建并安装了带有自定义 defconfig 的 u-boot

2) 2)从 ti-processor-SDK 文件夹中、我将"tisdk-rootfs-image-am57xx-evm"提取到 targetNFS 中

3) 3)在自定义 defconfig 中复制到内核源树(arch/arm/configs)

4)在自定义 DTS 文件中复制到内核源树(arch/arm/boot/dts)

5) 5)修改了 ti-processor-sdk 文件夹中的顶层 Rules.make 以使用自定义 defconfig

6) 6)修改了顶级 makefile 以创建自定义 DTS 文件

7) 7) RAN:

       sudo make clean

       sudo 全部创建

       sudo make install

8) 8)通过 targetNFS 复制到 SD 卡上的 rootfs 分区

9)采用自定义 DTB (corresp. to customDTS)并将其重命名为 am57xx-evm-reva3.dtb 并放入 rootfs/boot

内核调试日志的片段:

[确定]已开始更新关于系统引导/关机的参数。
[确定]已开始网络时间同步。
正在开始同步系统和硬件时钟...
[确定]已同步达到目标系统时间。
[失败]无法启动同步系统和硬件时钟。
有关详细信息、请参阅'stemctl status sync-clocks.service'。
[确定]已开始重建硬件数据库。
正在启动 udev 冷插拔所有设备...
[8.466556]无法处理虚拟地址00000000
[8.474706] PgD = ccf68000
[8.477422][00000000]* PgD=00000000
[8.481025]内部错误:Oops:5 [#1] preemopter SMP arm
[8.486357]模块链接在:Sdbo_uomf (8.481025]内部错误:Or comf cr dr dr)[8.4810172] CPU [8.48dr dr dr dr cr dr cr dr uv [8.48657] cr uv [8.48dr dr dr uv [8.490] unc [8.48dr uv
udevadm 被污染:g o 4.9.28-geed43d1050
[8.504060]硬件名称:通用 DRA74X (平展设备树)
[8.510177]任务:ccc50640 task.stack:ccf70000
[8.514733] PC 位于__WAKE_UP_COMMON 上+0x28/0x94
[8.519282] LR 位于__WAKE_UP
上:[+0x54][+0x2340 ] LR:[ ] PSR:60000093
[8.523219] sp:ccf71ce0 IP:00000000 FP:ccf71d14
[8.534745] R10:00000003 R9:00000000 R8:ccf71d4c
[8.539989] r7:c0c0298c R6:00000003 r3:a0000013:0000000r4:
0000000481:r4:00000001 r4 00000003 r0:c0c02988
[8.553095]标志:nZCv 在模式 SVC_32 ISA ARM 段无
[8.560345]控制:10c5387d 表:8cf6806a DAC:00000051
[8.566113]处理 udevadm (pid:172、栈限制= 0x5770c7210
)[0xcc7160](cce0) 

e2e.ti.com/.../kernel_5F00_log_5F00_TI.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Vishal,

    请通过编辑 lib/systemd/system/systemd-udev-trigger.service 使 udev 服务更详细,并查看导致 Oops 的任务。

    变化

    [服务]
    type=OneShot
    RemainAfterExit=yes
    execStart=/bin/udevadm trigger --type=subsystems --action=add;/bin/udevadm trigger --type=devices --action=add

    更改为

    [服务]
    type=OneShot
    RemainAfterExit=yes
    StandardOutput=journal+console
    execStart=/bin/udevadm --debug trigger --verbose --type=subsystems --action=add;/bin/udevadm --debug trigger --verbose --type=devices --action=add

    此外、检查 addr2line 是否会向您显示此方向的一些线索。

    addr2line -f -e /boot/vmlinux-4.9.28-geed43d1050 c016ea18

    此致、
    Kemal

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

    感谢您的快速回复。

    我已经在 SD 卡上的 rootfs 分区中进行了您所描述的更改,尽管我在日志中看不到任何新信息? 我已附加了相同引导过程的多个日志。

    现在、我还看到了以下情况:

    [确定]已启动 udev 冷插拔所有设备。 

    但我仍然看到类似的崩溃、出现"systemd-udevd 被污染"。 有一次、我还看到"systemd-timesyn 被污染"。 我确实看到了该任务(例如:"task:ccdcbe80 task.stack: ccdc2000")、但在修改 systemd-udev-trigger.service 之前就看到了该任务。 如何回溯导致这种情况的任务或代码的一部分?

    我还在/boot/vmlinux-4.9.28-geed43d1050上尝试了 addr2line,但我得到的答复是:

    ??
    ???:0

    我还注意到 vmlinux 版本与您提到的版本不同。 感谢您的任何其他提示和帮助!

    以下是日志:
    e2e.ti.com/.../2620.1.txt

    e2e.ti.com/.../5444.2.txt

    e2e.ti.com/.../3.txt

    再次感谢、

    Vishal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否复制[Service]下的行 StandardOutput=journal+console?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    能否在 U-Boot 控制台中输入 setenv optargets S,然后键入 boot? 这将允许您登录到单用户模式。 然后执行/bin/udevadm --debug trigger --verbose --type=subsystems --action=add;/bin/udevadm --debug trigger --verbose --type=devices --action=add,并查看发生了什么。

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

    我尝试了你刚才所说的、我得到了同样的行为、我仍然无法进入命令行。 这次我还看到"systemctl 被污染" (请参阅2.txt 日志)。 我开始认为此问题可能与 udev 无关? 它是否可以与以下内容有关:

    [失败]无法启动同步系统和硬件时钟。 

    日志:

    e2e.ti.com/.../7416.1.txt

    e2e.ti.com/.../6758.2.txt

    谢谢、

    Vishal

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

    您好、Kemal、

    我认为现在可以在启用了只需打印功能后看到 udevadm 详细消息:

    setenv optargets debug earlyprintk=${console}、keep loglevel=7 log_buf_len=16000 initcall_debug 时间 

    现在、我注意到最常见的情况通常是:

    [确定]已开始重建硬件数据库。
    正在启动 udev 冷插拔所有设备...
    [ 7.728688] udevadm[153]:调用:trigger
    [ 7.761106] udevadm[153]:device-枚 举器:扫描/sys/bus
    [ 7.841641] udevadm[155]:调用:trigger
    [ 7.871675] udevadm[155]:device-ev枚 举器:扫描所有方向的探测器
    [ 7.901716161] udevadm[7.865]在/sys/bus 设备
    
    地址上扫描虚拟设备地址:/sys/class udevadm[7.00965][7.00]设备枚举器:无法处理 

    在一个实例中、它还不断输出以下内容(有关完整日志、请参阅1.txt):

    [6.628239] systemd-journal:26个输出线路因差值限制而被抑制
    [7.707130] OMAP_i2c 48070000.i2c:控制器超时
    [8.827136] OMAP_i48070000.i2c:控制器
    
    超时[9.947133] OMAP_i2c 48070000.i2c:控制
    器超时[11.827136] OMAP_i4807133][1.8133]:OMAP_i2c.i2c:控制器超时[11.48070000.i2c.i2c:控制器超时[11.4806700.i2c.i2c.i2c.i2c.i2c.i2c.i2c:OMAP_i2c.i2c
    控制器超时
    [13.337129] CPU CPU0:VDD 在1183000uV[最小950000uV 最大1500000uV]
    [14.427135] omap_i70070000.i2c:控制器
    超时[15.547133] omap_i48070000.i2c:控制器超时
    [16.587187] omap_i70000.i2c:
    控制器超时[15.547133][OMAP_i2c:控制器超时[17.48048048048070000.i148]
    (最大控制器超时[16.587187]) i2c:控制器超时[i2c:控制器超时[16.0424.i144.i2c:控制器超时[i14 控制器超时
    [18.907132] OMAP_i2c 48070000.i2c:控制器超时
    [20.027136] OMAP_i2c 48070000.i2c:控制器超时 

    我还为同一引导测试附加了其他几个日志:

    e2e.ti.com/.../8831.1.txt

    e2e.ti.com/.../6283.2.txt

    e2e.ti.com/.../6283.3.txt

    e2e.ti.com/.../4.txt

    谢谢、

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

    您好、Kemal、

    通过在   systemd-udev-trigger.service 的 ExecStart 行中添加--verbose,我能够从 udev 获得更多信息。 默认情况下不存在该值。  

    我现在看到的通常是

    [确定]已开始重建硬件数据库。
    正在启动 udev 冷插拔所有设备...
    [5.748436] udevadm[151]:未找到容器虚拟化
    [ 5.791120] udevadm[151]:调用:trigger
    [5.821022] udevadm[151]:device-evator: scanning /sys/bus
    
    
    /sys/bus/container [5.851205] udevadm[5.880561] udevadm[151]:/sys/bus/clockevents
    /sys/bus/cpu [5.880585] udevadm[151]:/sys/bus/clocksource [5.920151][6.5151]
    udevdevadm[/sys/bus/edac
    /sys/bus/event_source
    [6.040485][6.148456] Unable to handle kernel paging request at virtual address 5954104a
    udevadm[151]:/sys/bus/gpio
    [6.156867] PgD = ccfe4000
    [6.162326][5954104a]*PgD=00000000[6.162933] Unable to handle paging paging request at virtual address [6.15682326][6.1629000][6.296400]
    [6.2960]内部
    
    错误[CC162940] Oops:800005[#1] preempt SMP ARM
    [6.162961]链接的模块:
    [6.162966] sch_FQ_codel uio_module_drv (O) uio gdbserverproxy (O) cryptodev (O) cmemk (O)[6.162991] CPU:0 PID:139:配置已污染 o 4.9.28-geed43d1050 #1 

    从这种情况的几个运行中、它始终会打印:

    [5.930488] udevadm[151]:未找到容器虚拟化 

    然后打印一些/sys/bus 行,然后由于内核分页请求失败而崩溃,或者只是挂起而没有消息。

    将此与我的 SD 卡与基本 rootfs 进行比较,我从未看到“虚拟化无”行和 udevadm 成功完成。 “虚拟化无”消息的原因可能是什么?

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

    加载 net/sched/sch_fq_codel.ko FQ 控制的延迟数据包调度算法模块时会发生 Oops。 关于同步系统和硬件时钟以及 OMAP-i2c 48070000.i2c:控制器超时消息。 您是否具有晶体振荡器并在该板上正确配置了 tps659038?

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

    您如何知道在 sch_FQ_codel.ko 上发生了 Oops? 这是什么造成的、是什么导致了 Oops? 我看到此内核模块也位于另一个 SD 卡上的基本 rootfs 上,该 SD 卡在我的自定义板上启动。 硬件时钟故障消息也出现在此基本 rootfs 上,它继续引导。

    关于您的问题、RTC 芯片在板上(与 EVM 相同)、但在 Linux 器件树中禁用了 i2c 线。 此 i2c/RTC 时钟问题是否与崩溃有关?


    SD 卡的差异是否会导致此类内核问题?

    再次感谢、非常感谢您的帮助。

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

    您能否将 nomodule 附加 optargets 并查看是否有 Oops?

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

    您好、Kemal、

    我将坏疽性口炎附加到 optargets、但会发生相同类型的故障。 有时我不会收到任何内核操作,而只是在 HW 时钟失败消息之后或 udevadm 消息中间挂起。 我已附加一些更新的日志。 导致 这种内核操作的 Arago-base-tisdk-image-am57xx-EVM 和 tisdk-rootfs-image-am57xx-EVM 之间的主要区别是什么? 如何使用不同的 rootfs 访问同一硬件上的命令行?

    这是否是与内存虚拟化相关的问题? AM5728 EVM 和定制板之间的主要区别在于、我们的 RAM 为256 MB、我们通过 u-boot 完成了 EMIF 配置。  

    我想知道是否存在一些存储器重叠问题。 您是否有任何有关 RAM 使用的资源、例如:内核占用多少内存、临时 rootfs 的位置以及内核使用的 RAM 是否有任何其他受保护区域?

    日志(两个日志都是使用坏情况运行的):

    e2e.ti.com/.../nomodule3.txt

    e2e.ti.com/.../ti_5F00_log_5F00_1.txt

    再次感谢您的一致回复、

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

    您好、Kemal、

    只是另一个更新、我在 create-sdcard.sh 脚本之后创建了一个新的 SD 卡、然后简单地复制到我的 u-boot 文件、内核和器件树上。 现在、引导过程似乎在经过 udev 之后显著进展、我还能够使用您提到的 optargets S 命令访问救援模式终端。

    但是、我在离开救援模式终端后仍会遇到故障。 我已附上更新的日志。 我注意到"c0154638中的内核错误"、如何跟踪此错误? 我并不总是会遇到这个错误、有时它的运行方式会是这样的:

    sh-3.2#
    sh-3.2#
    sh-3.2#
    sh-3.2#
    sh-3.2#
    SH-3.2# exit
    [13.779934] cmemk:不同意 symbol module_layout [13.791072]
    cryptodev:不同意 symbol module_layout [13.798119]
    gdbserverproxy:不同意 symbol module_layout 的版本
    [13.806990] uio:不同意 symbol module_layout 的版本
    [14.4355] 正在初始化 cpsw 版本1.15 (0)
    [ 14.194677] net eth0:已初始化 cpsw ale 版本1.4
    [ 14.194684] net eth0:ale 表大小1024
    [ 14.197572] net eth1:PHY /ocp/ethernet@484000/MDIO@48485000/ethernet-phy@2"从器件1上找不到 ALE 表大小1024 [
    14.205875] bluetooth [14.DDCONF_MOD275]:不同意符号
    DESDCONF:MOD275[14.15V 布局:MODE] 链路未就绪
    [14.280025] net eth0:正在初始化 cpsw 版本1.15 (0)
    [14.2865] net eth0:PHY "/ocp/ethernet@48484000/MDIO@48485000/Ethernet-phy@1"在从器件0
    上找不到[14.287707] IPv6:ADDRCONF (NETDEV_UP):eth0:link is not ready x59m[14.287707] IPv6:
    不同意符号 MODULE_LO版面 版本
    [14.720819]无法处理虚拟地址72617389
    [14.728102] PgD = cb250000
    [14.730817][72617770]* PgD=00000000
    [14.734422]无法处理虚拟地址65687420
    [14.741672][14.74960] Pb7420]的内核寻呼请求
    
    无法处理虚拟地址65687420
    [14.755237] PgD = cb250000
    [14.757951][65687420]* PgD=00000000
    [14.761553]无法处理虚拟地址65687420
    [14.768804] PgD = cb250000 [14.771553]的内核寻呼请求
    
    无法处理虚拟地址65787420 [14.768804] PgD 的内核寻呼请求 地址65687420
    [14.782362] PgD = cb250000
    [14.785075][65687420]* PgD=00000000
    [14.788671]无法处理虚拟地址65687420
    [14.795924] PgD = cb250000
    [14.798637][65687420]无法处理内
    核寻呼请求[ 14.7960482] PgD
    =无法处理虚拟地址14.80482] PgD [65804220] PgD =无法处理内核寻呼请求
    14.812195][65687420]*PgD=00000000
    [14.815788]无法处理虚拟地址65687420
    [14.820948]的内核分页请求无法处理虚拟地址72617770[14.820952]
    PgD = cce38000
    [14.820957][72617770]* P800000=14.8320782] PgD=248360[*
    P800000=248360
    
    虚拟地址65687420
    [14.850125] PgD = cb250000
    [14.852836][65687420]* PgD=00000000处的内核分页请求
    

    e2e.ti.com/.../4578.1.txt

    再次感谢、

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

    请参阅"不同意符号 MODULE_LO版面 的版本"消息。 您的模块是根据不同的内核版本或不同的内核配置构建的。 您能否先解决此问题?

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

    您好、Kemal、

    我已通过重新安装看起来的外部模块来解决版本符号问题。  

    现在、在加载 IPU 时、我会遇到某种程度上一致的页面错误或挂起。 典型日志如下所示。 有时、我还会收到一条有关无法分配 DMA 存储器的消息。

    [5.66941] OMAP-rproc 5882000.IPU:分配的保留存储器节点 ipu1_CMA@88400000
    [5.689786] remoteproc procteproc 0:58820000 proc.ipc 可用
    [5.693597] OMAP-r55020000.IPU:分配的保留存储器节点 ipu2_20000@8a400000
    [5.69370001]
    已达到基本目标[ 5.69375000.IPU]
    正在启动电话服务...
    [5.854137] remoteproc remoteproc1:加电5502000.IPU
    [5.895131] remoteproc remoteproc1:启动 FW 映像 dra7-ipu2-fw.xem4、大小为3743164
    [5.895268] ommu 55082000.MMU:55082000.MMU:2.1版 

    
    
    [5.470399] OMAP-WDT:OMAP 看门狗计时器修订版0x01:初始超时60秒
    [5.492297] OMAP-SHIM 4b101000.sham:OMAP 修订版4.3
    上的硬件加速器[5.495564] OMAP-AES 4b500000.AES:OMAP AES 硬件加速器修订版:3.3
    [5.495762] OMAP-AES 4b5000004.bAES 请求将运行 OMAP-AES 4b5000040.4b00000:AES
    OMAP AES 硬件加速器版本:3.3
    [5.4964999] OMAP-AES 4b700000。AES:将运行具有实时优先级的请求泵
    [5.555027] OMAP-r58820000。IPU:分配的保留存储器节点 ipu1_proc@88400000
    [5.555129]
    CMA remotepru0:58820000 ipc.uP 可用[5.5578000] uprupru_proc:5.55400000@u50000]
    5502000.IPU 可用
    [ 5.767918]
    
    
    
    远程处理器远程处理器1:加电5502000.IPU [5.767942]远程处理器远程处理器1:启动 FW 映像 dra7-ipu2-fw.xem4、大小3743164 [5.768101] OMAP-iomproc 55082000.MMU:7208.2000.mu 5.58456.mu:5.858456.mu
    版本2.1
    正在开始打印有关 GPLv3封装的通知...
    [确定]正在侦听 RPCbind 服务器激活套接字。
    [5.989367] OMAP-rproc 5502000.IPU:分配 DMA 内存失败:len 0x600000
    正在启动 uim-sysfs.service ...
    [ OK ]正在收听 D 总线系统消息总线插座。
    正在启动 Telephony se[6.050486] remoteproc remoteproc 1:无法处理资源:-12
    rvel...
    正在启动登录服务... 

    我怀疑这些问题与我在 Linux 设备树中对 CMA 和 CMEM 内存池所做的更改有关(必须将位置移动到 RAM 中的有效物理区域、并使保留内存更小、因为只有256MB RAM)。 我遇到 SPRAC60、似乎我需要在 IPU 映像中重建资源表以使用它们(这是我尚未完成的操作)。 这是正确的方法吗? 如果有更多资源或命令可以在救援终端运行进行调试、请告诉我。

    e2e.ti.com/.../2626.4.txt

    e2e.ti.com/.../5.txt

    谢谢、

    Vishal

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SPRAC60正常。 只需按照该 pdf 上的步骤操作即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kemal、

    我正在尝试遵循 SPRAC60、但我认为我需要重建"dra7-ipu2-fw.xem4.ipumm-fw"文件、因为它是 ipu2上需要修改的映像(当前不打算使用 DSP 和 ipu1)。 我需要对这些进行修改以启用 ducatijpegdec 和 ducatih264enc。

    我找到了有关如何重建 ipumm 固件的说明、但我需要一些关于在何处修改资源表以适应设备树中修改的 CMA 和 CMEM 池的指导。 我认为、需要修改配置文件以使其知道将使用自定义资源表、然后ti_ipc_remoteproc_ResourceTable需要使用修改来定义结构。 哪些特定源文件需要进行这些修改?

    谢谢、

    Vishal

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

    请检查 此主题。