Das U-Boot, 一般叫作U-Boot, 嵌入式系統的經常使用bootloader. U-Boot容許使用SD卡上單個指定文件的內容做爲額外的啓動參數, 爲樹莓派增長很多靈活性. linux
本文將詳細介紹如何讓U-Boot運行在樹莓派上, 以及經過SD卡或者從網絡走TFTP服務器來啓動鏡像. git
如今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工具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.
從SD卡啓動時無需修改config.txt即可以使用多內核鏡像. 把uImage文件放到SD卡上, 而後啓動. 按任意鍵進入命令行, 輸入如下命令:
mmc rescan fatload mmc 0:1 ${loadaddr} <your_uImage_file> bootm
咱們須要有一個配置好的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腳本文件中, 以便在啓動時自動執行. 用下面的命令來生成腳本:
arm-none-linux-gnueabi-mkimage -A arm -O linux -T script -C none -d <your_script_text_file> boot.scr
把boot.scr文件放在SD卡上, 在樹莓派啓動的時候會自動使用.