如何手动为 Banana Pi 创建启动 SD 卡

如何手动为 Banana Pi 创建启动 SD 卡

我似乎不太了解如何在 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/bootsudo 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 接口。

BananaPro 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 二进制文件。

相关内容