Slide 1

Slide 1 text

NetBSDておくれLive Image UEFI対応 設計仕様検討メモ OSC2014北海道スライド流用適当メモ Izumi Tsutsui [email protected] twitter: @tsutsuii mastodon: @[email protected] 2019/2/25版

Slide 2

Slide 2 text

関連資料 NetBSDておくれ Live Image http://www.ceres.dti.ne.jp/tsutsui/netbsd/liveimage/ https://github.com/tsutsui/netbsd-teokureliveimage github netbsd-teokureliveimage issue #12 https://github.com/tsutsui/netbsd-teokureliveimage/issues/12 OSC2014北海道セミナー NetBSDておくれ Live Imageの紹介と解説 https://speakerdeck.com/tsutsui/osc2014do-netbsd-teokure-liveimage NetBSD Wiki / Installation on UEFI systems https://wiki.netbsd.org/Installation_on_UEFI_systems/

Slide 3

Slide 3 text

USE_MBR=no, USE_GPT=no の場合 swap パーティション NetBSD root パーティション (FFS) disklabel bootloader ディスク全体を NetBSDで使用する FFS の先頭 8KB (ffsv1) or 32KB (ffsv2) は空き領域なので そこに disklabel と bootloader が入る pmax, sparc, sun3, vax 等 BSD系UNIXはこの構成

Slide 4

Slide 4 text

ffsパーティション作成 ・makefs(8) ファイル一式とパーミッション設定 ・disklabel(8) ・installboot(8) それぞれイメージ先頭に書き込み NetBSD root パーティション (FFS) disklabel bootloader

Slide 5

Slide 5 text

swapパーティション作成 swap パーティション ・dd(1) で作成 % dd if=/dev/zero \ of=image.swap \ count=1048576

Slide 6

Slide 6 text

イメージ合成 ・cat(1) で合体 % cat \ image.root \ image.swap \ > liveimage.fs NetBSD root パーティション (FFS) swap パーティション disklabel bootloader

Slide 7

Slide 7 text

USE_MBR=YES の場合 MBR 空き NetBSD root パーティション (FFS) swap パーティション disklabel bootloader fdiskパーティションテーブル MBR は先頭1セクタのみ 残りは歴史的シリンダ境界 (63セクタ or 1MB) 確保用 NetBSDパーティション  いわゆる ID 169 (0xf9) ディスク全体に対して NetBSDが使用する領域を指定 NetBSD領域内のパーティションは disklabel で指定 FFS の先頭 8KB (ffsv1) or 32KB (ffsv2) は空き領域なので そこに disklabel と bootloader が入る

Slide 8

Slide 8 text

fdiskパーティションテーブル作成 MBR 空き ・fdisk(8) コマンド % fdisk -f -u \ -b 487/255/63 -0 -a \ -s 169/2048/7821312 \ -i -c usr/mdec/mbr \ -F image.mbr 後ろのいらない部分は dd(1) で削除

Slide 9

Slide 9 text

ffsパーティション作成 NetBSD root パーティション (FFS) disklabel bootloader ・makefs(8) ファイル一式とパーミッション設定 ・disklabel(8) ・installboot(8) それぞれイメージ先頭に書き込み

Slide 10

Slide 10 text

swapパーティション作成 swap パーティション ・dd(1) で作成 % dd if=/dev/zero \ of=image.swap \ count=1048576

Slide 11

Slide 11 text

イメージ合成 ・cat(1) で合体 % cat \ image.mbr \ image.root \ image.swap \ > liveimage.fs MBR 空き NetBSD root パーティション (FFS) swap パーティション disklabel bootloader

Slide 12

Slide 12 text

USE_GPT=YES の場合 MBR (PBR) 空き EFI system パーティション (FAT16 or FAT32) NetBSD root パーティション (FFS) swap パーティション MBR 先頭1セクタは互換用 NetBSDパーティションには bootloader も disklabel もなし カーネルが GPT を解釈してパーティション毎に dk0 dk1 dk2 dk3 dk4 ... とデバイス名割り当て bootloader (file) 空き Primary GPT Header Primary GPT Table Secondary GPT Header Secondary GPT Table Primary GPT Header: 1セクタ Primary GPT Table: 32セクタ ファイルシステム境界確保 (1MB区切り等) Secondary GPT Table: 32セクタ Secondary GPT Header: 1セクタ /EFI/{vendor}/ 以下にブートファイルを配置 UEFI の NVRAM に起動ファイルを登録 /EFI/boot/bootx64.efi はフォールバック用 ファイルシステム境界確保 (1MB区切り等)

Slide 13

Slide 13 text

GPT 作成 MBR (PBR) 空き Primary GPT Header Primary GPT Table ・gpt(8) コマンド % gpt image.gpt create % gpt image.gpt add -a 1m \ -s 65536 -t efi \ -l "EFI system" % gpt image.gpt add -a 1m \ -s 1769472 -t ffs % gpt image.gpt add -a 1m \ -s 262144 -t swap イメージ先頭に Primary イメージ末尾に Secondary が作られる(らしい) https://ja.wikipedia.org/wiki/GUIDパーティションテーブル Secondary GPT Header Secondary GPT Table

Slide 14

Slide 14 text

UEFI FATパーティション作成 ・makefs(8) makefs -t msdos -o F=32 等で作成 用意するファイルはブートローダーのみ ブートローダーは通常ファイルとして配置 /EFI/{vendor}/foobootx64.efi /EFI/boot/bootx64.efi 等 EFI system パーティション (FAT16 or FAT32) bootloader (file)

Slide 15

Slide 15 text

ffsパーティション作成 ・makefs(8) ファイル一式とパーミッション設定 ・disklabel(8) は不要 ・installboot(8) も不要 NetBSD root パーティション (FFS)

Slide 16

Slide 16 text

swapパーティション作成 ・dd(1) で作成 % dd if=/dev/zero \ of=image.swap \ count=1048576 swap パーティション

Slide 17

Slide 17 text

イメージ合成 ・dd(1) と cat(1) で切り貼り % dd if=image.gpt skip=xxxx \ count=2048 of=image.secgpt % dd if=image.gpt count=xxx | \ cat - image.efi \ image.root image.swap \ image.secgpt > liveimage.fs 以下も必要? (要確認) % gpt liveimage.fs biosboot -i 2 \ -c /usr/mdec/gptmbr.bin % gpt liveimage.fs set -a bootme -i 2 MBR (PBR) 空き EFI system パーティション (FAT16 or FAT32) NetBSD root パーティション (FFS) swap パーティション bootloader (file) 空き Primary GPT Header Primary GPT Table Secondary GPT Header Secondary GPT Table

Slide 18

Slide 18 text

おまけ: hpcmips, RPI 等 MBR 空き NetBSD root パーティション (FFS) FDISKパーティションテーブル (ローダーは無い) NetBSDパーティション いわゆる ID 169 (0xf9) ディスク全体に対してNetBSDが使用する領域を指定 NetBSD領域内のパーティションは disklabel で指定 FFS の先頭 8KB (ffsv1) or 32KB (ffsv2) は空き領域 なのでそこに disklabel が入る (bootloader は無い) ファイルシステム境界確保 (1MB区切り) hpcmips, hpcsh, hpcarm: hpcboot.exe のブートローダー netbsd カーネル RaspberryPi: kernel.img, kernel7.img 等のカーネル config.txt, cmdline.txt 等の設定ファイル https://ch.nicovideo.jp/tsutsui/blomaga/ar1514448 参照 起動用 FATパーティション bootloader (file) 起動用カーネル (file) swap パーティション disklabel