如何手動為香蕉派創建啟動 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/boot
withsudo 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 介面。
之後,您可以打開該串列設備以研究啟動過程(請注意,不要將 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 二進製文件。