我们正在尝试在基于 ARM 处理器的定制板上启动 Linux。内核从 SD 卡和 eMMC 均成功执行,但当内核尝试挂载根文件系统时,它能够挂载根分区,但在引发以下错误后挂起:
[ 11.303145] mmc1: new ultra high speed SDR104 SDHC card at address aaaa [ 11.311651] mmcblk mmc1:aaaa: Card claimed for testing. [ 11.318832] mmcblk1: mmc1:aaaa SL16G 14.8 GiB [ 11.341076] mmcblk1: p1 [ 11.461523] EXT4-fs (mmcblk1p1): mounted filesystem with ordered data mode. Opts: (null) [ 11.473340] VFS: Mounted root (ext4 filesystem) on device 179:33. [ 11.488610] devtmpfs: mounted [ 11.493848] Freeing unused kernel memory: 500K (c0b0d000 - c0b8a000) [ 11.911302] init: plymouth-upstart-bridge main process (115) terminated with status 1 [ 11.923611] init: plymouth-upstart-bridge main process ended, respawning [ 11.935367] mmc1: ADMA error [ 11.941245] sdhci: =========== REGISTER DUMP (mmc1)=========== [ 11.949353] sdhci: Sys addr: 0x00000000 | Version: 0x00000303 [ 11.957510] sdhci: Blk size: 0x00007200 | Blk cnt: 0x00000028 [ 11.965688] sdhci: Argument: 0x00440cc0 | Trn mode: 0x00000033 [ 11.973895] sdhci: Present: 0x01fb0206 | Host ctl: 0x00000013 [ 11.982134] sdhci: Power: 0x0000000d | Blk gap: 0x00000000 [ 11.990404] sdhci: Wake-up: 0x00000000 | Clock: 0x00000007 [ 11.998644] sdhci: Timeout: 0x0000000e | Int stat: 0x00000000 [ 12.006822] sdhci: Int enab: 0x02ff000b | Sig enab: 0x02fc000b [ 12.014939] sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000 [ 12.022978] sdhci: Caps: 0x376fd080 | Caps_1: 0x10002f73 [ 12.030966] sdhci: Cmd: 0x0000123a | Max curr: 0x00000000 [ 12.038910] sdhci: Host ctl2: 0x0000308b [ 12.044909] sdhci: ADMA Err: 0x00000001 | ADMA Ptr: 0xae8420c0 [ 12.052861] sdhci: ===========================================
作为解决方法,当我尝试通过传递sdhci.debug_quirks=32832
给内核命令行参数来禁用 ADMA 时,系统在以下位置挂起:
[ 8.076631] Waiting for root device /dev/mmcblk1p1...
谁能提出一些解决方案,因为我现在陷入困境?
答案1
DDR 中存在布线问题,导致两个 DDR 芯片的片选持续有效。这导致了许多随机问题,包括启动时出现 ADMA 错误。对电路板进行返工以纠正芯片选择问题,从而消除了此错误。