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/AM5726:由 remoteproc 启动的 DSP 通过调用 BIOS_start()停止 Linux 启动

Guru**** 2580295 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/624733/linux-am5726-dsp-booted-by-remoteproc-stalls-linux-boot-by-calling-bios_start

器件型号:AM5726

工具/软件:Linux

您好!

 我们使用 remoteproc 在 Linux 启动时加载/执行 DSP 内核固件(Linux Proc SDK 3.1.0.6 -无早期启动/晚期连接)。 DSP 固件是基于 TI/RTOS 的应用、其中一个任务打开消息队列(MessageQ)、用于接收来自 Linux 用户机中应用程序的消息。

我们看到以下奇怪的行为:在启动 DSP 后很短的时间内、Linux 启动 过程挂起、永远不会完成登录。 尽管如此,即使没有适当的终端输出,几项出色的服务似乎也变得很重要,例如,在等待了几分钟之后,我可以通过 ssh 连接到设备,即使相关的 systemd 服务从未宣布启动。 'stemctl list-jobs'仅获得一个连接超时。

这似乎取决于 DSP 和 M15内核启动事件的顺序和时序。 有时(每10个中的1个)启动会起作用-但它远不可靠。

我可以看到、在 DSP 通过 remoteproc 引导(并打开 MessageQ 队列)后、tipclad 守护程序启动。 这可能是阻止的原因吗?

以下是 Linux 引导的典型日志输出:

U-Boot 2016.05-00120-g3ab3a81脏污(2017年2月2日- 14:55:12 +0100)

CPU:DRA752-GP ES2.0
模型:基于 TI AM572x 的 Stagetec Pluto 器件
板:Pluto CXP REV 
DRAM:2 GiB
MMC:对于 sdr104没有 pinctrl
对于 ddr50没有 pinctrl
对于 sdr50没有 pinctrl
对于 sdr25没有 pinctrl
对于 sdr12
OMAP SD/MMC:0、OMAP SD/MMC: 1
读取 uboot.env

**无法从 mmc0:1读取"uboot.env"**
使用默认环境

在 EEPROM 头
板名称:Pluto_CXP ()
板版本:
板串行:
SCSI:目标自旋花费0ms。
AHCI 0001.0300 32插槽1端口3 Gbps 0x1不支持 SATA 模式
标志:64位 NCQ stag pm led clo only pmp pio sagadopt part ccc apst
扫描总线设备...
器件0:(0:0)供应商:ATA 产品:SanDisk SD6SF1M2版本:X231
键入:Hard Disk (硬盘)
容量:244198.3 MB = 238.4 GB (500118192 x 512)
找到1个器件。
NET:
警告:Ethernet@48484000 using MAC address from ROM
eth0:Ethernet@48484000
HIT any key to stop autoboot:0
GPIO:引脚8 (GPIO 8)值为0
GPIO:引脚9 (GPIO 9)值为0
切换到分区#0、 好
的 mmc0是
在设备0
上找到的当前设备 SD/MMC 读取 boot.scr
**无法读取文件 boot.scr **
读取 uEnv.txt
**无法读取文件 uEnv.txt **
切换到分区#0,好
的 mmc0是在
设备0
2977208上找到的当前设备 SD/MMC,145毫秒内读取(19.6 MIB/s)
在23ms (4 MIB/s)内读取的96890字节
从 mmc0引导...
内核映像@ 0x82000000 [ 0x000000 - 0x2d6db8]##
平展设备树 blob,88000000使用
0x88000000的 FDT blob 启动
正在将设备树加载到8ffe5000,结束8ffa79... 确定

启动内核...

[0.000000]在物理 CPU 上引导 Linux 0x0
[0.000000]初始化 cgroup 子系统 cpuset
[0.000000]初始化 cgroup 子系统 CPU
[0.000000]初始化 cgroup 子系统 cpuacct
[0.000000] Linux 版本4.4.4.4.19.-rt25-gf572d285f0 (dev@Dylaro A-Linux)(GCC 版本5.2015.02)(GCC 版本5.605.3) 1 SMP 优先于 RT Thu 2 2 16:11:27 CET 2017
[0.000000] CPU:ARMv7处理器[412fc0f2]修订版2 (ARMv7)、CR=30c5387d
[0.000000] CPU:PIPT / VIPT 非别名数据高速缓存、PIPT 指令高速缓存
[0.0000]机器模型:基于 TI PIPT 的
存储器[0.000000 P5726:保留[0000.000000 已创建0x000095800000处的内存池、大小为56 MIB
[0.000000]保留的内存:已初始化节点 ipu2_CMA@

@95800000、兼容 ID shareda-dma-pool [0.000000]保留的内存:已创建 CMA 内存池、大小为64 MIB [0.000000]保留的内存:已初始化节点 dsp1_ma-pool [0.000000、兼容内存[mcA]
已创建0x00000000内存池、大小为32 MiB
[ 0.0000]保留内存:已初始化节点 ipu1_CMA@9d000000、兼容 ID shared-dma-pool
[ 0.000000]保留内存:已创建大小为0x00009f000000的 CMA 内存池、大小为8 MiB
[ 0.0000]保留内存:已初始化节点 dsp2_cma@9fcma、兼容 ma-cma 内存
:已初始化节点 d000000 在0x00000000fe400000
[0.000000]处保留24 mib 强制 SMP 的写分配高速缓存策略
[0.000000]内存策略:数据高速缓存 writealloc
[0.000000] OMAP4:将0x00000000ffd00000映射到用于 DRAM 屏障的 fe600000
[0.000000] DRAPERES2.0
[0.000000] 752 CPU: 嵌入式12页/CPU @eed22000 s19264 r8192 d21696 u49152
[0.000000]在区域顺序中构建了1个区域列表,移动分组打开。 总页数:472640
[0.000000]内核命令行:console=ttyS2,115200n8 root=PARTUUUUID=000dd0a5-02 RW rootfstype=ext4 rootwait
[0.000000] PID 哈希表条目:4096 (顺序:2、16384字节)
[0.144]条目高速缓存哈希
表条目:131072 (顺序:0.536字节:0.576字节)
提供1681908K/1897472K (5375K 内核代码、320K rwdata、1840K rodata、320K init、280k BSS、 27148K 保留、188416K CMA 保留、1283072K HIGHMEM)
[0.000000]虚拟内核内存布局:
[0.000000] 向量:0xffffff0000 - 0xffffff1000 (4KB)
[0.000000] Fixmap:0xc00000 - 0xc00000 (3072 KB)
[0.000000] vmalloc:0xf0800000 - 0x0x800000 (240MB)
[0.000000] 低内存:0xC0000000 - 0xf0000000 (768 MB)
[0.000000] pkmap:bfe00000 - 0xC0000000 (2 MB)
[0.000000] 模块:bbbf000000 - bbfe00000 (14 MB)
[0.000000] .text:0xc0008000 - 0xc0713ff4 (7216 KB)
[0.000000] init:0xc0714000 - 0xc0764000 (320 KB)
[0.000000] .data:0xc0764000 - 0xc07b4040 (321KB)
[0.000000] .bss:0xc07b7000 - 0xc07fd3ac (281KB)
[0.000000] slub:HWalign=64、order=0-3、MinObjects=0、CPU=2、Nodes =1
[0.000000]可抢占分层 RCU 实现。
[0.000000] RCU kthread 优先级:1.
[0.000000] NR_IRQ:16 nr_IRQ:16
16 [0.000000] OMAP 时钟事件源:32786Hz 时的 Timer1
[0.000000]构建了以6.14MHz (virt)运行的 cp15计时器。
[ 0.0000]时钟源:ARCH_SYS_COUNTER:MASK:0xffffffffffffffffffffff max_cycles:0x16af5adb9、max_idle_ns:440795202250 ns
[ 0.000004] sched_clock:56位6MHz、分辨率162ns、每43980465FFFFFF23ns 换行
一次[0.000011]、基于0x8312_FFFF 时
钟源:0x00032ns、0x0003219]计数器:0x0003219]
32768Hz
[0.000714]上的32K_COUNTER 控制台:彩色虚拟设备80x30
[0.000847]校准延迟环路(跳过)、使用计时器频率计算得出的值。 12.29 BogoMips (lpj=61475)
[0.000851] pid_max:默认值:32768最小值:301
[0.000931]安装高速缓存散列表条目:2048 (顺序:1、8192字节)
[0.000937]安装点高速缓存散列表条目:2048 (顺序: 1、8192字节)
[0.001473]正在初始化 cgroup 子系统 IO
[0.001484]正在初始化 cgroup 子系统存储器
[0.001504]正在初始化 cgroup 子系统设备
[0.001512]正在初始化 cgroup 子系统
[0.001519]冷冻库

一致性子系统 PERF_EVENT [初始化1527]正在初始化 cgroup 子系统 PID [0.001572:CPU 写入缓冲区: 确定
[0.001752]/cpus/cpu@0缺少时钟频率属性
[0.001791]/cpus/cpu@1缺少时钟频率属性
[0.001801] CPU0:线程-1、CPU 0、套接字0、mpidr 8000000000
[ 0.001836]为0x800082c0 - 0x80008318
[ 0.120277] CPU1设置静态标识图: Thread -1、CPU 1、插槽0、mpidr 800001[0.120362]
带来2个 CPU
[0.120376] SMP:总共激活2个处理器(24.59个 BogoMips)。
[0.120384] CPU:所有 CPU 均在 SVC 模式下启动。
[0.120781] devtmpfs:已初始
化[0.147464] VFP 支持 v0.3:Immentor 41架构4第30部分变体 f rev 0
[0.148353] OMAP-hwmod:L3_MAIN_2使用来自 OCP
的断开 dt 数据[0.283912] OMAP-hwmod:GPU:_wait_target_ready 失败:-16
[0.28392]个
时钟源[0.48mod:无法启用[0.4832] 掩码:0xFFFFFFFF max_cycles:0xFFFFFFFF、max_idle_ns:19112604462750000 ns
[ 0.352819] pinctrl 内核:已初始化 pinctrl 子系统
[ 0.353760] NET:已注册协议系列16
[ 0.354842] DMA:预分配256 KiB 池用于原子分配
[ 0.364561]
/ocp/l4@2000 μ DMA:未找到 OMAP-IRQ [0.2754 μ DMA /μ DMA@240x240x000000 IRQ 版本]硬件[0.2754 μ DMA@240x240x000000 μ DMA
[0.395284]硬件断点:找到5个(+1保留)断点和4个观察点寄存器。
[0.395292]硬件断点:最大观察点大小为8字节。
[0.395680] OMAP4_SRAM_INIT:无法分配处理勘误表所需的 SRAM I688
[0.395689] OMAP4_SRAM_INIT:无法获取处理勘误表所需的 SRAM 池 I688
[0.396341] OMAP DMA 硬件版本0.0
[0.444827] OMAP-DMA-ENGINE 4a056000.DMA-CONTROLLER:OMAP DMA 引擎:
0 ED4400MA [0.000] EDMA.EDMA.EDR4300000433000
TI EDMA 引擎驱动程序
[0.455123] OMAP-iommu 40d01000.MMU:40d01000.MMU 已注册
[0.455412] OMAP-iommu 40d02000.MMU:40d02000.Mmu 已注册
[0.455684] OMAP-iommu 58882000.MMU 已注册[5840800.45804.mu



已注册[150mu.mu.M644] OMAP-iommu 已注册[1504mu 644mu 已注册[0.454000.4580644mu.mu 已注册[150mu 已注册的 OMAP.mu.mu.mu.mu 已注册[0.45644] OMAP-i644mu.mu 已注册的 OMAP-i644mu.mu.mu.mu.mu 已注册[0.4580
IRQ 标志为0x00000008
[0.472649] Palmas 0-0058:多路复用 GPIO 2f、PWM 0、LED 0
[0.554092] OMAP_i2c 48070000.i2c:400kHz 时总线0 0.12 [0.554671]
OMAP_i480ver 60000.iPPS:400kHz 时总线2 v0.12
c [0.5548ps_core_apips] 1寄存
式[0.554886] pps_core:软件版本。 5.3.6 -版权所有2005-2007 Rodolfo Giometti 
[0.554917] PTP 时钟支持寄存
[0.554955] EDAC MC:版本:3.0.0
[0.555841] OMAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-MAP-



切换到 clocksource arch_sys_counter
[0.568391] NET:注册协议系列2[0.568859]
TCP 建立的哈希表条目:8192 (顺序:3、32768字节)
[0.568937] TCP 绑定哈希表条目:8192 (顺序:5、229376字节)
[0.569233] TCP: 配置的哈希表(建立的8192 BIND 8192)
[0.569288] UDP 哈希表条目:512 (顺序:3、32768字节)
[0.569343] UP-Lite 哈希表条目:512 (顺序:3、32768字节)
[0.569537] NET:注册协议系列1[0.56988]
RPC:注册命名的 UNIX 套接字传输模块。
[0.569856] RPC:注册的 UDP 传输模块。
[0.56983] RPC:注册的 TCP 传输模块。
[0.569870] RPC:注册的 TCP NFSv4.1反向通道传输模块。
[0.570665]硬件性能事件:通过 armv7_cortex_a15 PMU 驱动程序启用、提供7个计数器
[0.573963] futex 散列表条目:512 (顺序:3、32768字节)
[0.581600] squashfs:4.0版(2009/01/31) Phillip Lougher
[0.582575] NFS: 注册 id_resolver 密钥类型
[0.582602]密钥类型 id_resolver 注册
[0.582610]密钥类型 id_legacy 注册
[0.582685] NTFS:驱动程序2.1.32[标志:R/W]。
[0.584779]退回:池大小:64页
[0.584941]块层 SCSI 通用(BSG)驱动程序版本0.4已加载(主要250)
[0.584957]已注册的 IO 调度程序 noop
[0.584970]已注册的 IO 调度程序
[0.585210]已注册的 IO inccfq (默认)
[0.588712] pintrl-single-4a003400: 282引脚位于 PA fc003400大小为1128
[0.651249]串行:8250/16550驱动器、10个端口、禁用 IRQ 共享
[0.654262] 4806a000.serial: tmio 0x4806a000处的 ttyS0 (IRQ = 299、base_baud = 3000000)是一
个8250 [0.655181] 4806c000.serial: MMIO 0x4806c000 (IRQ = 300、base_baud = 3000000)处的 ttyS1是
禁用的8250 [ 0.656025]控制台[ttyS2]
是禁用的[ 0.656071] 48020000.serial:在 MMIO 0x48020000处的 ttyS2 (IRQ = 301、base_baud = 3000000)是启用的8250
[ 1.496458]控制台[ ttyS2]
48422000.serial: MMIO 0x48422000 (IRQ = 302、base_baud = 3000000)上的 ttyS7是 MIO
48424000.serial: 0x48424000 (IRQ = 303、base_baud = 3000000)上的8250
[ 48020144] 4ae2b000.serial: tmio 0x4ae2b000 (IRQ = 303、base_baud = 3000000)上的 ttyS9是8250 [ 48020144] RMIO 0x4a02b000 (r24304bt =
1.524000](r24000a)、r244ng_r0000 = 1.524000] OMAP 随机数生成器版本。 20
[1.542833] loop:module loaded
[ 1.546798] AHCI 4a140000.SATA:SSS 标志置1、并行总线扫描禁用
[1.553553] AHCI 4a140000.SATA:AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl platform mode
[1.562123] AHCI 4a140000.SATA:标志: 64位 SNTF stag pm led clo only pmp pio sabadic part ccc apst
[1.572421] SCSI host0:AHCI
[1.575594] ata1:SATA max UDMA/133 MMIO [mem 0x4a140000-0x4a1410ff]端口0x100 IRQ 347
[1.587460] libphy:固定 MDIO 总线[MD48801] MD48IO:probed
达芬奇 MDIO 修订版本1.6
[1.643927] DaVinci_MDIO 4848485000.MDIO:检测到的 phy 掩码 fffffd
[1.662175] libphy:48485000.MDIO:探测
到的[1.666205] DaVinci_MDIO 48485000.MDIO:1005.MDIO:01:探测到的器件48486281.6b] DMUCC136b[1.664b] DMUCC136b] DMUCC1364b] DMD:
48641b] DMUCC13641b] DMUCC3b[1.48641b] DMU642f
:486b] DMUCC13641b] DMUCC134b] DMUCC134b] DMU64
64字节 NVRAM
[1.711770] OMAP-RTC 48838000.RTC:RTC 内核:将48838000.RTC 注册为 rtc2
[1.722242] Palms-RTC 48070000.i2c:tps659038@58:tps659038_RTC:将 OMAP 70000.i944:tps6334374_mc_dc

已初始化[1.7423.mc_mcc:tms4804c_mc_gp4384c_gp_gp4384c_gm [1.76424] gp_mc_gp_gp_gp_gp_gp_gp_gp_gp_gp4384384384c_gm 条目[1.76424_m

sdr25模式下无 pinctrl 状态
[1.794835] omap_hmc 480b4000.mmc:sdr12模式下无 pinctrl 状态
[1.801457] VDD_3V3:由 regen1
[1.840541]提供 NET:注册协议系列17
[1.845276]分布式交换机架构驱动程序版本0.1[1.851300]
8021q: 802.1Q VLAN 支持 v1.8
[1.855547]已注册的密钥类型 DNS_旋 变传感器
[1.859959] OMAP_VOLTGE_LARD_INIT:未添加
TI OMAP4+器件的电压驱动器支持[1.866606]电源管理。
[1.871747]正在注册 SWP/SWPB 仿真处理程序
[1.888674] RTC-ds1307 2-006F:将系统时钟设置为2017-09-12 14:13 UTC (1505225593)
[1.911046] AIC_DVDD_FIXED:禁用
[1.91499610] DSousb:禁用
[2.1277797] SD2138:100Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S183Gbps、S132Gbps、S132Gbps、S132Gbps、S132Gbps、S

500118192扇区、多1:lba48 NCQ (深度31/32)
[2.150151] ata1.00:针对 UDMA/133
[2.178146] SCSI 0:0:0:0:0:直接访问配置 ATA SanDisk SD6SF1M2 200 PQ:0 ANSI:5
[ 2.187049] SD 0:0:0:0:0:[SDA] 500118192 512字节逻辑块:(256 GB/238 GiB)
[ 2.187384] SD 0:0:0:0:0:0:[SDA]写保护关闭
[ 2.187500] SD 0:0:0:0:0:0:SDA:0:0:0:0:0:0:0:0:0:SDA:0:0:0:0:0:
0:0:0:0:0:0:0:0:0 SDA1 SDA2
[2.190018] SD 0:0:0:0:0:0:[SDA]连接的 SCSI 磁盘
[2.216244]正在等待根设备 PARTUUUUID=000dd0a5-02...
[ 2.869308] mmc0:主机不支持读取只读开关、假设写入启用
[ 2.883057] mmc0:地址 AAAA
的新高速 SDHC 卡[ 2.899035] mmcblk0:mmc0:AAAA SS16G 14.8GiB
[ 2.908319] mmcblk0:p1
:p2mmc1765]未设置[2.991p2_mmc1765]
地址0001
[ 3.019368] mmcblk1:mmc1:0001 P1XXXX 3.60 GiB
[ 3.020802] EXT4-FS (mmcblk0p2):4个

孤立的文件系统 inode 已删除[ 3.020806] EXT4-FS (mmcblk0p2):恢复完成[ 3.31062] EXT4已安装数据模式(mmcblk0p2)。 opts:(null)
[ 3.031093] VFS:在设备179:2上安装根(ext4文件系统)。
[3.038758] devtmpfs:已安装
[3.038974]释放未使用的内核内存:320k (c0714000 - c0764000)
[3.070671] mmcblk1boot0:mmc1:0001 P1XXXX 分区1 16.0 mib
[ 3.086902] mmcblk1p1:mmc1:0001 P1XXXX 分区3.0937d]

未初始化 urandom 读取(读取16字节、提供17位熵)
[3.357403]随机:systemd:未初始化 urandom 读取(读取16字节、提供17位熵)
[3.368932] systemd[1]:systemd 229在系统模式下运行。 (+PAM -audit -selinux +IMA -AppArmor +smack +sysvinit +utmp -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +blkid -ELFUTILS +KMOD -IDN)
[3.387434] systemd[1]:检测到的架构 ARM。

欢迎来到 Arago 2016.08!

[3.421965] systemd[1]:将主机名设置为 。
[3.507068]随机:systemd-gp-aut:未初始化的 urandom 读取(16字节读取、19位熵可用)
[3.518137]随机:systemd-gpT-aut:未
初始化的 urandom 读取(16字节读取、19位熵可用)[3.520070]随机:systemd-sysv-un初 始化
的 sysv-random 读取(16字节读取)[3.5547字节 未初始化的 urandom 读取(16字节读取、20位熵可用)
[3.639872]随机:systemd:未初始化的 urandom 读取(16字节读取、22位熵可用)
[3.649770]随机:systemd:未初始化的 urandom 读取(16字节读取、22位熵可用)
[3.659361]:systemd: 未初始化 urandom 读取(读取16字节、可用22位熵)
[3.669178]随机:systemd:未初始化 urandom 读取(读取16字节、可用22位熵)
[4.116977] systemd[1]:侦听 udev 内核套接字。
[确定]正在侦听 udev 内核套接字。
[4.138119] systemd[1]:已达到目标交换。
[确定]已达到目标交换。
[4.158208] systemd[1]:Listening on Journal Socket (/dev/log)。
[确定]收听 Journal Socket (/dev/log)。
[4.183985] systemd[1]:创建的层用户和会话层。
[确定]已创建层用户和会话层。
[4.208194] systemd[1]:侦听 udev 控制套接字。
[确定]正在侦听 udev 控制套接字。
[4.238228] systemd[1]:已开始向控制台目录监视发送密码请求。
[确定]已开始向控制台目录监视发送密码请求。
[4.26823] systemd[1]:创建的层系统层。
[确定]已创建切片系统切片。
[4.288179] systemd[1]:侦听/dev/initctl 兼容性命名管道。
[确定]收听/dev/initctl 兼容性命名管道。
[4.318144] systemd[1]:侦听 Syslog 套接字。
[确定]侦听 Syslog 套接字。
[4.348151] systemd[1]:在 Journal Socket 上收听。
[确定]收听日志套接字。
[4.418027] systemd[1]:安装 POSIX 消息队列文件系统...
正在安装 POSIX 消息队列文件系统...
[4.441424] systemd[1]:开始为当前内核创建所需的静态设备节点列表...
正在开始创建所需 st 的列表... 当前内核的节点...
[4.478444] systemd[1]:正在安装临时目录...
正在安装临时目录...
[4.510921] systemd[1]:正在启动安装虚拟控制台...
正在启动设置虚拟控制台...
[4.529415] systemd[1]:创建的 slice system-Getty.slice。
[确定]已创建片 system-Getty.slice。
[4.558360] systemd[1]:已开始将密码请求转发到 Wall Directory Watch。
[确定]已开始将密码请求转发到 Wall Directory Watch。
[4.628034] systemd[1]:正在安装调试文件系统...
正在安装调试文件系统...
[4.663514] systemd[1]:正在启动日志服务...
正在启动日记账服务...
[4.688337] systemd[1]:已达到目标层。
[确定]已到达目标层面。
[4.758283] systemd[1]:正在启动加载内核模块...
正在启动加载内核模块...
[4.779417] systemd[1]:创建的片系统-串行\x2dgetty.slice。
[确定]创建的层 system-serial\x2dgetty.slice.[4.788160] CMEMK 模块:参考 Linux 版本4.19

[4.798311]分配的堆缓冲区0x4050000 (大小为0x100000
[4.804114] cmemk 已初始化
[4.808166] systemd[1]):已达到目标路径。
[确定]已到达目标路径。
[4.828437] systemd[1]:侦听网络服务 Netlink 套接字。
[4.83575] cryptodev:已加载驱动程序1.8。
[确定]侦听网络服务 Netlink 套接字。
[4.898305] systemd[1]:正在开始重新装载根和内核文件系统...
正在开始重新装载根文件系统和内核文件系统...
[4.923290] EXT4-FS (mmcblk0p2):已重新安装。 OPTS:(空)
[4.945894] systemd[1]:已挂载 POSIX 消息队列文件系统。
[确定]已挂载 POSIX 消息队列文件系统。
[4.978936] systemd[1]:已安装调试文件系统。
[确定]已安装调试文件系统。
[4.998186] systemd[1]:挂载的临时目录。
[确定]已挂载的临时目录。
[5.020251] systemd[1]:已启动日志服务。
[确定]已启动日志服务。
[确定]已开始为当前内核创建所需的 sta...ce 节点列表。
[确定]已启动设置虚拟控制台。
[确定]已开始加载内核模块。
正在开始应用内核变量...
正在开始在/dev/中 创建静态设备节点...
[确定]已开始应用内核变量。
[确定]已开始在/dev/中 创建静态设备节点。
正在启动 udev 内核设备管理器...
[确定]已启动 udev 内核设备管理器。
[确定]已开始重新装载根和内核文件系统。
正在启动 udev 冷插拔所有设备...
[确定]已达到目标本地文件系统(预)。
安装/media/ram...
安装/var/volatile...
正在开始将日志刷新到持久存储...
[确定]已安装/var/volatile.
[确定]已安装/media/ram.
[6.791318] systemd-journale[186]:已收到从 PID 1刷新运行时日志的请求
[确定]已将刷新日志启动到永久存储。
正在启动加载/保存随机种子...
[确定]已到达目标本地文件系统。
正在开始创建易失性文件和目录...
[确定]已开始加载/保存随机种子。
[确定]已开始创建易失性文件和目录。
正在启动网络时间同步...
正在开始更新 utmp 关于系统引导/关机...
[7.209261] OMAP-rproc 588200.IPU:分配的保留存储器节点 ipu1_CMA@9d000000
[7.249695] remoteproc0:588200.IPU 可用
[7.260943] remote0:注意:remoteproc 仍在开发中并被视为实验。
[7.270727] remoteproc0:二进制格式尚未最终确定、并且尚不能保证向后兼容性。
[7.300845] remoteproc0:针对 dra7-ipu1-fw.xem4的直接固件加载失败、错误-2
[7.312267] OMAP-r5502000.IPU:分配的保留存储器节点 ipu2_proc@95800000
[7.312322] remoteproc 1:5502000.IPU 可用
[7.312326] remote1仍在实验开发中:remoteproc1:remoteproc1:
[7.312330] remoteproc1:二进制格式尚未最终确定、并且尚不能保证向后兼容性。
[7.312824] OMAP-rproc 40800000.dsp:分配的保留存储器节点 dsp1_CMA@99000000
[确定]已启动网络时间同步。[7.354694] drateproc0:无法加载 dra7-ipu1-fw.xem4

[7.365167] remote1:无法加
载 raprocfg-iprocfg-exc7–382-dsp.pr2]7.384bw:无法加载 remote2]]删除 dsp.384bw

注:Remoteproc 仍在开发中,并被认为是实验性的。
[7.398793] remoteproc2:二进制格式尚未最终确定、并且尚不能保证向后兼容性。
[7.417305] OMAP-rproc 41000000.dsp:分配的保留存储器节点 dsp2_CMA@9f000000
[7.428270] remoteproc3:41000000.dsp 可用
[7.433638] remoteproc3:注意:remoteproc 仍在开发中并被视为实验。
[7.443720] remoteproc3:二进制格式尚未最终确定、并且尚不能保证向后兼容性。
[确定]已启动 udev 冷插拔所有设备。
[7.702344] remoteproc2:registered virtio0 (type 7)
[7.707880] remoteproc3:针对 dra7-dsp2-fw.xe66的直接固件加载失败,错误-2
[7.750236] remoteproc3:加载7-dsp2-fw.xe66
[确定]启动/关闭系统。
[7.843537] OMAP-DES 480a5000.des: OMAP DES 硬件加速器版本:2.2
[ 7.866816] ALG:skcipher:setkey 在 ECG-DES-OMAP 的测试5上失败:flags=100
[确定]找到了器件/dev/ttyS2.
[7.906100] ALG:skcipcip-ddst:setkey 在 ECG-DES-OMAP 的测试5上失败:flags=100
[7.953159] ALG:skcipcip-ddst:setkey 在 ECG-DES-OMAP 的测试5上失败:flags=100
[确定]已同步达到目标系统时间。
正在开始同步系统和硬件时钟...
[确定]已开始同步系统和硬件时钟。
[确定]已达到目标系统初始化。
[确定]正在侦听 RPCbind 服务器激活套接字。
[确定]开始每日清理临时目录。
[确定]达到目标计时器。
[确定]正在收听 dropbear.socket。
[ OK ]正在收听 D 总线系统消息总线插座。
[确定]已达到目标套接字。
[确定]已到达目标基本系统。
[8.718050] OMAP-WDT:OMAP 看门狗计时器版本0x01:初始超时60秒
[确定]启动系统日志记录服务。
[8.776735] OMAP-SHIM 4b101000.sham:OMAP 版本4.3上的硬件加速器
[确定]启动了 D 总线系统消息总线
正在启动网络服务...
正在开始打印有关 GPLv3封装的通知...
正在启动 rc.pvr.service ...
[确定]启动内核日志记录服务。[ 9.150716] net eth0:初始化 cpsw 版本1.15 (0)
[9.178477] FAT-FS (mmcblk1p1):卷未正确卸载。 某些数据可能已损坏。 请运行 fsck。

[9.209129] net eth0:已初始化的 cpsw ale 版本1.4
[9.209138] net eth0:ale 表大小1024
正在启动登录服务...
[9.287850] net eth0:找到 PHY:id:0x0
[确定]已启动网络服务。
[9.36975] net eth0:Phy found:id is:0x0
[9.384590] 8021q: Adding VLAN 0 to HW filter on device eth0
[9.468560] FAT-FS (mmcblk0p1):volume was not properly unmounted (未正确卸载)。 某些数据可能已损坏。 请运行 fsck。
[9.499010] ti-pruss 4b200000.pruss:创建 PRU 内核和其他子平台器件
[9.534296] IRQ:找不到/ocp/pruss@4b200000/INTC@4b220000的 IRQ 域!
[9.560278] IRQ:找不到/ocp/pruss@4b200000/INTC@4b220000的 IRQ 域!
[9.585056] OMAP-AES 4b500000.AES:OMAP AES 硬件加速器版本:3.3
[9.614892] EXT4-FS (mmcblk1p2):恢复完成
[ 9.625085] EXT4-FS (mmcblk1p2):已安装文件系统、具有有序数据模式。 opts:(null)
[9.717957] FAT-FS (sda1):卷未正确卸载。 某些数据可能已损坏。 请运行 fsck。
[9.816505] EXT4-FS (sda2):恢复完成
[9.819958] ti-prusss 4b280000.pruss:创建 PRU 内核和其他子平台器件
[9.821572(2004) IRQ: No IRQ domain found for /ocp/pruss@4b280000/INTC@4b2a0000!
[9.822180] IRQ:找不到/ocp/pruss@4b280000/INTC@4b2a0000的 IRQ 域!
[9.822641] OMAP-AES 4b700000.AES:OMAP AES 硬件加速器版本:3.3
[9.828773] remoteproc4:4b234000.pru0现已推出
[9.828777] remoteproc4:注意:remoteproc 仍在开发中并被视为实验。
[9.828781] remoteproc4:二进制格式尚未最终确定,并且还不能保证向后兼容性。
[9.828917] remoteproc4:am57xx-pru1_0-FW 的直接固件加载失败、错误-2
[9.828929] remoteproc4:无法加载 am57xx-pru1_0-fw
[9.828968] prU-rproc 4b234000.pru0:手动引导 PRU 内核[9.8284000-pru1_0-fw [9.8284]pru4000.94]


Request_firmware failed:-2
[9.829024] PRU-rproc 4b234000.pru0:rproc_boot failed
[9.829066] remoteproc4:releasing 4b234000.pru0
[9.829184] PRU-rproc:probe of 4b234000.pru0 failed with error -2
[9.435] remoteproc:pru4:remote4:remote438000 considoteproc
:remote4384:remote4:remoteute4:remote4b234000.pruproc 仍在开发中。
[9.829442] remoteproc4:二进制格式尚未最终确定,并且还不能保证向后兼容性。
[9.829576] remoteproc4:am57xx-pru1_1-FW 的直接固件加载失败、错误-2
[9.829585] remoteproc4:无法加载 am57xx-pru1_1-FW
[9.829628] prU-rproc 4b238000.pru1:手动引导 PRU 内核
[9.8294672_remote4]] pru648.4bpru646.4bprux
固件失败、手动加载方式为 remote4]]
request_firmware failed:-2
[9.829684] PRU-rproc 4b238000.pru1:rproc_boot failed
[9.829734] remotepproc4:releasing 4b238000.pru1
[9.829854] PRU-rproc:probe of 4b238000.pru1 failed with error -2 [9.8301c.pru4

:reliotic remote4b8304b4bc.4bc.4bc.rproc:remote4000 is considote4b82120]
[9.830123] remoteproc4:二进制格式尚未最终确定、并且尚不能保证向后兼容性。
[9.830627] remoteproc4:am57xx-pru2_0-FW 的直接固件加载失败、错误-2
[9.830639] remoteproc4:无法加载 am57xx-pru2_0-fw
[9.830676] prU-rproc 4b2b4000.pru0:手动引导 PRU 内核
[9.8304_pru4000.] remote4b4000.pr4]]

request_firmware failed:-2
[9.830730] prU-rproc 4b2b4000.pru0:rproc_boot failed
[9.830778] removedproproc4:releasing 4b2b4000.pru0
[9.830942] prU-rproc:probe of 4b2b4000.pru0 failed with error -2 [9.83b4000.prupru4

:reliotic e4b8394] remote4:remote4b8000 is considote4b431.pru4:remote4b8000 is considote4b839]
[9.831246] remoteproc4:二进制格式尚未最终确定,并且还不能保证向后兼容性。
[9.831355] remoteproc4:am57xx-pru2_1-fw 的直接固件加载失败,错误-2
[9.831365] remoteproc4:加载 am57xx-pru2_1-fw
[9.831401] prU-rproc 4b8000.pru1:引导 PRU 内核

固件失败,错误为 remote2144b24]
Request_firmware failed:-2
[9.831454] PRU-rproc 4b2b8000.pru1:rproc_boot failed
[9.831494] remoteproc4:releasing 4b2b8000.pru1
[9.831598] PRU-rproc:proc 4b2b8000.pru1的探测器失败,错误-2
[10.492]已安装数据文件系统[ 2.pruF ](已订购) opts:(null)
]启动 rc.pvr.service。
[10.570958]随机:非阻塞池已初始化
[11.28797] cpsw 48484000。以太网 eth0:链路已启动- 1Gbps/全速-流控制关闭
[11.310020] cpsw 48484000。以太网 eth0:链路已启动- 1Gbps/全速-流控制已关闭

(小部分
注意:此文件系统包含以下 GPLv3软件包:
binutils
coreutils
dosfstools
gdb
gdbserver
libgmp10
分配
rsync

如果您不想分发 GPLv3组件、请
在分发之前删除上述软件包。 这可以使用
opkg remove 命令来完成。 即:
拆下视千克 
其中 是上面列表中打印的名称

注:如果包是您的另一个包的依赖项
将通知相关软件包。 您应该这样做
在中使用--force-remove-of dependent-packages 选项
此外,亦删除附属套件

(小部分
[11.620240] remoteproc2:加电40800000.dsp
[11.645012] remoteproc2:启动 FW 映像 dra7-dsp1-fw.xe66、大小为6285044[11.659927]
omap_hwmod:mu0_dsp1:_wait_target_disable 失败
[11.6658358]

注意:vapma-d1000 mu.mu.mu.mu.0mu.mu.mu.mu.mu.mu.mu.02000]
[11.708536] remoteproc2:远程处理器40800000.dsp 现已启动
[11.716569] virtio_rpmsg_bus virtio0:rpmsg 主机已联机
[11.717970] virtio_rpmsg_bus virtio0:创建通道 rpmsg-proto addr 0x3D
[11.737840] NET:已注册协议系列
[ OK ]登录服务已启动]。
正在启动 telnetd.service ...
正在启动 tiipclad-demon.service ...
正在开始等待网络配置...
[确定]已到达目标网络。
正在开始网络名称解析...
[确定]已启动 telnetd.service。
[确定]已启动 tiipclad-demon.service。
[确定]已开始网络名称解析。
[S[[[[[ 

你们怎么看?

最棒的

  Tim

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

    您是否修改了 am57xx-evm-cmem.dtsi 中的定义?
    您能否总结一下您的定制板与 AM572x GP EVM 之间的区别? 您还完成了哪些软件更改?

    [引用]我可以看到、在通过 remoteproc (并打开 MessageQ 队列)引导 DSP 后、便会启动 tiipcled 守护程序。 这可能是阻止的原因?
    我不确定这是否是问题的根本原因。

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

    Yordan、您好!

     由于我们在调整方面走了很长的路、因此很难详细地总结所有变化。 从硬件角度而言、遵循了大多数 EVM 设计。 主要的变化可能是、我们将网络交换机连接到通过 MDIO 和 Linux DSA 驱动程序控制的网络接口之一。 现在、我们只有一个以太网端口可以工作。 这会导致系统的网络等待服务超时。 如果我将此服务的超时命令行参数更改为2秒、则启动过程将加快、并且它将再次运行。 但我认为这只是因为启动过程在 DSP 有时间进行干扰之前结束。 这不是一个可靠的解决方案、我想从根本上解决问题、即了解潜在的故障流程。

    cmem.dtsi 根本没有改变、如果 cmem/rpmsg/virtio 配置被破坏、我希望通过 MessageQ 进行的 DSP-Linux 通信始终失败。 尽管如此、当我们在 Linux 启动后(有时甚至在标准启动时)启动 DSP 时、我们看到它的工作方式非常有魅力。

    另一项更改是激活最初根本未使用的 OCMC 内存。 我们将其用作 DSP 存储器组:

    保留存储器{
    dsp1_ocmc_ram:dsp1_ocmc@40400000{
    REG =<0x0 0x40400000 0x0 0x100000>;
    无地图;
    状态="正常";
    };
    };

    如果我在 BIOS_start 函数调用前将一个等待循环放入 DSP 的主 FCT 中、让其等待 Linux 启动完成、一切都正常。 如果我们将等待循环移动到任务以启动 BIOS、而在头 n 秒内没有实际执行任何操作、则启动再次失败。 因此、BIOS 启动似乎会对 Linux 启动过程产生不良影响。

    我们在 app config 中将启动功能附加到 RTOS BIOS:

    BIOS.addUserStartupFunction ('&IpcMgr_ipcStartup');

    这是 RTOS IPC 模块的默认初始化例程。 将其分离不会更好。

    对我来说、它实际上看起来像是服务启动顺序冲突。  如果过早调用 BIOS_start 函数、Linux 启动将中断。 遗憾的是、我无法确定在 BIOS 开始工作之前必须执行哪些启动步骤。

    我在系统卡死后通过 ssh 查看了系统(正如我所说的,尽管出现了故障,但出色的服务似乎已经启动)。 当我想获得一些有关 systemd 状态的信息时,所有分析命令(systemctl list-jobs 等)都不起作用。 它们始终显示"连接超时"。 因此、systemd 似乎已经损坏。

    有什么建议吗?

    感谢您的关注!

          Tim

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

    如果修改了 cmem、请务必避免使用 OpenCL 保留的前2个块。 在这个主题 中、我们讨论了 CMEM、e2e.ti.com/.../604490
    但是、我认为您的问题与 DSP 启动后开始的 cmem 或 tiipclad 无关。 引导程序似乎停留在“Network Name Resolution (网络名称解析)”之后。

    要从图片中排除 DSP/IPU/PRU、请将/lib/firmware 中的所有 DSP、IPU 和 PRU 映像重命名为其他名称、以便 Remoteproc 不会将其加载到 DSP 等

    我将下载 ProcSDK 3.1以查看 Linux 启动顺序是什么。 我使用的是4.0.0.4、它看起来有点不同。

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

    尊敬的 Rex:

     感谢您的努力!

    我已经删除/重命名了 DSP 固件(我们只启动 DSP1)。 该问题与运行的 DSP 绝对相关。 如果我们完全不引导 DSP1、Linux 引导就可以正常工作。 如果我们在 DSP1 Linux 引导上延迟 BIOS 启动、即使在启用了 DSP1的情况下也可以正常启动。 如果我们在不延迟其 BIOS 启动的情况下启动 DSP、Linux 启动将失败。 我不认为任何明显的引导服务都与引导失败相关。 每次我尝试启动时、它都会挂起、最后一个服务开始。 例如,我已经使用禁用的网络服务、rpmsg、journald 等进行了测试,但没有任何结果。

    我们根本没有修改 CMEM、因此我可以假设 CMEM 在这里不起作用。 由于 DSP 是与 CMEM 相关的从站(Linux 为 DSP 分配和发送可用 CMEM 的地址和大小)、DSP 不会以任何方式干扰 CMEM、直到 Linux 世界的应用要求其这样做。

    稍后我可以从 Linux 用户盘引导 DSP1、但遗憾的是、默认固件文件名是在 memproc 驱动程序编译时设置的。 每次启动 DSP 时、创建和删除文件都是一件非常麻烦的事情。 另一方面、我可以手动加载 memproc 内核模块。 因此、如果涉及权变措施、我的问题是:

    手动启动内核的最佳做法是什么?

    再次感谢您的帮助、

             Tim

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

    您能否使用 CCS 运行 DSP 应用以在 DSP 上加载和运行? 或者尝试在 DSP1上使用 Linux sysfs bind/unbind 命令。 BIND 和 UNBIND 将触发 Remoteproc 重新加载并运行 DSP 映像。 我建议在内核启动期间不要加载 DSP 映像、然后恢复文件名并绑定 DSP 以触发加载。

    我将与一位 DSP 工程师交谈、了解 DSP 代码中的哪些内容会影响 Linux 的引导。

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

    尊敬的 Rex:

     我不知道您对 CCS 方法的确切期望。 作为一种权变措施、我已经通过绑定/取消绑定启动 DSP、它可以正常工作。 它是非常笨的。  这种情况似乎类似于在 Linux 启动时使用延迟的 BIOS_start()来启动 DSP,但不幸的是,通过将固件映像识别为其分配的位置(例如,在 DSP 启动时关闭器件)来关闭下一次启动。 如果我们确实必须这样做、我们会将固件放置在专用分区上、直到完成 Linux 引导后才会安装该分区。 这将是有关在下次启动时识别加载的剩余固件的失效防护。

    我真的想听听 DSP 的人说些什么。

    再次感谢、

                  Tim

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

    到目前为止还有什么新的东西吗?
    可能子系统配置错误? 例如、由于 DSP 负责处理 PCIe 总线、我们必须将其从 Linux 器件树中剥离。 也许 Linux 领域中还有一些会干扰它的东西吗? 还是 GPIO 配置(DSP 控制的某些 GPIO 与 Linux 控制的 GPIO 位于同一个 GPIO 组中)?

    我仍然坚持这个、

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

    在 Linux 初始化某些模块之前、DSP 可能会访问这些模块、GPIO 可能是其中之一。 您的情况下 DSP 是否崩溃? 您是否能够运行 TI IPC 示例、它是否会导致您遇到的任何问题? 这2个应用程序的作用有何不同?

    调试 DSP 应用的一种方法是添加等待 while 循环或退出以查看 DSP 执行在哪个点不会导致任何问题。

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

    Rex、

     发生错误时、DSP 不会崩溃。 即使是在 Linux 方面,一段时间后,一切似乎都可以正常工作-除了很长的启动和永久挂起的系统守护程序。

    IPC 示例工作正常、但我不认为这是一个强信号、因为错误行为与时间非常相关。 我可以想象、即使是不同大小的固件也可能揭示或隐藏错误(不同的启动时间)。

    我已经完成了通过 DSP 代码完成链移动等待循环的过程。 我卡在 BIOS_start()上,这对我来说是一个黑盒。 实时调试是不可行的、因为这会改变计时。

    再次感谢您的集体讨论、

       Tim

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

    我与 DSP 工程师进行了交互式检查。 以下是反馈:

    UART 输出看起来像一个不良的波特率。 ARM 似乎也运行缓慢(在 ssh 工作之前很长时间)、这似乎是 DSP 可能具有的

    1) 1)重新编程了一个用于管理 UART 和可能的 ARM 的 PLL
    2) 2)对 UART 进行了重新编程

    如果在 DSP 代码内调用 Board_init(),则它可能已经完成了此操作。
    如果它的纯 BIOS_start()(通常在 Board_init()之后),那么它可能会与 ARM 的 dmtimer 混淆。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rex、

     感谢您和您的同事抽出宝贵的时间参与。

    我们不调用 Board_init、我确定 UART 和/或 ARM 速度不受影响。 等待一段时间后、我可以通过 SSH 登录、如果我触发 UART 输出(例如、通过卸载产生 dmesg 输出的 DSP)、我会看到 UART 工作正常。 此外、处理器负载也没有任何不同(这意味着内核周期速率较低)。 实际上,似乎只有 systemd 守护程序受到影响。

    我们的专有 DSP 代码仅初始化 PCIe 子系统和 GPIO 驱动程序、进而完全重新配置某些 GPIO 组。

    为了测试、我禁用了 GPIO 初始化、问题仍然存在。  

    但是! 另一次尝试是禁用了 PCIe 初始化、Linux 启动再次正常! 我尝试找到会触发故障的确切初始化部分。 现在我非常确定远程状态 IRQ 功能的初始化是故障排除者。 这是我的代码:

    静态空 PCIe_init_remote_state_interrupts()
    {
    Hwip_Params hwiInputParams;
    CSL_XbarIrqCpuId CPU;
    uint32_t cpuEvent;
    uint32_t xbarIndex;
    内部32_t 矢量;
    pcieRegisters_t 寄存器;
    
    pcieTiConfIrqStatusMainReg_t rcMainStat;
    pcieTiConfIrqEnableSetMainReg_t rcMainEn;
    
    
    memset (regs、0、sizeof (regs));
    memset (&rcMainStat、0、sizeof (rcMainStat));
    memset (&rcMainEn、0、sizeof (rcMainEn));
    
    /*清除 PCIe 内的任何挂起中断*/
    regs.tiConfIrqStatusMain =&rcMainStat;
    rcMainStat.cfgBmeEvt =
    rcMainStat.cfgMseEvt =
    rcMainStat.errAxi =
    rcMainStat.errCor =
    rcMainStat.errEcrc =
    rcMainStat.errFatal =
    rcMainStat.errNonfatal =
    rcMainStat.errSys =
    rcMainStat.linkReqRst =
    rcMainStat.linkUpEvt =
    rcMainStat.pmPme =
    rcMainStat.pmeToAck =
    rcMainStat.pmeTurnOff = 1;
    
    /*启用 PCIe 内部的中断*/
    regs.tiConfIrqEnableSetMain =&rcMainEn;
    rcMainEn.cfgBmeEvt =
    rcMainEn.cfgMseEvt =
    rcMainEn.errAxi =
    rcMainEn.errCor =
    rcMainEn.errEcrc =
    rcMainEn.errFatal =
    rcMainEn.errNonfatal =
    rcMainEn.errSys =
    rcMainEn .linkReqRst =
    rcMainEn .linkUpEvt =
    rcMainEn.pmPme =
    rcMainEn .pmeToAck =
    rcMainEn.pmeTurnOff = 1;
    
    if (pcie_writeRegs (_loc.hND、pcie_location_local、&regs)!= pcie_RET_OK)
    {
    LogMsgPush (LM_PCIe、LL_Critical、"RC 中断寄存器的 PCIe 驱动程序写入失败。\n");
    System_abortStd();
    }
    
    memset (&rcMainStat、0、sizeof (rcMainStat));
    memset (&rcMainEn、0、sizeof (rcMainEn));
    
    if (PCIe_readRegs (_loc.HND、PCIe_location_local、&regs)!= PCIe_RET_OK)
    {
    LogMsgPush (LM_PCIe、LL_Critical、"RC 中断寄存器的 PCIe 驱动程序写入失败。\n");
    System_abortStd();
    }
    
    LogMsgPush (LM_PCIe、LL_Debug、"PCIe 启用主中断导致 Stat:0x%08X -启用:0x%08X。\n"、rcMainStat.raw、rcMainEn .raw);
    
    CPU = CSL_chipReadDNUM()= 0? CSL_XBAR_IRQ_CPU_ID_DSP1:CSL_XBAR_IRQ_CPU_ID_DSP2;
    
    cpuEvent = 48;
    xbarIndex = cpuEvent - 31;
    Vector = 12;
    
    /*配置 Xbar */
    CSL_xbarIrqConfigure (CPU、xbarIndex、CSL_XBAR_PCIe_SS1_IRQ_INT0);
    
    /*为 PCIe 构造 Hwi 对象。 *
    Hwip_Params_init (&hwiInputParams);
    hwiInputParams.name ="PCIe_main";
    hwiInputParams.arg =(uintptr_t)&_loc;
    hwiInputParams.priority = 0;
    hwiInputParams.evtId = cpuEvent;
    
    memset (&_loc.main_intx、0、sizeof (_loc.main_intx));
    
    if ((_loc.main_INTx.hwi = Hwip_create (vector、PCIe_MainIntxIsr、&hwiInputParams)= NULL)
    {
    LogMsgPush (LM_PCIe、LL_Critical、"PCIe driver Hwi create failed.\n");
    System_abortStd();
    }
    }
    

    IRQ Xbar 配置似乎是所有邪恶的根源。 如果我在调用 CSL_xbarIrqConfigure 时注释掉该行、Linux 引导将再次起作用。 代码是来自 PCIe 示例的一个片段(不再知道确切的源代码)、但可能我需要调整调用的参数。 说实话、我不熟悉 Linux 相关的 X Bar 限制。 这里的最佳做法是什么以及做什么和不做什么 可以帮帮我吗?

    再次感谢您的帮助-非常感谢!

         Tim

    PS.:很抱歉、描述 BIOS_start 是问题的原因时会产生混淆。 我必须将测试用例 f&%加起来。

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

    如果 IRQ 配置是、那么 Linux 是否仍然映射了中断232? 从器件树中修改 PCIe 配置时、是否已全部删除?

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

    Rex、

     很抱歉耽误你的时间、我是 AFK。

    据我所知、PCIe 节点已完全禁用。 我们遵循了最佳做法、不更改设备树、而是禁用相关节点。 我们使用了 dra7.dtsi 中的节点 pcie1、这是默认情况下唯一启用的 PCIe 节点。 正如预期的那样、整个总线不再出现在 sysfs 中。 据我了解、禁用的器件树节点及其子节点根本不会初始化。 在任何其他映射中都不会发生中断232。

    最棒的

         Tim

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

    因此、232不在/proc/interrupts?中 根据您的测试、似乎是导致它的原因。

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

    Rex、

     否、232不在/proc/interrupts 中:

    root@xxx:~# root@rmcq-000003:~# cat /proc/interrupts
    CPU0 CPU1
    16: 0 0 CBAR 32级 GP_TIMER
    19: 5582. 5662 GIC 27边缘 ARCH_TIMER
    22: 0 0 CBAR 4级 L3-dbg-IRQ
    23: 0 0 WUGEN 10级别 L3-APP-IRQ
    25: 1 0 CBAR 121级别 talert
    27: 57. 0 CBAR 8级 OMAP-DMA 引擎
    30: 509. 0 CBAR 361级别 43300000.EDMA_ccint
    32: 0 0 CBAR 359级别 43300000.EDMA_cerrint
    35: 1 0 CBAR 24层 4ae1000.gpio
    36: 1 0 4ae1000.GPIO 0电平 帕尔马
    68: 1 0 CBAR 25级别 48055000。GPIO
    72: 0 1 48055000。GPIO 3边缘 Gpioib
    101: 0 0 CBAR 26级 48057000.GPIO
    134: 0 0 CBAR 27级别 480590.GPIO
    167: 0 0 CBAR 28级别 4805b000.GPIO
    200: 0 0 CBAR 29层 4805d000.GPIO
    228: 0 0 4805d000.GPIO 27边缘 4809c000.MMC CD
    233: 0 0 CBAR 30级别 480510.GPIO
    266: 0 0 CBAR 116级别 480530.GPIO
    301: 491. 0 CBAR 69级别 48020000.serial
    315: 3. 0 CBAR 251级别 mbox_dsp1_ipc3x
    338: 472 0 CBAR 51级别 48070000.i2c
    339: 32 0 CBAR 56级 48060000.i2c
    340: 4833. 0 CBAR 78级别 mmc0
    341: 1283 0 CBAR 81级别 mmc1
    342: 0 0 CBAR 23级别 40d01000.MMU
    343: 0 0 CBAR 145级 40d020.MMU
    344: 0 0 CBAR 395级 588820.MMU
    345: 0 0 CBAR 396级 55082000.MMU
    347: 248. 0 CBAR 49级别 4a140000.SATA
    348: 0 0 CBAR 217级别 rtc2
    352: 54 0 CBAR 335级别 48484000.Ethernet
    353: 31. 0 CBAR 336级 48484000.Ethernet
    359: 20. 0 CBAR 46级别 4b101000.sham
    360: 0 0 CBAR 47级 48090000.rng
    361: 0 0 CBAR 146级别 41501000.MMU
    362: 0 0 CBAR 147级别 415020.MMU
    429: 0 0 PALMAS 8边缘 48070000.i2c:tps659038@58:tps659038_RTC
    431: 0 0 pinctrl 1016边缘 48020000.serial
    432: 0 0 CBAR 2边缘 mcp7941x
    433: 0 0 pinctrl 1060边缘 2-006F
    IPI0: 0 1个 CPU 唤醒中断
    IPI1: 0 0定时器广播中断
    IPI2: 18339 23121重新安排中断
    IPI3: 0 0函数调用中断
    IPI4: 397 289单功能调用中断
    IPI5: 0 0个 CPU 停止中断
    IPI6: 0 0 IRQ 工作中断
    IPI7: 0 0完成中断
    错误: 0
    root@xxx:~# cat /proc/interrupts | grep 232
    IPI2: 18420 23249重新安排中断
    root@xxx:~#
    

    另一个想法是:我查看了 CSL_xbarIrqConfigure、我看到该函数解锁 MMR2写入访问、执行其任务并在之后锁定它。 我很确定 Linux 启动过程也需要对 MMR2寄存器进行写入访问、并在一段时间内将其解锁/锁定一次。 是否有一种机制可以让异步任务在不相互干扰的情况下解除/锁定 MMR?  

    最棒的

          Tim

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

    这是一个有趣的发现。 我在 Keystone 器件 www.ti.com/.../sprz334h.pdf (使用说明4)中进行了相互讨论、并有类似的勘误表。

    我在 Linux 上转储了 MMR_LOCK_2寄存器、它被解锁。 您能否尝试先读取 MMR_LOCK_2、如果它已解锁、请不要在配置 IRQ 时执行解锁/锁定步骤、并查看它是否起作用?

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

    尊敬的 Rex:

     我复制了 CSL_xbarIrqConfigure 并解除了解锁/锁定。 如果已经解锁、我不是解锁了、而是添加了一个测试。

    1. 如果没有锁定/解锁、代码将不会停止 Linux 启动
    2. mmr2解锁测试显示 mmr2已解锁。

    IMHO 得出的结论认为、mmr2的 CSL_xbarIrqConfigure 锁定是问题的原因似乎是合理的...

    最棒的

         Tim

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

    很好。 它似乎处于多核环境的竞争状态,如勘误表中的 Advisory 30用法说明4所建议。

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

    阿姆、

     您的回答似乎暗示勘误表中的 Advisory 30用法注4为您的客户提供了足够的信息以使其意识到此问题-我强烈反对这种观点。 除了对一整套产品的标准化 TRM 策略提出任何批评、然后以增编/勘误表的形式添加关键信息、所述的使用说明绝不会暗示 MMR 写入的任何锁定/解锁机制。 我强烈建议在 TRM 中添加有关在多核环境中使用这些机制的一般警告以及相关使用说明的更新。 此外 、使用这些机制的 CSL 函数的文档需要添加警告、建议不要在多核环境中使用这些函数。

    我的看法是、

     

         Tim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    说明文档提供了所需的信息、但它显然没有提供、因此不能解决任何问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tim、

    同意。 权变措施是在内部讨论后查看这是否是原因。 我所讨论的人不熟悉 AM57x 架构、因此我需要请一位了解 AM57x 架构的人过来。 对于这个问题、我们需要解决一些问题。 如何防止它或警告用户肯定是此主题中的操作项目。

    感谢您愿意与我合作、并提供有价值的信息来查找原因。

    雷克斯