工具/软件:
我完成了在基于 AM335x 的定制板上将 Linux 内核 3.12 升级到 5.10 版本和定制应用的过程。
作为应用程序 POST 序列的一部分、我正在从连接的基于 i2c 的 pxcir 触摸屏传感器检查写入和读取相同字节。
在测试时、我发现在少数电路板上、由于上述开机自检步骤中出现故障、应用程序会重新启动。
我正在获取 “ioctl 失败:连接超时“ 尝试在 i2c 总线上写入单字节时出错。
【但是,此代码在相同定制电路板的其他重复项中效果良好】
由于此错误是间歇性发生的、我只能在大约 30 个下电上电周期内重现一次/两次
此外,我观察到 i2c 错误弹出只有当我得到下面的消息在控制台上,当引导内核.
[38.01717173][T98] 8<--在这里切割--
[38.020980][T98]未处理故障:0xc22b9f54 处的外部中止 (0xc06) 不精确
[ 38.028677][T98] PgD = f2f83db2
[38.032090][T98][C22b9f54]*PgD=8220041e(错误)
[ 38.36831][T98]内部错误:::C06 [#1] ARM
[38.041558][T98]链接的模块:NF_LOG_IPv4 XT_LIMIT XT_LOG XT_conntrack iptable_mangle iptable_nat NF_nat NF_conntrack NF_defrag_IPv4 iptable_filter ip_tables SHA256_generic libsha256 SHA256_A4
[38.075620][T98] CPU:0 PID:98 通信:systemd-journal 污染:g O 5.10.168psprr-g991c5ce91e #1
[ 38.085923][T98]硬件名称:通用 AM33XX(展平器件树)
[ 38.092764][T98] PC 位于__seccomp_filter+0x2C/0x6cc
[ 38.098113][T98] LR 位于 SYSCALL_TRACE_ENTER+0x88/0x13c
[38.103708][T98] PC:[ Lr :[ ] PSR:60000013
[ 38.110697][t98] sp:c22b9ee0 ip:10c5387d fp:0003c52c
[38.116639][T98] R10:00800000 R9:00000000 R8:c01002e4.
[ 38.122582][T98] r7:00000193 R6:0003c52c r5:ffffffff000 r4:c22b9fb0
[38.129832][T98] R3:00000000 R2:00000000 R1:00000000 r0:00000193
[ 38.137085][T98]标志:模式 SVC_32 ISA ARM 段无上 FIQ 上的 nZCv IRQ
[ 38.144948][T98]控制:10c5387d 表:822ac019 DAC:00000051
[38.151415][T98]进程 systemd-journal (pid:98、堆栈限制= 0xa9f35bcb)
[ 38.158753][T98]堆栈:(0xc22b9ee0 至 0xc22ba000)
[ 38.163832][T98] 9ee0:00000000 00000000 00000000 00000000 00000000
[ 38.172745][T98] 9f00:00000004 f9805506 c22b8000 c213cd00 c22b8000 f9805506 10c5387d c22b8000
[ 38.181657][T98] 9f20:c22b9fb0 00000000 10c5387d 00000000 c22b8000 c0e0404c fffe30 c010a6c4
[38.190571][T98] 9f40:00000100 c0e9b3B0 c22b8000 c0101390 00000025 f9805506 c1008200 c22b9fb0
[ 38.199484][T98] 9f60:ffffffffe000 0003c52c 00000193 c01002e4 c22b8000 00800000 0003c52c c010986c
[ 38.208396][T98] 9f80:be919f24 f9805506 b6273ab0 b6f04e44 00000001 be91a8c0 0003c52c 00000193
[ 38.217309][T98] 9fa0:c01002e4 c010027c 00000001 be91a8c0 00000001 be91a8c0 b6fd5d00 00000000
[ 38.226223][T98] 9fc0:00000001 be91a8c0 0003c52c 00000193 000154e1 be91ad3c 00000000 0003c52c
[38.235136][T98] 9fe0:00000193 be91a8a0 b6d1239b b6cb1ae6 80000030 00000001 00000000
[38.244066][T98][ ](__seccomp_filter)、来自[ ](syscall_trace_enter+0x88/0x13c)
[38.253423][T98][ ](syscall_trace_enter)、来自[ ](_sys_trace+0xc/0x40)
[ 38.262156][T98]异常栈 (0xc22b9fa8 至 0xc22b9ff0)
[ 38.267928][T98] 9fa0:00000001 be91a8c0 00000001 be91a8c0 b6fd5d00 00000000
[ 38.276841][T98] 9fc0:00000001 be91a8c0 0003c52c 00000193 000154e1 be91ad3c 00000000 0003c52c
[ 38.285751][T98] 9fe0:00000193 be91a8a0 b6d1239b b6cb1ae6
[ 38.291527][T98]代码:e5922000 e58d2074 e3a02000 ee073f9a (e1510003)
[38.298349][T98]--[末端迹线 f5ead91bf57c8477 ]--
[38.305009][T419]8<--在此处切割--
以下是与此 i2c 器件相关的 DTS 部分 &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; status = "okay"; clock-frequency = <100000>; tps: tps@2d { reg = <0x2d>; }; pixcir_tangoc: pixcir_tangoc@5c { reg = <0x5C>; compatible = "pixcir,pixcir_tangoc"; pinctrl-names = "default"; pinctrl-0 = <&pixcir_ts_pins>; interrupt-parent = <&gpio0>; interrupts = <28 IRQ_TYPE_EDGE_FALLING>; //interrupt-gpio = <&gpio0 28 0>; attb-gpio = <&gpio0 28 GPIO_ACTIVE_HIGH>; touchscreen-size-x = <1024>; touchscreen-size-y = <600>; status = "okay"; linux,multi-touch; };};
不可能出现干焊问题或任何其他硬件问题、因为旧 Linux 3.12 版本的同一主板上的同一开机自检工作正常。
请提供解决/调试该问题的任何可能方法的建议。
谢谢、
普拉福尔·巴普特
