1: 2019-06-30 (日) 03:44:21 yuji ソース 現: 2020-12-26 (土) 15:07:35 yuji ソース
Attached file: u-boot.bin, Attached file: u-boot.bin.pi2, Attached file: u-boot.bin.pi3, Deleted an attach file: u-boot.bin.pi4_6 at 2023-05-03 (水) 12:04:38, Deleted an attach file: u-boot.bin.pi3_6 at 2023-05-03 (水) 12:04:45 at 2023-05-03 (水) 12:05:47, Deleted an attach file: u-boot.bin.pi2 at 2023-05-03 (水) 12:06:16 at 2023-05-03 (水) 12:06:43
Line 1: Line 1:
* RPi用U-Bootをビルド [#t0e53277] * RPi用U-Bootをビルド [#t0e53277]
-Raspberry PiでNetworkブートする場合,ブートローダーにU-Bootを使用する方法がある。+Raspberry PiでNetworkブートする場合,ブートローダーに[[U-Boot>http://www.denx.de/wiki/U-Boot/]]を使用する方法がある。
U-Bootをソースコードからビルドする場合,Raspberry Piでセルフビルドすると時間がかなり掛かってしまうので,PCでクロスコンパイルしてみる。 U-Bootをソースコードからビルドする場合,Raspberry Piでセルフビルドすると時間がかなり掛かってしまうので,PCでクロスコンパイルしてみる。
-Windowsマシン上でクロスコンパイラを使用しても,他のビルドツールの問題からかうまくビルド出来なかった。~ +Windowsマシン上でクロスコンパイラを使用しても,他のビルドツールの問題からかうまくビルド出来なかった。なので,Ubuntuマシンで作業を行った。
-なので,Ubuntuで作業を行った。+
* U-Bootをビルドする [#jed4f84b] * U-Bootをビルドする [#jed4f84b]
-クロスコンパイラはいくつかあるようだ。+U-Bootをビルドするためのクロスコンパイラ(GCC)はいくつかあるようだ。
パッケージでインストール出来るクロスコンパイラを使ってみた。 パッケージでインストール出来るクロスコンパイラを使ってみた。
Line 16: Line 15:
32bit ARM用のコンパイラの場合は, 32bit ARM用のコンパイラの場合は,
- $sudo apt-get install g++-arm-linux-gnueabi device-tree-compiler u-boot-tools+ $ sudo apt install g++-arm-linux-gnueabi device-tree-compiler u-boot-tools
のようにしてインストール。 のようにしてインストール。
Line 32: Line 31:
ソースコードを取得する。~ ソースコードを取得する。~
 $ mkdir ~/rpi  $ mkdir ~/rpi
- $ cd ~/work + $ cd ~/rpi 
- $ git clone https://github.com/RobertCNelson/u-boot (本家の場合:git clone git://git.denx.de/u-boot.git)+ $ git clone git://github.com/swarren/u-boot.git(本家の場合:git://git.denx.de/u-boot.git)
 $ cd ~/rpi/u-boot  $ cd ~/rpi/u-boot
-** U-Bootのビルドする。~ [#rc493954]+** U-Bootのビルド [#rc493954]
環境変数CROSS_COMPILEをセットする。 環境変数CROSS_COMPILEをセットする。
 $ export CROSS_COMPILE="arm-linux-gnueabi-"  (32bit u-boot作成の場合)  $ export CROSS_COMPILE="arm-linux-gnueabi-"  (32bit u-boot作成の場合)
Line 43: Line 42:
それと, それと,
 export USE_PRIVATE_LIBGCC=yes  export USE_PRIVATE_LIBGCC=yes
-を,しておく。これしておかないと,U-BootがRaspberry Piで起動できない。+をセットしておく。これをしないと''U-BootがRaspberry Piで動かない。''
-Raspberry Pi用のU-Bootをビルドする場合,makeに機種名を指定してビルドするようにする。~+Raspberry Pi用のU-Bootをビルドする場合,makeにモデルを指定してビルドするようにする。~
Raspberry Pi,zero用をビルドする場合は, Raspberry Pi,zero用をビルドする場合は,
Line 59: Line 58:
 $ make rpi_2_defconfig  $ make rpi_2_defconfig
 $ make all  $ make all
-とすると,Raspberry Pi2用の&ref(u-boot.bin.pi2);が作成される。+とすると,Raspberry Pi2用の&ref(u-boot.bin.pi2,u-boot.bin);が作成される。
Raspberry Pi3用をビルドする場合は,~ Raspberry Pi3用をビルドする場合は,~
Line 66: Line 65:
 $ make rpi_3_32b_defconfig  $ make rpi_3_32b_defconfig
 $ make all  $ make all
-とすると,Raspberry Pi3用の&ref(u-boot.bin.pi3);が作成される。+とすると,Raspberry Pi3用の&ref(u-boot.bin.pi3,u-boot.bin);が作成される。
-この時指定する機種は,configsフォルダに定義ファイルが準備してある。Raspberry Piシリーズだと以下のようなファイルがあった。+Raspberry Pi4用をビルドする場合は,~ 
 + $ make clean 
 + $ make distclean 
 + $ make rpi_4_32b_defconfig 
 + $ make all 
 +とすると,Raspberry Pi4用の&ref(u-boot.bin.pi4,u-boot.bin);が作成される。 
 + 
 +Raspberry Pi Zero W用をビルドする場合は, 
 + $ make clean 
 + $ make distclean 
 + $ make rpi_0_w_defconfig 
 + $ make all 
 +とすると,Raspberry Pi Zero W用の&ref(u-boot.bin.pi0w,u-boot.bin);が作成される。 
 + 
 +Raspberry Pi3(64bit)用をビルドする場合は,~ 
 + $ make clean 
 + $ make distclean 
 + $ make rpi_3_defconfig 
 + $ make all 
 +とすると,Raspberry Pi3(64bit)用の&ref(u-boot.bin.pi364,u-boot.bin);が作成される。 
 + 
 +Raspberry Pi4(64bit)用をビルドする場合は,~ 
 + $ make clean 
 + $ make distclean 
 + $ make rpi_4_defconfig 
 + $ make all 
 +とすると,Raspberry Pi4(64bit)用の&ref(u-boot.bin.pi464,u-boot.bin);が作成される。 
 + 
 +この時指定する機種は,configsフォルダに定義ファイルが準備してある。~ 
 +Raspberry Piシリーズだと以下のようなファイルがあった。~
- rpi_defconfig      Raspberry Pi, Zero~ - rpi_defconfig      Raspberry Pi, Zero~
- rpi_2_defconfig    Raspberry Pi2~ - rpi_2_defconfig    Raspberry Pi2~
- rpi_3_32b_defconfig Raspberry Pi3(32bit)~ - rpi_3_32b_defconfig Raspberry Pi3(32bit)~
- rpi_3_defconfig    Raspberry Pi3(64bit)~ - rpi_3_defconfig    Raspberry Pi3(64bit)~
 +- rpi_0_w_defconfig  Raspberry Pi zero W~
 +- rpi_4_32b_defconfig Raspberry Pi4(32bit)~
 +- rpi_4_defconfig    Raspberry Pi4(64bit)~
-* U-BootでMicroSDカードのRaspbianを起動してみる [#r82d831b] +* U-BootでSDカードのRaspbianを起動してみる [#r82d831b] 
-作成したU-Bootを使って,デフォルトのブートローダーの代わりに使ってみます。+作成したU-Bootを使って,デフォルトのブートローダーの代わりに使ってみます。(SDカードのカーネルとルートファイルシステムを使う)
-使用しているRaspbianが入ったMicroSDカードのFAT/FAT32パーテーション(/boot)に,ビルドしたu-boot.binをコピーする。~+使用しているRaspbianが入ったSDカードのFAT/FAT32パーテーション(/boot)に,ビルドしたu-boot.binをコピーする。~
/boot/config.txtで,u-boot.binを使うように変更します。 /boot/config.txtで,u-boot.binを使うように変更します。
 kernel=u-boot.bin  kernel=u-boot.bin
-これでリブートすると,U-Bootがブートローダーとして起動するようになりました。(まだリブートはしない)+これでリブートすると,U-Bootがブートローダーとして起動するようになる。
-U-Bootで起動した後,U-Bootのコマンドを自動実行するスクリプトファイルを作成します。 +U-Bootで起動した後,コマンドを自動実行するスクリプトファイルを作成します。~ 
-まず,''boot.scr''を作成する。+''boot.txt''を作成する。
 mmc dev 0  mmc dev 0
 setenv bootargs "earlyprintk console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait"  setenv bootargs "earlyprintk console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait"
Line 90: Line 121:
 fatload mmc 0:1 ${fdt_addr_r} bcm2708-rpi-b.dtb  fatload mmc 0:1 ${fdt_addr_r} bcm2708-rpi-b.dtb
 bootz ${kernel_addr_r} - ${fdt_addr_r}  bootz ${kernel_addr_r} - ${fdt_addr_r}
-boot.scrをU-Bootが認識できるファイルに変換します。~+boot.txtをU-Bootが認識できるファイルに変換します。~
これには,mkimageコマンドを使います。(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 + $ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "SD Boot" -d boot.txt boot.scr.uimg 
-boot.scr.uimgが作成されます。 +&ref(boot_sd.scr.uimg,boot.scr.uimg);が作成されます。 
-作成されたboot.scr.uimgをMicroSDカードの/bootにコピーする。+作成されたboot.scr.uimgをSDカードの/bootにコピーする。
これで,Raspberry PiをリブートするとU-Bootを使ってRaspbianが起動するようになる。 これで,Raspberry PiをリブートするとU-Bootを使ってRaspbianが起動するようになる。
 +
 +この場合のU-Bootを使ったブートは,以下のように行われる。~
 +- U-BootがSD/MicroSDカードから読み込まれ起動する~
 +- 起動されたU-BootがSD/MicroSDカードの/bootにあるKernelとDevice Treeを読み込む~
 +- Kernelを起動する~
 +ここまでがU-Bootで行われる。~
 +- その後,Kernelに渡されるオプションによりルートファイルがマウントされる~
 +- 最初のプロセスであるsystemdが起動される~


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