*できるかな? … 成功![#p8b5474c]
-''概要''~
USB接続した外部ストレージをルートデバイスとして起動する。~
~
-''利点''~
様々なディストリビューション等を、USBストレージ上で手軽に試行することができる。~
~
-''実験構成''~
以下の物でUSBストレージを構成して、起動実験を試みた。~
--BUFFALO社MCR-CF-LT/U2~
USB2.0&USB1.1対応カードリーダー/ライター スタンドレスタイプ コンパクトフラッシュ専用~
&ref(MCRCFLTU2.jpg,nolink);~
--HGST社MicroDrive~
&ref(MicroDrive.jpg,nolink);~

--これらもルートデバイスにすることが可能と思われる。~
---USB接続型HDD
---USBメモリスティック
*カーネルの準備 [#e5b3a182]
-''ramdisk.gzの作成''~
initrd用のRAM DISKを作成します。~
#pre{{
landisk:/share/src/kernel# dd if=/dev/zero of=ramdisk bs=1024 count=2048
landisk:/share/src/kernel# mke2fs ramdisk
landisk:/share/src/kernel# mount -o loop ramdisk /mnt
}}
/mnt にinitrdの起動システムを構築します。~
/mnt/bin下のコマンドは全てbusyboxを使用しました。~
#pre{{
landisk:/share/src/kernel# find /mnt
/mnt
/mnt/lost+found
/mnt/bin
/mnt/bin/cp
/mnt/bin/ln
/mnt/bin/ls
/mnt/bin/mv
/mnt/bin/rm
/mnt/bin/sh
/mnt/bin/ash
/mnt/bin/cat
/mnt/bin/env
/mnt/bin/pwd
/mnt/bin/sed
/mnt/bin/yes
/mnt/bin/echo
/mnt/bin/expr
/mnt/bin/test
/mnt/bin/chgrp
/mnt/bin/chmod
/mnt/bin/chown
/mnt/bin/lsmod
/mnt/bin/mkdir
/mnt/bin/mknod
/mnt/bin/mount
/mnt/bin/rmmod
/mnt/bin/sleep
/mnt/bin/touch
/mnt/bin/modprobe
/mnt/bin/insmod
/mnt/bin/umount
/mnt/bin/busybox
/mnt/busybox.config
/mnt/dev
/mnt/dev/console
/mnt/dev/hda
/mnt/dev/hda1
/mnt/dev/hda2
/mnt/dev/hda3
/mnt/dev/hda4
/mnt/dev/hda5
/mnt/dev/hdb
/mnt/dev/hdb1
/mnt/dev/hdb2
/mnt/dev/hdb3
/mnt/dev/hdb4
/mnt/dev/hdb5
/mnt/dev/sda
/mnt/dev/sda1
/mnt/dev/sda2
/mnt/dev/sda3
/mnt/dev/sda4
/mnt/dev/sda5
/mnt/dev/sdb
/mnt/dev/sdb1
/mnt/dev/sdb2
/mnt/dev/sdb3
/mnt/dev/sdb4
/mnt/dev/sdb5
/mnt/dev/ttySC0
/mnt/dev/ttySC1
/mnt/lib
/mnt/lib/modules
/mnt/lib/modules/ehci-hcd.ko
/mnt/lib/modules/ohci-hcd.ko
/mnt/lib/modules/usb-storage.ko
/mnt/lib/modules/usbcore.ko
/mnt/linuxrc
/mnt/proc
}}
/linuxrc はこの様な物を準備しました。~
usb-storage.koをinsmodしてから、デバイスが認識されるまで、sleepで待たせています。~
これを行わないと、すぐさまマウントシーケンスに突入してしまい、ハングアップします。~
USB1.1のデバイスを接続する場合は、もう少し待ったほうが良いかもしれません。~
~
&color(red){補足:赤文字の部分は [[FireWireのデバイスからLinuxをブート:http://www-6.ibm.com/jp/developerworks/linux/040820/j_l-fireboot.html]] を参考にした。};~
&color(red){SCSIバス(エミュレーション)のスキャンを行っているらしい。};~
&color(red){成功する時と失敗する時があって、なんか不安定なんだよな〜!};~
#pre{{
#!/bin/sh

export PATH=/bin
mount -nt proc none /proc

insmod /lib/modules/usbcore.ko
sleep 2

insmod /lib/modules/ehci-hcd.ko
sleep 2

insmod /lib/modules/ohci-hcd.ko
sleep 2

insmod /lib/modules/usb-storage.ko
sleep 10

&color(red){echo "scsi add-single-device 0 0 0" > /proc/scsi/scsi};
&color(red){echo "scsi add-single-device 1 0 0" > /proc/scsi/scsi};
&color(red){echo "scsi add-single-device 2 0 0" > /proc/scsi/scsi};
sleep 5

#echo "0x303" > proc/sys/kernel/real-root-dev

umount proc

exit 0
}}
圧縮します。~
#pre{{
landisk:/share/src/kernel# umount /mnt
landisk:/share/src/kernel# gzip -9 ramdisk
}}
-''カーネルパラメータ….config''~
initrd関連のオプションをイネーブルにします。~
#pre{{
Device Drivers  --->
    Block devices  --->
        <*> RAM disk support
        (16)  Default number of RAM disks
        (4096) Default RAM disk size (kbytes)
        [*]   Initial RAM disk (initrd) support
        ()  Initramfs source file(s)
SH initrd options  --->
    [*] Embed root filesystem ramdisk into the kernel (NEW)
    (ramdisk.gz) Filename of gziped ramdisk image (NEW)
}}
なお、先ほど作成した ramdisk.gzを、zImageへ組み込みます。~
下記の場所へコピーして、ビルドを行います。~
#pre{{
linux-2.6.12/arch/sh/ramdisk/ramdisk.gz
}}
*ルートファイルシステムの準備 [#uc046d70]
-USBストレージにアクセスするには?
--hotplugのインストール 
#pre{{
landisk:~# apt-get install hotplug
}}
--あとは挿すだけ。~
#pre{{
landisk:~# dmesg
usb 3-2: new high speed USB device using ehci_hcd and address 3
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 3
usb-storage: waiting for device to settle before scanning
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
  Vendor: BUFFALO   Model: MCR   HS-CF       Rev: 1.95
  Type:   Direct-Access                      ANSI SCSI revision: 00
SCSI device sda: 3999744 512-byte hdwr sectors (2048 MB)
sda: Write Protect is off
sda: Mode Sense: 03 00 00 00
sda: assuming drive cache: write through
SCSI device sda: 3999744 512-byte hdwr sectors (2048 MB)
sda: Write Protect is off
sda: Mode Sense: 03 00 00 00
sda: assuming drive cache: write through
 sda: sda1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
usb-storage: device scan complete
}}
/proc/partitionsによるとsda(SCSI)デバイスとして認識されています。~
#pre{{
landisk:~# cat /proc/partitions 
major minor  #blocks  name

   3     0  156290904 hda
   3     1    8193118 hda1
   3     2     265072 hda2
   3     3   40965750 hda3
   3     4  106864380 hda4
&color(red){   8     0    1999872 sda};
&color(red){   8     1    1999840 sda1};
}}
-''パーティション設定''~
この様な感じでパーティション分割した。~
#pre{{
landisk:~# fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 2047 MB, 2047868928 bytes
64 heads, 63 sectors/track, 992 cylinders
Units = cylinders of 4032 * 512 = 2064384 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          40       80608+  83  Linux
/dev/sda2              41          95      110880   82  Linux swap / Solaris
/dev/sda3              96         992     1808352   83  Linux

Command (m for help): 
}}
-''ファイルシステムのフォーマット''~
--/dev/sda1 ext2
--/dev/sda2 swap
--/dev/sda3 reiserfs
とする。~
#pre{{
landisk:~# mke2fs -c  /dev/sda1
landisk:~# mkswap     /dev/sda2
landisk:~# mkreiserfs /dev/sda3
}}
-''debian26の導入''~
--mount
#pre{{
landisk:~# mount -t reiserfs /dev/sda3 /mnt
}}
--あとは/mnt/下へ、通常通りdebian26環境を構築~
唯一の変更点は/etc/fstabかな!~
#pre{{
# UNCONFIGURED FSTAB FOR BASE SYSTEM
/dev/sda3     /            reiserfs    defaults        0 1
proc          /proc        proc    defaults        0 0
/dev/sda2     swap         swap    defaults        0 0
}}
--umount~
umountしておきましょう。~
#pre{{
landisk:~# mount -t reiserfs /dev/sda3 /mnt
}}
*起動 [#p45a8d0f]
-''kernelsw.conf''~
以下のkernelsw.confを使用して、kernelsw(26).plでブートします。~
&color(red){ミソはappendにrootデバイスのメジャー/マイナー番号を16進数で指定することです。};~
&color(red){LinuxSHのバグ?なのかな!!};~
#pre{{
linear
boot=/dev/sda
disk=/dev/sda
bios=0x80
timeout=50
default=linux
image=/boot/zImage-usbstorage
        label=linux
        root=/dev/hda3
append="mem=64M console=ttySC1,9600 &color(red){root=803};"
}}
-''立ち上がり後の確認''~
/dev/sda3がルートデバイスとしてマウントされている。~
#pre{{
landisk:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3              1808260    121964   1686296   7% /
tmpfs                    31176         0     31176   0% /dev/shm
}}
-''ご参考まで''~
本実験で実際に使用したカーネルなど…~
http://eggplant.ddo.jp/www/download/kernel26/boot_at_usbstorage/~

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS