Linux

如何手動為香蕉派創建啟動 SD 卡

  • April 10, 2017

似乎我對在 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/bootwith sudo mount -o loop,offset=1048576 ArchLinux_For_BananaPro_v1412.img /tmp/boot。偏移值是 parted 輸出中的 Start 值。

將文件(script.bin、uEnv.txt、uImage)複製到我的 SD 卡分區,更改 uEnv.txt 中的根路徑。進行同步並卸下 SD 卡。

一切似乎都很好。即使將刷過整個映像的 SD 卡上的引導分區與僅帶有引導分區的 SD 卡進行比較,它們也是相同的(根據fdisk

在此處輸入圖像描述

但是 Banana Pi / Pro 不會使用僅提供 u-boot 文件的啟動分區的 SD 卡啟動。

有人知道這種行為嗎?

更新:

感謝@BananaFreak,我認識到了我的錯誤。引導載入程序確實失去了,但即使遵循 lemaker 的指南,BananaPro也無法啟動。lemaker wiki 頁面上的一件奇怪的事情是第一句話說:

注意:這些說明適用於 Linux 電腦,而不是 Banana Pro/Pi!

我認為您錯過了引導載入程序。U-Boot 必須存在於您的 SD 中。看看 Banana Pi / Pro 的 SD 佈局應該如何:

http://wiki.lemaker.org/BananaPro/Pi:Setting_up_the_bootable_SD_card#SD_Card_Layout

這是我對 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 二進製文件。

引用自:https://unix.stackexchange.com/questions/205014