上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
PC/RaspberryPi/ネットワークブート/Raspberry Pi3でPXEネットワークブート
をテンプレートにして作成
資料室
PC/RaspberryPi/ネットワークブート/Raspberry Pi3でPXEネットワークブート をテンプレートにして作成
[
差分
|
バックアップ
|
リロード
]
[ ]
開始行:
* Raspberry Pi3でPXEネットワークブート
Raspberry Pi3Bでは,GPUのROMの [[1stステージ・ブートロー...
それを利用してPXEブートが出来るようにしてみる。(この機能...
PXEブートを使ってシステムをブートするには,Pi3BのROM設定...
ブートシーケンスは,~
+ 内蔵LANチップを初期化。(System RESET)
+ RPi3BからDHCP要求が行われる。(DHCP)
+ DHCPサーバからRPi3BへIPアドレス情報をおくる。(DHCP)
+ PXEサーバのアドレス要求が行われる。(ARP)
+ PXEサーバからアドレス情報をおくる。(ARP)
+ RPi3BはPXEサーバに対してPXE要求を送信し,NBP(Network B...
+ RPi3Bは,TFTPプロトコルを使用してNBPをダウンロードして...
Raspbianの/boot(kernel)にあるブートプログラムをロードす...
という手順になる。
* Raspberry Pi3Bでの準備
Pi3Bのraspbianを最新にしておく
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
# rpi-update
** PXEブートできるように設定する
PXEブートできるように,USBブートモードをイネーブルにしま...
PXEブート以外にも,USBに接続したMass Strageからブートする...
Raspberry Piでは,EthernetやUSBの機能もLANチップ経由で行...
ブート選択するモードに2つの設定ができます。
*** program_usb_boot_mode=1 の方法
/boot/config.txtの最後に,program_usb_boot_mode=1を追加す...
# echo program_usb_boot_mode=1 | tee -a /boot/config.txt
リブートして,USBブートモードに設定されたかどうかを確認す...
# vcgencmd otp_dump | grep 17:
17:3020000a
0x3020000a が出力されれば正常。
program_usb_boot_mode=1 する前は,17:1020000a になってい...
/boot/config.txtを,
program_usb_boot_mode=1
を削除して,元の状態に戻しておきます。
なお,''program_usb_boot_mode=1でUSBブートモードをイネー...
*** program_gpio_boot_mode=1 の方法
ブートに関しては,''program_gpio_boot_mode=1 という設定も...
注意することとして,program_gpio_boot_mode=1をイネーブル...
bit20の設定により,ブートデバイスの選択にGPIO22-26を使用...
また,古いPi3のfirmwareでは設定するところでバグが有り,fi...
このバグがある古いfirmwareの場合,~
# vcgencmd otp_dump | grep 17:
17:1030000a
になる。表示から,bit20=1になっていて,GPIO39-43を使用す...
ただし,このバグが有る場合でも,結果的にはprogram_gpio_bo...
firmwareが4.9.60以降の場合では,program_gpio_bootmode=1と...
17:3028000a
にOTP領域が設定されます。~
bit19=1になり,正しくprogram_gpio_bootmodeとprogram_usb_b...
program_gpio_bootmodeでのブートの流れ
+ 設定されたブート場所にあるbootcode.binのチェックを行う。~
+ 問題なければ,128Kのローカルキャッシュにロードし,実行...
+ 以下の順番でブートを試みる。~
program_gpio_bootmodeを使用して,GPIO22-26または39-43を読...
0: 無効,1:有効~
SD1,SD2,NAND,SPI,USBそれぞれのブートモードを個別に無...
'1'の場合:つまり4.7KΩでプルアップされた場合,そのブート...
primary SD~
secondary SD~
NAND~
SPI~
USB(OTG pin==0)~
hub~
MSD~
LAN951x~
dhcp/tftp boot~
この''program_gpio_bootmodeは5つのGPIOを別の用途に使えな...
* PXEブート用のサーバ側の準備
** dhcpサーバ
dhcpサーバをインストールする。
yum install dhcp
設定のサンプルがあるので,それをコピーして編集する。
# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dh...
IP アドレスはネットワーク環境に合わせる。
filename~
クライアントに読み込ませるブートローダーファイルを指定す...
指定するパスは,tftpサーバのルートに対してのパスになるの...
next-server~
filenameで指定するファイルをホストするサーバのアドレスを...
next-serverを指定しない場合,dhcpサーバのアドレスが使用さ...
dhcpサーバとtftpサーバを別にする場合などに使うのだと思う。~
/etc/dhcp/dhcpd.confの編集(RPi3Bに対して追加する)~
#code(bash,,nonumber){{
host rpi3 {
hardware ethernet B8:27:EB:XX:XX:XX; ...
fixed-address 192.168.1.xxx; ...
next-server 192.168.1.yyy; ...
option root-path "/var/exports/pi3-netboot"; ...
option vendor-class-identifier "PXEClient";
option vendor-encapsulated-options "Raspberry Pi Boot ...
}
}}
このように編集します。
dhcpサーバを起動しなおす。
# systemctl restart dhcpd
** tftpサーバ
起動ディスクイメージやブートローダを転送するため,tftpサ...
# yum install tftp-server
/etc/xinetd.d/tftpを編集する。~
disable no
にするとTFTPサービスが有効になる。
server_argsで指定しているディレクトリが TFTPサーバのルー...
server_args = -s /var/lib/tftpboot
disable = no
xinetdを再起動し,tftpサーバを有効にする。
# systemctl restart xinetd
** /var/lib/tftpboot にRaspberry Pi用ブートファイルを用意
SDカードの/boot(最初のパーテーション)にあるすべてのファ...
''/var/lib/tftpboot/pxeboot''~
/start.elf
:
(bootcode.bin以外の/boot以下のファイル全部)
:
/bootcode.bin
このようにファイルを用意する。
# mkdir /var/lib/tftpboot/pxeboot
# scp -r yuji@192.168.1.xxx:/boot/* /var/lib/tftpboot/px...
これでRPi3Bの/bootがコピーできた。
起動した後のルートファイル(NFSでマウントして使用)を指示...
''/var/lib/tftpboot/pxeboot/cmdline.txt''を編集する。~
root=/dev/nfs nfsroot=192.168.1.xxx:/var/exports/pi3-net...
** ルートファイル・システムの用意(NFS)
ルートファイルシステムはNFSサーバを用いて用意し,Rpi3Bで...
NFSサーバ側で,/etc/exportsでNFSエクスポートの設定をする。~
/etc/exports~
/var/exports/pi3-netboot *(rw,no_root_squash,no...
/var/exports/pi3-netbootには,Raspbianで言うところのmmcbl...
mmcblk0p2は,raspbianのルートファイルシステムが入っている...
*** イメージファイルからコピーする方法
現在のPi3BのMicroSDカードを,ディスクイメージにバックアッ...
backupxxxx.img
これをNFSサーバにコピーする。
NFSのexportするディレクトリを作成する。
# mkdir /var/exports/pi3-netboot
loopデバイスで空いているループバックデバイスを探す。
# losetup -a
# losetup -f
/dev/loop0
/dev/loop0が空いているのがわかる。空きが無い場合は,modpr...
# modprobe loop max_loop=32
/dev/loop0にイメージファイルを割り当てる。
# losetup /dev/loop0 /temp/backupxxxx.img
kpartx -aを使って,イメージファイルのパーティションを識別...
#kpartx -a /dev/loop0
/dev/mapperに,loop0p1とloop0p2が出来ている。
/dev/loop0p2を,/mnt/raspberrypiにマウントする。
# mount /dev/loop0p2 /mnt/raspberrypi
/mnt/raspberrypiの中身をrsyncでコピーする。
# rsync -xa /mnt/raspberrypi /var/exports/pi3-netboot
/mnt/raspberrypiをアンマウントする。
# umount /mnt/raspberrypi
/dev/loop0を削除する。
# kpartx -d /dev/loop0
# losetup -d /dev/loop0
# losetup -a
*** コピーしたRaspbianの中身を少し書き換える
MicroSDをマウントしているところを削除する。
この設定をするため,/var/exports/pi3-netboot/etc/fstab を...
''/var/exports/pi3-netboot/etc/fstab''
proc /proc proc defaults ...
#/dev/mmcblk0p1 /boot vfat defaults ...
#/dev/mmcblk0p2 / ext4 defaults,noatim...
** ネットワークブートを試す
Pi3BからSDカードを抜いて,LANケーブルだけ挿した状態でON。
終了行:
* Raspberry Pi3でPXEネットワークブート
Raspberry Pi3Bでは,GPUのROMの [[1stステージ・ブートロー...
それを利用してPXEブートが出来るようにしてみる。(この機能...
PXEブートを使ってシステムをブートするには,Pi3BのROM設定...
ブートシーケンスは,~
+ 内蔵LANチップを初期化。(System RESET)
+ RPi3BからDHCP要求が行われる。(DHCP)
+ DHCPサーバからRPi3BへIPアドレス情報をおくる。(DHCP)
+ PXEサーバのアドレス要求が行われる。(ARP)
+ PXEサーバからアドレス情報をおくる。(ARP)
+ RPi3BはPXEサーバに対してPXE要求を送信し,NBP(Network B...
+ RPi3Bは,TFTPプロトコルを使用してNBPをダウンロードして...
Raspbianの/boot(kernel)にあるブートプログラムをロードす...
という手順になる。
* Raspberry Pi3Bでの準備
Pi3Bのraspbianを最新にしておく
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
# rpi-update
** PXEブートできるように設定する
PXEブートできるように,USBブートモードをイネーブルにしま...
PXEブート以外にも,USBに接続したMass Strageからブートする...
Raspberry Piでは,EthernetやUSBの機能もLANチップ経由で行...
ブート選択するモードに2つの設定ができます。
*** program_usb_boot_mode=1 の方法
/boot/config.txtの最後に,program_usb_boot_mode=1を追加す...
# echo program_usb_boot_mode=1 | tee -a /boot/config.txt
リブートして,USBブートモードに設定されたかどうかを確認す...
# vcgencmd otp_dump | grep 17:
17:3020000a
0x3020000a が出力されれば正常。
program_usb_boot_mode=1 する前は,17:1020000a になってい...
/boot/config.txtを,
program_usb_boot_mode=1
を削除して,元の状態に戻しておきます。
なお,''program_usb_boot_mode=1でUSBブートモードをイネー...
*** program_gpio_boot_mode=1 の方法
ブートに関しては,''program_gpio_boot_mode=1 という設定も...
注意することとして,program_gpio_boot_mode=1をイネーブル...
bit20の設定により,ブートデバイスの選択にGPIO22-26を使用...
また,古いPi3のfirmwareでは設定するところでバグが有り,fi...
このバグがある古いfirmwareの場合,~
# vcgencmd otp_dump | grep 17:
17:1030000a
になる。表示から,bit20=1になっていて,GPIO39-43を使用す...
ただし,このバグが有る場合でも,結果的にはprogram_gpio_bo...
firmwareが4.9.60以降の場合では,program_gpio_bootmode=1と...
17:3028000a
にOTP領域が設定されます。~
bit19=1になり,正しくprogram_gpio_bootmodeとprogram_usb_b...
program_gpio_bootmodeでのブートの流れ
+ 設定されたブート場所にあるbootcode.binのチェックを行う。~
+ 問題なければ,128Kのローカルキャッシュにロードし,実行...
+ 以下の順番でブートを試みる。~
program_gpio_bootmodeを使用して,GPIO22-26または39-43を読...
0: 無効,1:有効~
SD1,SD2,NAND,SPI,USBそれぞれのブートモードを個別に無...
'1'の場合:つまり4.7KΩでプルアップされた場合,そのブート...
primary SD~
secondary SD~
NAND~
SPI~
USB(OTG pin==0)~
hub~
MSD~
LAN951x~
dhcp/tftp boot~
この''program_gpio_bootmodeは5つのGPIOを別の用途に使えな...
* PXEブート用のサーバ側の準備
** dhcpサーバ
dhcpサーバをインストールする。
yum install dhcp
設定のサンプルがあるので,それをコピーして編集する。
# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dh...
IP アドレスはネットワーク環境に合わせる。
filename~
クライアントに読み込ませるブートローダーファイルを指定す...
指定するパスは,tftpサーバのルートに対してのパスになるの...
next-server~
filenameで指定するファイルをホストするサーバのアドレスを...
next-serverを指定しない場合,dhcpサーバのアドレスが使用さ...
dhcpサーバとtftpサーバを別にする場合などに使うのだと思う。~
/etc/dhcp/dhcpd.confの編集(RPi3Bに対して追加する)~
#code(bash,,nonumber){{
host rpi3 {
hardware ethernet B8:27:EB:XX:XX:XX; ...
fixed-address 192.168.1.xxx; ...
next-server 192.168.1.yyy; ...
option root-path "/var/exports/pi3-netboot"; ...
option vendor-class-identifier "PXEClient";
option vendor-encapsulated-options "Raspberry Pi Boot ...
}
}}
このように編集します。
dhcpサーバを起動しなおす。
# systemctl restart dhcpd
** tftpサーバ
起動ディスクイメージやブートローダを転送するため,tftpサ...
# yum install tftp-server
/etc/xinetd.d/tftpを編集する。~
disable no
にするとTFTPサービスが有効になる。
server_argsで指定しているディレクトリが TFTPサーバのルー...
server_args = -s /var/lib/tftpboot
disable = no
xinetdを再起動し,tftpサーバを有効にする。
# systemctl restart xinetd
** /var/lib/tftpboot にRaspberry Pi用ブートファイルを用意
SDカードの/boot(最初のパーテーション)にあるすべてのファ...
''/var/lib/tftpboot/pxeboot''~
/start.elf
:
(bootcode.bin以外の/boot以下のファイル全部)
:
/bootcode.bin
このようにファイルを用意する。
# mkdir /var/lib/tftpboot/pxeboot
# scp -r yuji@192.168.1.xxx:/boot/* /var/lib/tftpboot/px...
これでRPi3Bの/bootがコピーできた。
起動した後のルートファイル(NFSでマウントして使用)を指示...
''/var/lib/tftpboot/pxeboot/cmdline.txt''を編集する。~
root=/dev/nfs nfsroot=192.168.1.xxx:/var/exports/pi3-net...
** ルートファイル・システムの用意(NFS)
ルートファイルシステムはNFSサーバを用いて用意し,Rpi3Bで...
NFSサーバ側で,/etc/exportsでNFSエクスポートの設定をする。~
/etc/exports~
/var/exports/pi3-netboot *(rw,no_root_squash,no...
/var/exports/pi3-netbootには,Raspbianで言うところのmmcbl...
mmcblk0p2は,raspbianのルートファイルシステムが入っている...
*** イメージファイルからコピーする方法
現在のPi3BのMicroSDカードを,ディスクイメージにバックアッ...
backupxxxx.img
これをNFSサーバにコピーする。
NFSのexportするディレクトリを作成する。
# mkdir /var/exports/pi3-netboot
loopデバイスで空いているループバックデバイスを探す。
# losetup -a
# losetup -f
/dev/loop0
/dev/loop0が空いているのがわかる。空きが無い場合は,modpr...
# modprobe loop max_loop=32
/dev/loop0にイメージファイルを割り当てる。
# losetup /dev/loop0 /temp/backupxxxx.img
kpartx -aを使って,イメージファイルのパーティションを識別...
#kpartx -a /dev/loop0
/dev/mapperに,loop0p1とloop0p2が出来ている。
/dev/loop0p2を,/mnt/raspberrypiにマウントする。
# mount /dev/loop0p2 /mnt/raspberrypi
/mnt/raspberrypiの中身をrsyncでコピーする。
# rsync -xa /mnt/raspberrypi /var/exports/pi3-netboot
/mnt/raspberrypiをアンマウントする。
# umount /mnt/raspberrypi
/dev/loop0を削除する。
# kpartx -d /dev/loop0
# losetup -d /dev/loop0
# losetup -a
*** コピーしたRaspbianの中身を少し書き換える
MicroSDをマウントしているところを削除する。
この設定をするため,/var/exports/pi3-netboot/etc/fstab を...
''/var/exports/pi3-netboot/etc/fstab''
proc /proc proc defaults ...
#/dev/mmcblk0p1 /boot vfat defaults ...
#/dev/mmcblk0p2 / ext4 defaults,noatim...
** ネットワークブートを試す
Pi3BからSDカードを抜いて,LANケーブルだけ挿した状態でON。
ページ名:
Counter: 0, today: 0, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
フォーラム
お問い合わせ