petalinux 2017.4移植操作系统 从SD卡启动出错

本文详细记录了一次开机自启遇到的串口打印错误信息,包括找不到声音卡、MMC设备问题、EXT4文件系统挂载失败等。通过分析内核panic原因,指出文件系统权限不足是根本问题,并提供了sudo chmod命令修改ext分区文件权限的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开机自启,串口打印错误信息 

No soundcards found.
Waiting for root device /dev/mmcblk0p2...
mmc0: Problem switching card into high-speed mode!
mmc0: new SDHC card at address 0001
mmcblk0: mmc0:0001 SD 7.39 GiB 
 mmcblk0: p1 p2
EXT4-fs (mmcblk0p2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:2.
devtmpfs: mounted
Freeing unused kernel memory: 1024K (c0900000 - c0a00000)
request_module: runaway loop modprobe binfmt-0000
Starting init: /sbin/init exists but couldn't execute it (error -8)
request_module: runaway loop modprobe binfmt-0000
Starting init: /bin/sh exists but couldn't execute it (error -8)
Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.
CPU0: stopping
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.9.0-xilinx-v2017.4 #1
Hardware name: Xilinx Zynq Platform
[<c010e1c4>] (unwind_backtrace) from [<c010a424>] (show_stack+0x10/0x14)
[<c010a424>] (show_stack) from [<c02dc0b0>] (dump_stack+0x80/0x9c)
[<c02dc0b0>] (dump_stack) from [<c010c978>] (ipi_cpu_stop+0x3c/0x70)
[<c010c978>] (ipi_cpu_stop) from [<c010d190>] (handle_IPI+0x64/0x84)
[<c010d190>] (handle_IPI) from [<c0101420>] (gic_handle_irq+0x78/0x94)
[<c0101420>] (gic_handle_irq) from [<c010ae0c>] (__irq_svc+0x6c/0xa8)
Exception stack(0xc0a01f38 to 0xc0a01f80)
1f20:                                                       00000000 00000000
1f40: 2ee97000 ef7d89c0 6a1faaec 00000000 ef7d7e40 00000000 6a0b9693 00000000
1f60: 00000000 00000000 0000000b c0a01f88 c04b1118 c04b113c 60000013 ffffffff
[<c010ae0c>] (__irq_svc) from [<c04b113c>] (cpuidle_enter_state+0xe4/0x1b0)
[<c04b113c>] (cpuidle_enter_state) from [<c014c694>] (cpu_startup_entry+0x17c/0x19c)
[<c014c694>] (cpu_startup_entry) from [<c0900bb4>] (start_kernel+0x2f8/0x358)
---[ end Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.

 

解决办法:sd里面文件系统权限不够

在ext分区内,打开终端执行以下命令:

sudo chmod 777 -R ./ext/

打开该分区下所有文件的权限

<think>我们正在比较Petalinux2017.4和2020.2版本中AxiDMA的差异。根据提供的引用信息,我们可以总结出以下几点:1.**内核版本差异**:-Petalinux2017.4基于Linux4.9.0(引用[2]提到打实时补丁)。-Petalinux2020.2基于Linux5.4(引用[5]提到在xlnx-5.4中设备树存在问题)。2.**设备树配置差异**:-2017.4版本中,设备树配置相对简单,可能不需要特别指定channelid(引用[4]展示了设备树配置)。-在2020.2版本中,设备树配置需要更精确地指定channelid,并且驱动对设备树的解析有变化(引用[5]详细说明了设备树配置的问题):-例如,在2020.2中,如果使用两个DMA通道(一个用于发送,一个用于接收),需要正确设置`dmas`属性中的channel索引。在2017.4中,驱动可能默认第一个DMA的0通道和第二个DMA的0通道,而在2020.2中,驱动期望一个DMA控制器下的多个通道(0和1)可能被解析为同一个DMA控制器的不同通道,因此需要调整设备树配置。3.**驱动代码变化**:-引用[5]提到,在2020.2版本中,axidma驱动在解析设备树时,如果channel为1,会去同一个DMA控制器的下一个子节点(即第二个通道)。而在2017.4版本中,可能每个DMA控制器只有一个通道,所以需要两个独立的DMA控制器(axi_dma_0和axi_dma_1)来分别处理发送和接收。-因此,在2020.2中,设备树配置需要调整,例如:```dtsdmas=<&axi_dma_00&axi_dma_01>;//使用同一个DMA控制器的两个通道```但根据引用[5]的描述,当时的驱动还不支持这种配置(需要修改驱动),所以仍然配置为两个独立的DMA控制器,但每个控制器只用一个通道,并且注意channel索引的指定。4.**设备树节点修改**:-在2020.2版本中,设备树中需要修改`xlnx,device-id`属性(引用[5]中示例修改了`axi_dma_0`和`axi_dma_1`的device-id)。5.**驱动兼容性问题**:-2020.2版本中,由于内核升级,原有的驱动(如axidma_chrdev)可能需要更新以适应新内核的API变化。总结主要差异:-**内核升级**:从4.9到5.4,内核API可能发生变化,导致驱动需要调整。-**设备树配置**:2020.2版本要求更精确的DMA通道指定,并且驱动对设备树解析逻辑有变化。-**驱动支持**:2020.2版本中,原有的设备树配置可能不直接兼容,需要根据驱动代码调整。建议:在升级到2020.2时,需要重新检查设备树配置,并可能需要修改驱动以适应新内核。同时,参考Xilinx官方文档和驱动源码进行适配。§§相关问题§§1.如何为Petalinux2020.2正确配置AXIDMA的设备树?2.Petalinux2020.2中,AXIDMA驱动的主要变化是什么?3.如何将基于Petalinux2017.4的AXIDMA项目迁移到2020.2版本?</think>### AXI DMA在Petalinux 2017.4与2020.2的差异分析 #### 1. **内核版本与驱动架构变化** - **Petalinux 2017.4**: - 基于Linux 4.9内核(引用[2]) - AXI DMA驱动采用传统字符设备模型,设备树需显式定义`axidma_chrdev`节点(引用[4][5]) - DMA通道配置相对简单,例如: ```dts dmas = <&axi_dma_0 0 &axi_dma_1 0>; dma-names = "tx_channel", "rx_channel"; ``` - **Petalinux 2020.2**: - 升级至Linux 5.4内核(引用[5]) - 驱动转向更标准的DMA引擎框架,减少自定义节点 - 通道ID解析逻辑变更:驱动要求同一DMA控制器的多个通道连续配置(引用[5]) ```dts // 2020.2需调整channel索引 dmas = <&axi_dma_0 0 &axi_dma_0 1>; // 同控制器双通道 ``` #### 2. **设备树配置差异** - **通道ID处理**: - 2017.4:`xlnx,device-id`直接映射硬件ID(引用[5]) ```dts &axi_dma_0 { xlnx,device-id = <0x1>; }; ``` - 2020.2:驱动通过子节点顺序解析通道,需避免跨控制器混用(引用[5]) ```c // 驱动源码逻辑 if (channel == 1) dma_chan_node = of_get_next_child(dma_node, dma_chan_node); ``` - **节点兼容性**: - 2020.2弃用部分旧属性(如`xlnx,device-id`),改为标准`dma-channels`定义 #### 3. **驱动兼容性问题** - **主要痛点**: - 2017.4设备树在2020.2中会导致通道映射错误(引用[5]) - 2020.2要求发送(TX)和接收(RX)通道属于同一DMA控制器 - **解决方案**: ```dts // 2020.2正确配置示例 &amba_pl { dma-controller@40000000 { compatible = "xlnx,axi-dma-1.00.a"; #dma-cells = <1>; dma-channels = <2>; // 明确通道数量 }; }; ``` #### 4. **开发流程优化** - **工程创建**: - 2020.2简化硬件导入流程(引用[3]): ```bash petalinux-config --get-hw-description <xsa文件路径> ``` - **驱动编译**: - 2017.4需手动管理驱动源文件(引用[4]) - 2020.2通过`recipes-modules`自动集成驱动 #### 5. **性能与稳定性改进** - 2020.2版本: - 支持Scatter-Gather DMA提升吞吐量 - 中断处理优化,减少CPU占用 - 增强错误检测机制(如总线超时报告) > 升级建议:迁移至2020.2时需重点验证设备树配置,建议参考`xilinx_axidma.c`驱动源码中的通道解析逻辑[^5]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值