1: 2019-06-30 (日) 03:44:21 yuji ソース
Line 1: Line 1:
 +* RPi用U-Bootをビルド [#t0e53277]
 +Raspberry PiでNetworkブートする場合,ブートローダーにU-Bootを使用する方法がある。
 +U-Bootをソースコードからビルドする場合,Raspberry Piでセルフビルドすると時間がかなり掛かってしまうので,PCでクロスコンパイルしてみる。
 +
 +Windowsマシン上でクロスコンパイラを使用しても,他のビルドツールの問題からかうまくビルド出来なかった。~
 +なので,Ubuntuで作業を行った。
 +
 +* U-Bootをビルドする [#jed4f84b]
 +クロスコンパイラはいくつかあるようだ。
 +
 +パッケージでインストール出来るクロスコンパイラを使ってみた。
 +
 +** クロスコンパイラのインストール [#t53fd735]
 +ARM用クロスコンパイラを以下のようにしてインストールした。~
 +
 +32bit ARM用のコンパイラの場合は,
 + $sudo apt-get install g++-arm-linux-gnueabi device-tree-compiler u-boot-tools
 +のようにしてインストール。
 +
 +64bit ARM用コンパイラの場合は,
 + $ sudo apt install g++-aarch64-linux-gnu device-tree-compiler u-boot-tools
 +のようにしてインストール。
 +
 +両方インストールしても切り替えて使用できる。
 +
 +インストール出来ているかの確認。(32bitコンパイラの場合)
 + $ arm-linux-gnueabi-gcc --version
 +として,バージョン表示されればインストールは出来ている。
 +
 +** U-Bootのソースコード取得 [#pf077892]
 +ソースコードを取得する。~
 + $ mkdir ~/rpi
 + $ cd ~/work
 + $ git clone https://github.com/RobertCNelson/u-boot (本家の場合:git clone git://git.denx.de/u-boot.git)
 + $ cd ~/rpi/u-boot
 +
 +** U-Bootのビルドする。~ [#rc493954]
 +環境変数CROSS_COMPILEをセットする。
 + $ export CROSS_COMPILE="arm-linux-gnueabi-"  (32bit u-boot作成の場合)
 +   or
 + $ export CROSS_COMPILE="aarch64-linux-gnu-"  (64bit u-boot作成の場合)
 +それと,
 + export USE_PRIVATE_LIBGCC=yes
 +を,しておく。これしておかないと,U-BootがRaspberry Piで起動できない。
 +
 +Raspberry Pi用のU-Bootをビルドする場合,makeに機種名を指定してビルドするようにする。~
 +
 +Raspberry Pi,zero用をビルドする場合は,
 + $ make clean
 + $ make distclean
 + $ make rpi_defconfig
 + $ make all
 +とすると,Raspberry Pi,zero用の&ref(u-boot.bin);が作成される。
 +
 +Raspberry Pi2用をビルドする場合は,
 + $ make clean
 + $ make distclean
 + $ make rpi_2_defconfig
 + $ make all
 +とすると,Raspberry Pi2用の&ref(u-boot.bin.pi2);が作成される。
 +
 +Raspberry Pi3用をビルドする場合は,~
 + $ make clean
 + $ make distclean
 + $ make rpi_3_32b_defconfig
 + $ make all
 +とすると,Raspberry Pi3用の&ref(u-boot.bin.pi3);が作成される。
 +
 +この時指定する機種は,configsフォルダに定義ファイルが準備してある。Raspberry Piシリーズだと以下のようなファイルがあった。
 +- rpi_defconfig      Raspberry Pi, Zero~
 +- rpi_2_defconfig    Raspberry Pi2~
 +- rpi_3_32b_defconfig Raspberry Pi3(32bit)~
 +- rpi_3_defconfig    Raspberry Pi3(64bit)~
 +
 +* U-BootでMicroSDカードのRaspbianを起動してみる [#r82d831b]
 +作成したU-Bootを使って,デフォルトのブートローダーの代わりに使ってみます。
 +
 +使用しているRaspbianが入ったMicroSDカードのFAT/FAT32パーテーション(/boot)に,ビルドしたu-boot.binをコピーする。~
 +
 +/boot/config.txtで,u-boot.binを使うように変更します。
 + kernel=u-boot.bin
 +これでリブートすると,U-Bootがブートローダーとして起動するようになりました。(まだリブートはしない)
 +
 +U-Bootで起動した後,U-Bootのコマンドを自動実行するスクリプトファイルを作成します。
 +まず,''boot.scr''を作成する。
 + mmc dev 0
 + setenv bootargs "earlyprintk console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait"
 + fatload mmc 0:1 ${kernel_addr_r} kernel.img
 + fatload mmc 0:1 ${fdt_addr_r} bcm2708-rpi-b.dtb
 + bootz ${kernel_addr_r} - ${fdt_addr_r}
 +boot.scrをU-Bootが認識できるファイルに変換します。~
 +これには,mkimageコマンドを使います。(U-Bootをビルドした時にも,このコマンドもビルドされている。)~
 + $ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "MMC Boot" -d boot.scr boot.scr.uimg
 +boot.scr.uimgが作成されます。
 +作成されたboot.scr.uimgをMicroSDカードの/bootにコピーする。
 +
 +これで,Raspberry PiをリブートするとU-Bootを使ってRaspbianが起動するようになる。


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1373, today: 1, yesterday: 0