Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

NetBSDておくれLive Image UEFI対応 設計仕様検討メモ / NetBSD U...

NetBSDておくれLive Image UEFI対応 設計仕様検討メモ / NetBSD UEFI Live Image

NetBSD ておくれ Live Image の UEFI 対応に向けての検討メモです。プレゼン発表した資料ではありませんが、 OSC2014北海道のプレゼン資料を流用して作ったので、とりあえずこちらにアップ。
※2019/2/26 修正版に差し替えました
訂正1: Secondary GPT は Header が末尾に置かれて Table がその前に配置される
訂正2: GPT 時の NetBSD デバイス名は dk1 からではなく dk0 から振られる
他 いくつか記載修正

Izumi Tsutsui

February 24, 2019
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. 関連資料 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/
  2. 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はこの構成
  3. イメージ合成 ・cat(1) で合体 % cat \ image.root \ image.swap \

    > liveimage.fs NetBSD root パーティション (FFS) swap パーティション disklabel bootloader
  4. 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 が入る
  5. 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) で削除
  6. イメージ合成 ・cat(1) で合体 % cat \ image.mbr \ image.root \

    image.swap \ > liveimage.fs MBR 空き NetBSD root パーティション (FFS) swap パーティション disklabel bootloader
  7. 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区切り等)
  8. 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
  9. 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)
  10. イメージ合成 ・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
  11. おまけ: 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