我似乎不太了解如何在 Banana Pi 等设备上启动 SD 卡映像。情况如下。
我有一个 Banana Pi 和一个 Banana Pro。每个设备在插入设备的 SD 卡上都有某个发行版的映像(Banana Pro -> Arch Linux、Banana Pi -> Bananian)。图像可以从以下位置下载这里和这里。这很好用。
但由于 Banana Pi / Pro 有一个 SATA 端口,如果根系统可以从连接的硬盘启动,那就太好了。正如可以读到的这里这可以很简单地完成。
但现在是我正在努力解决的部分。使用发行版映像刷新整个 4GB SD 卡(甚至更大的 SD 卡)并仅使用 50MB 分区似乎有点浪费。所以我尝试使用更小的SD卡。
我创建了一个分区fdisk
(大小为 50MB),并用于mkfs.vfat -F 16 /dev/sdXX
在该分区上创建文件系统。由于parted
检查图像文件时的输出,我将其设置为 FAT 16 。
。
之后,我将图像中的分区安装到/tmp/boot
了sudo mount -o loop,offset=1048576 ArchLinux_For_BananaPro_v1412.img /tmp/boot
.偏移值是parted 输出中的起始值。
将文件(script.bin、uEnv.txt、uImage)复制到我的SD卡分区,更改uEnv.txt中的根路径。进行同步并卸下 SD 卡。
一切看起来都很好。即使比较带有整个映像的 SD 卡上的启动分区和仅带有启动分区的 SD 卡,它们也是相同的(根据fdisk
)
但是 Banana Pi / Pro 无法使用 SD 卡启动,只有启动分区提供 u-boot 文件。
有人知道这种行为吗?
更新:
感谢@BananaFreak,我认识到了自己的错误。引导加载程序确实丢失了,但即使遵循了该指南勒梅克BananaPro 无法启动。 lemaker wiki 页面上的一个奇怪的事情是第一句话:
注意:这些说明适用于 Linux 计算机,而不是 Banana Pro/Pi!
答案1
我想你错过了引导加载程序。 U-Boot 必须存在于您的 SD 上。看看 Banana Pi / Pro 的 SD 布局应该如何:
http://wiki.lemaker.org/BananaPro/Pi:Setting_up_the_bootable_SD_card#SD_Card_Layout
答案2
这是我对 BananaPro/Pi 启动过程进行深入研究的报告。你需要的第一件事是RS232串行TTL UART转换器与板载 UART 接口。
然后,您可以打开该串行设备来研究启动过程(请小心,不要将 TTL-UART 转换器的 VCC 引脚连接到开发板上。如果您的转换器使用 5V TTL,则在将 VCC 连接到它时可能会损坏 BananaPro。)
在终端上我得到这样的输出:
U-Boot SPL 2014.04-10733-gbb5691c (Dec 18 2014 - 12:54:35)
Board: BananaPro
DRAM: 1024 MiB
CPU: 960000000Hz, AXI/AHB/APB: 3/2/2
spl: not an uImage at 1600
U-Boot 2014.04-10733-gbb5691c (Dec 18 2014 - 12:54:35) Allwinner Technology
CPU: Allwinner A20 (SUN7I)
Board: BananaPro
I2C: ready
DRAM: 1 GiB
MMC: SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: dwmac.1c50000
Hit any key to stop autoboot: 0
reading uEnv.txt
354 bytes read in 17 ms (19.5 KiB/s)
Loaded environment from uEnv.txt
Running uenvcmd ...
reading /script.bin
50564 bytes read in 100 ms (493.2 KiB/s)
reading /uImage
Error reading cluster
** Unable to read file /uImage **
## Booting kernel from Legacy Image at 48000000 ...
Image Name: Linux-3.4.103
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4822880 Bytes = 4.6 MiB
Load Address: 40008000
Entry Point: 40008000
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
** Can't read partition table on 0:0 **
** Invalid partition 1 **
在引导过程失败后,您很可能会掉入 u-boot 提供的一种 shell 环境中。从那里您可以使用 u-boot 工具来执行一些诊断。这里有一个命令列表,尽管可能并非所有这些都可用。
就我而言,引导输出的最后几行得出的结论是,u-boot 的编译方式是查找第二个分区,并最终在某些数据上构建 CRC。由于我的目标是省略第二个分区,我想唯一的解决方案是编译一个带有所需修改的 u-boot 二进制文件。