[翻譯完成] 樹莓派U-Boot

概述

Das U-Boot, 一般叫作U-Boot, 嵌入式系統的經常使用bootloader. U-Boot容許使用SD卡上單個指定文件的內容做爲額外的啓動參數, 爲樹莓派增長很多靈活性. linux

本文將詳細介紹如何讓U-Boot運行在樹莓派上, 以及經過SD卡或者從網絡走TFTP服務器來啓動鏡像. git

準備U-Boot鏡像文件

得到源碼

如今U-Boot的主分支還不支持樹莓派. 咱們須要從GitHub上Gonzoua的分支獲取代碼. 請注意顯示爲默認的'master'分支是未修改的U-Boot代碼 - 咱們須要用'rpi'分支獲取正確的代碼. github

你能夠經過此連接下載源碼的壓縮包. 服務器

編譯源碼

首先, 咱們須要導出交叉編譯器的前綴來指定樹莓派. 若是你的gcc庫爲arm-none-linux-gnueabi-gcc, 運行命令: 網絡

CROSS_COMPILE=arm-none-linux-gnueabi-
export CROSS_COMPILE

而後在U-Boot源碼目錄中, 運行下列命令開始編譯: 工具

make rpi_b

整個編譯過程應該花不了幾分鐘時間. 測試

編譯鏡像文件

不知道如何編譯內核的同窗請移步內核編譯. u-boot.bin文件應該用做輸入文件. spa

在編譯完成後, 把kernel.img文件移動到SD卡上. 最好把鏡像文件名改爲相似uboot.img, 和實際內核鏡像區分開來. 在config.txt文件中加上: .net

kernel=uboot.img

測試鏡像

樹莓派將會使用新的U-Boot鏡像啓動. 在屏幕上應該會顯示U-Boot加載, 若是你連上了串口還應該有其輸出. 命令行

編譯U-Boot鏡像

請確認獲取了內核的源碼, 而且對內核編譯過程比較熟悉. 有內核源碼就能夠編譯U-Boot鏡像了, 相比而言編譯內核鏡像還容易些. 首先, 咱們要把U-Boot工具mkimage放到能被編譯進程找到的地方, 把工具複製到交叉編譯器的bin目錄下. 而後在U-Boot源碼目錄執行命令:(把路徑和前綴替換爲實際交叉編譯器的相應內容)

cp tools/mkimage <your_cross_compiler_path>/bin/arm-none-linux-gnueabi-mkimage

在內核源碼目錄, 開始編譯U-Boot鏡像:

make uImage

生成的啓動鏡像文件在arch/arm/boot/uImage.

U-Boot引導選項

從SD卡啓動

從SD卡啓動時無需修改config.txt即可以使用多內核鏡像. 把uImage文件放到SD卡上, 而後啓動. 按任意鍵進入命令行, 輸入如下命令:

mmc rescan
fatload mmc 0:1 ${loadaddr} <your_uImage_file>
bootm

經過網絡走TFTP服務器啓動

咱們須要有一個配置好的TFTP服務器. 將uImage文件放到TFTP根目錄中, 並確認有相應文件權限 (容許任何人進行讀取 - 若是不肯定, 執行一次chmod a+r uImage).

用DHCP啓動前, 請先確認DHCP已經設置過next-server和filename參數. 接着啓動樹莓派, 按任意鍵進入命令行, 輸入如下命令:

usb start
dhcp
bootm

用固定IP啓動:

usb start
setenv serverip <tftp_server_ip>
setenv ipaddr <a_spare_ip_address>
tftpboot uImage
bootm

U-Boot腳本文件

上一節的內容能夠寫進一個文本文件, 而後編譯到U-Boot腳本文件中, 以便在啓動時自動執行. 用下面的命令來生成腳本:

arm-none-linux-gnueabi-mkimage -A arm -O linux -T script -C none -d <your_script_text_file> boot.scr

把boot.scr文件放在SD卡上, 在樹莓派啓動的時候會自動使用.

相關文章
相關標籤/搜索