ようこそゲストさん

無能日記

2011/06/11(土) SEILx86が起動するUSBメモリを作ってみた

はてブ 2011/06/11 17:47 R&D (SEIL)poti
SEILx86のブートディスクイメージをddで書き込むと32Mになり、
ファイルシステムがufsなのでwindowsでUSBメモリが使えないのでどうにかする。
今回は、128MのUSBメモリと4GのUSBメモリにインストールしてみた

先に結果を言っておくと
  • windows 7でDISKとして見えることを確認
  • 手持ちの3台のPCでSEILx86の起動のみを確認 (機能の動作確認していない)
    • M2N-VM DH + Athlon 64 X2 5600+
    • let's note CF-Y2
    • atom D510 atom 230
      • D510 atom 230はBIOSのUSB mass storage emulation typeのところをfixed diskにすること

ただし、必ず動作を保証するものではないので、あしからず。

補足:
出来たUSBメモリをLINUX上で
    # dd if=/dev/sdb of=SEILx86bootdisk.img bs=512 
    # qemu -hda SEILx86bootdisk.img -boot c -m 512 -curses
として、qemuで起動する事を確認
次はKVMかな

手順

0. 環境設定
WINDOWS上のVMware serverにnetbsd5.1をインストール。
さらに、VMwareコンソールは使いにくいのでteratermでsshでログインしてリモートから作業する
      // NetBSD環境設定例
      // # vi /etc/rc.conf
      // sshd=YES
      // ifconfig_pcn0="inet 10.0.0.120 netmask 255.255.255.0"
      // defaultroute="10.0.0.1"
      // hostname="NetBSD"
      // # vi /etc/resolv.conf
      // nameserver 10.0.0.20
      // # /etc/rc.d/network restart
      // # /etc/rc.d/sshd start
      // # useradd -m -g wheel user
      // # passwd user      
1. SEILx86のファイルを取り出す作業
seilx86-180-bootdisk.zipを解凍してできたファイルをNetBSDへコピー
コピーにはwinscpをつかった
  # fdisk -r ./seilx86-180-bootdisk/bootdisk.img
  (これで32セクタから始まっていることがわかるので)
  # dd if=./seilx86-180-bootdisk/bootdisk.img of=./seilx86-180-bootdisk/bootdisk.img.strip bs=512 skip=32
  # vnconfig /dev/vnd1d ./seilx86-180-bootdisk/bootdisk.img.strip
  # mount /dev/vnd1d /mnt
  # cp -r /mnt ./
  # umount /mnt
  # vnconfig -u /dev/vnd1d 
2. 正しいジオメトリ情報がほしいので、windowsでUSBメモリのFAT(規定値)フォーマットを行う
      // もし、USBメモリにすでにseilx86のイメージを書き込んでしまっていたら
      // おそらく32Mに見えているはずなので、NetBSD環境上で、
      // # dd if=/dev/zero of=/dev/sd1d count=2048
      // をしてなかったことにしておく (sd1dのdはディスク全体を示している)
      // また、 windowsとvmware上のゲストOSへのUSBの接続切り替えは
      // vmware serverの管理インターフェイスからできる
3. ジオメトリ確認
  # fdisk /dev/rsd1
  fdisk: Cannot determine the number of heads
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  BIOS disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  Partition table:
  0: unknown (sysid 114)
      start 778135908, size 1141509631 (557378 MB, Cyls 1519796/11/5-3749307/11/3), flag 0x6f
          PBR is not bootable: Sector 778135908 is unreadable (Invalid argument)
  1: Novell Netware 3.xx (sysid 101)
      start 168689522, size 1936028240 (945326 MB, Cyls 329471/11/19-4110776/14/2), flag 0x69
          PBR is not bootable: Sector 168689522 is unreadable (Invalid argument)
  2: unknown (sysid 121)
      start 1869881465, size 1936028192 (945326 MB, Cyls 3652112/3/26-7433417/4/25), flag 0x73
          PBR is not bootable: Sector 1869881465 is unreadable (Invalid argument)
  3: Type 7??? - LBA (sysid 13)
      start 0, size 3637226496 (1775990 MB, Cyls 0-7103957), flag 0x74
  No active partition.
  Drive serial number: 1864397675 (0x6f20736b)
ジオメトリ情報を確認しておく
NetBSDがおもってるのとBIOSがおもってるのが一致していればなんの問題もない

4. パーティション作成
  # fdisk -u /dev/rsd1 
FAT16パーティションを一つ作る
パーティションを消す場合はsysidに0を指定する
sysidは6が正しいと思うけどあえて14にしてみた

5. 作成したパーティションをアクティブにする
  # fdisk -a /dev/rsd1 
6. MBRを書き込む
  # fdisk -i /dev/rsd1
7. パーティション情報の確認
  # fdisk /dev/rsd1
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  BIOS disk geometry:
  cylinders: 481, heads: 16, sectors/track: 32 (512 sectors/cylinder)
  total sectors: 246272

  Partition table:
  0: DOS (16-bit FAT) - LBA (sysid 14)
      start 32, size 246240 (120 MB, Cyls 0-480), Active
          PBR is not bootable: All bytes are identical (0x00)
  1: <UNUSED>
  2: <UNUSED>
  3: <UNUSED>
  Bootselector disabled.
  First active partition: 0
  Drive serial number: 1864397675 (0x6f20736b)
こんな感じにした

8. ディスクラベル情報を設定
  # disklabel -iI /dev/rsd1
Iでジオメトリ情報をBIOSのもに修正する
ディスクラベル情報を書き換える
必ずaがSEILx86の領域になるようにすること

9. ディスクラベル情報の確認
  # disklabel -r /dev/rsd1
  # /dev/rsd1d:
  type: SCSI
  disk: USB DISK 2.0
  label: fictitious
  flags: removable
  bytes/sector: 512
  sectors/track: 32
  tracks/cylinder: 16
  sectors/cylinder: 512
  cylinders: 481
  total sectors: 246272
  rpm: 3600
  interleave: 1
  trackskew: 0
  cylinderskew: 0
  headswitch: 0           # microseconds
  track-to-track seek: 0  # microseconds
  drivedata: 0

  4 partitions:
  #        size    offset     fstype [fsize bsize cpg/sgs]
   a:    246240        32      MSDOS                     # (Cyl.      0*-    480)
   d:    246272         0     unused      0     0        # (Cyl.      0 -    480)
こんな感じにした

10. ファイルシステムを作って取り出したファイルを書き込む
  # newfs_msdos -F 16 -r 16 /dev/rsd1a
  # mount  -t msdos /dev/sd1a /mnt
  # cp -r ./mnt/* /mnt/
  # umount /mnt
  # installboot -v -o timeout=10 -o speed=115200 /dev/rsd1a /usr/mdec/bootxx_msdos
  timeoutやスピード設定は環境や好みに合わせる
11. 起動

起動:
SEILx86を起動するPCにUSBメモリを挿してから起動して、
BIOSで挿したUSBメモリでブートできるように設定してから再起動する
もし、BIOSにUSB mass storage emulation typeの設定がある場合はfixed diskにして起動する

手順 USBメモリ4G版

0. 作業環境やSEILx86のファイルを取り出す作業を行う

1. 正しいジオメトリ情報がほしいので、windowsでUSBメモリのFAT32(規定値)フォーマットを行う

2. ジオメトリ情報を確認
  #  fdisk /dev/rsd1
  fdisk: Cannot determine the number of heads
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 3792, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
  total sectors: 7766016

  BIOS disk geometry:
  cylinders: 483, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
  total sectors: 7766016

  Partition table:
  0: unknown (sysid 114)
      start 778135908, size 1141509631 (557378 MB, Cyls 48436/183/40-119492/104/7), flag 0x6f
          PBR is not bootable: Sector 778135908 is unreadable (Invalid argument)
  1: Novell Netware 3.xx (sysid 101)
      start 168689522, size 1936028240 (945326 MB, Cyls 10500/111/30-131012/158/28), flag 0x69
          PBR is not bootable: Sector 168689522 is unreadable (Invalid argument)
  2: unknown (sysid 121)
      start 1869881465, size 1936028192 (945326 MB, Cyls 116394/188/12-236906/234/25), flag 0x73
          PBR is not bootable: Sector 1869881465 is unreadable (Invalid argument)
  3: Type 7??? - LBA (sysid 13)
      start 2885681152, size 55499 (27 MB, Cyls 179625/87/47-179628/203/42), flag 0x74
          PBR is not bootable: Sector 2885681152 is unreadable (Invalid argument)
  No active partition.
  Drive serial number: 1864397675 (0x6f20736b)
  ジオメトリがちぐはぐしているが、BIOSのものを信じる
  この時点でsd0: fabricating a giometryは覚悟
3. パーティションの作成
  # fdisk -u /dev/rsd1
FAT32パーティションを1つ
sysidは12にしてみた

4. パーティションをアクティブにする
  # fdisk -a /dev/rsd1 
5. MBRをインストールする
  # fdisk -i /dev/rsd1
6. パーティション情報の確認
  # fdisk  /dev/rsd1
  Disk: /dev/rsd1d
  NetBSD disklabel disk geometry:
  cylinders: 3792, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
  total sectors: 7766016

  BIOS disk geometry:
  cylinders: 484, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
  total sectors: 7766016

  Partition table:
  0: Primary DOS with 32 bit FAT - LBA (sysid 12)
      start 63, size 7765953 (3792 MB, Cyls 0-483/105/6), Active
          PBR is not bootable: All bytes are identical (0x00)
  1: <UNUSED>
  2: <UNUSED>
  3: <UNUSED>
  Bootselector disabled.
  First active partition: 0
  Drive serial number: 1864397675 (0x6f20736b) 
7. ディスクラベルを情報を設定
  # disklabel -iI /dev/rsd1
Iでジオメトリ情報をBIOSのもに修正する
ディスクラベル情報を書き換える
必ずaがSEILx86の領域になるようにすること

8. ディスクラベル情報の確認
  # disklabel -r /dev/rsd1
  # /dev/rsd1d:
  type: SCSI
  disk: USB Flash Disk
  label: fictitious
  flags: removable
  bytes/sector: 512
  sectors/track: 63
  tracks/cylinder: 255
  sectors/cylinder: 16065
  cylinders: 484
  total sectors: 7766016
  rpm: 3600
  interleave: 1
  trackskew: 0
  cylinderskew: 0
  headswitch: 0           # microseconds
  track-to-track seek: 0  # microseconds
  drivedata: 0

  4 partitions:
  #        size    offset     fstype [fsize bsize cpg/sgs]
   a:   7765953        63      MSDOS                     # (Cyl.      0*-    483*)
   d:   7766016         0     unused      0     0        # (Cyl.      0 -    483*)
9. ファイルシステムを作って取り出したファイルを書き込む
  # newfs_msdos -F 16 -r 16 /dev/rsd1a
  # mount  -t msdos /dev/sd1a /mnt
  # cp -r ./mnt/* /mnt/
  # umount /mnt
  # installboot -v -o timeout=10 -o speed=115200 /dev/rsd1a /usr/mdec/bootxx_msdos
  timeoutやスピード設定は環境や好みに合わせる
11. 起動
SEILx86を起動するPCにUSBメモリを挿してから起動して、
BIOSで挿したUSBメモリでブートできるように設定してから再起動する
もし、BIOSにUSB mass storage emulation typeの設定がある場合はfixed diskにして起動する
sd0: fabricating a geometryという警告がたくさん出ているが、一応起動しているようだ...

とりあえず、すべてのUSBメモリにSEILx86を仕込んでしまえばいいと思うよ!