我正在为 Rockchip SOQuartz CM4 设置可启动 SD 卡。
我能够为此目标构建 uboot,将其与 rootfs 映像和内核一起写入 SD 卡,加载 uboot,然后进入 uboot 终端。我正在尝试采取下一步措施,在 SD 卡上找到内核/rootfs 映像,然后启动它。
当我在主机上查看 SD 卡时,我可以看到 BOOT 分区,其中包含内核映像文件、该板的设备树 DTB 文件以及包含多个设备树覆盖 DTBO 文件的覆盖文件。 SD卡还有一个squashfs格式的根文件系统分区。 uboot 二进制文件已安装在第 64 扇区,根据瑞芯微文档。
当我从这张 SD 卡启动时,我能够观察到第一阶段引导加载程序、U-Boot SPL 和 U-Boot 正确终端上的所有负载。但是,我收到几个与 SD 卡上的电压选择相关的错误。这导致我无法使用 mmc part 或 mmc info 等命令查看 SD 卡上的分区:
U-Boot 2024.01-rc2-g169c3cc4 (Nov 17 2023 - 15:01:56 -0500)
Model: Pine64 RK3566 SoQuartz with CM4-IO Carrier Board
DRAM: 2 GiB
PMIC: RK8090 (on=0x40, off=0x00)
Core: 312 devices, 27 uclasses, devicetree: separate
MMC: mmc@fe2b0000: 1, mmc@fe2c0000: 2, mmc@fe310000: 0
Loading Environment from nowhere... OK
In: serial@fe660000
Out: serial@fe660000
Err: serial@fe660000
Model: Pine64 RK3566 SoQuartz with CM4-IO Carrier Board
Net: eth0: ethernet@fe010000
Hit any key to stop autoboot: 0
Error: unknown compression type.
Card did not respond to voltage select! : -110
pcie_dw_rockchip pcie@fe260000: PCIe-0 Link Fail
pcie_dw_rockchip pcie@fe260000: PCIe-0 Link Fail
scanning bus for devices...
Bus usb@fcc00000: Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus usb@fcc00000 for devices... 2 USB Device(s) found
pcie_dw_rockchip pcie@fe260000: PCIe-0 Link Fail
ethernet@fe010000 Waiting for PHY auto negotiation to complete......... TIMEOUT !
phy_startup() failed: -110FAILED: -110pcie_dw_rockchip pcie@fe260000: PCIe-0 Link Fail
ethernet@fe010000 Waiting for PHY auto negotiation to complete......... TIMEOUT !
phy_startup() failed: -110FAILED: -110=>
=> mmc info
Card did not respond to voltage select! : -110
=> mmc part
Card did not respond to voltage select! : -110
=>
出现这个错误的原因是什么?我的SD卡有问题吗?我认为我的 SD 卡没问题,因为它能够加载 U-Boot 并让我达到这一点。如果重要的话,它是 Sandisk UHS-I 16 GB SD 卡。
我应该采取哪些步骤让 U-Boot 找到我的 SD 卡分区以及安装在其中的文件?
答案1
更新:通过使用“mmc dev”命令更改 mmc 接口的速度模式,我能够解决“卡未响应电压选择!:-110”错误。
=> mmc list
mmc@fe2b0000: 1 (SD)
mmc@fe2c0000: 2
mmc@fe310000: 0
=> mmc dev
Card did not respond to voltage select! : -110
=> mmc part
Card did not respond to voltage select! : -110
=> mmc info
Card did not respond to voltage select! : -110
=> mmc list
mmc@fe2b0000: 1 (SD)
mmc@fe2c0000: 2
mmc@fe310000: 0
=> mmc dev 1 0 6
switch to partitions #0, OK
mmc1 is current device
=> mmc info
Device: mmc@fe2b0000
Manufacturer ID: 3
OEM: 5344
Name: SL16G
Bus Speed: 50000000
Mode: SD High Speed (50MHz)
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.8 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
=> mmc part
Partition Map for MMC device 1 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 31314 289044 00000000-01 0c Boot
2 609402 289044 00000000-02 83
3 1187490 289044 00000000-03 83
4 1476534 29639754 00000000-04 83
请注意,在此日志中,我对“mmc info”和“mmc part”的初始调用均返回电压选择错误。在我使用“mmc dev 1 0 6”设置mmc速度后,我能够从SD卡获取信息。
“mmc dev 1 0 6”细分:mmc dev 命令,设备 1(列为 SD),分区 0,速度模式 6。速度模式 6 = UHS SDR25 (50 MHz)。其他速度模式也可能有效。这是我第一次尝试。
有关 uboot mmc 命令的完整文档可以在此处找到: https://docs.u-boot.org/en/latest/usage/cmd/mmc.html
我还有更多工作要做才能真正在分区上找到我的文件,但现在我更接近实际探索 SD 卡了。希望这一步对将来的人有用。