我们正在尝试在基于 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...
任何人都可以提出一些解决方案,因为我被困在这一点上?
DDR 中存在路由问题,导致两个 DDR 芯片的片选被连续断言。这导致了许多随机问题,包括启动时的 ADMA 错误。对电路板进行返工以纠正芯片选择问题,从而消除了此错误。