Windowsを傷付けずにUSBからLinuxをブートせよ!−ザ・組み込み−ソフトウェアのハードウェア化(1)(3/3 ページ)

» 2008年07月22日 00時00分 公開
[鳥海佳孝 設計アナリスト,@IT MONOist]
前のページへ 1|2|3       

4.USBブートへの対応

 現状のVine Linux 4.2のディストリビューションを、そのままUSBのハードディスクから立ち上げようとすると、kernel panicを起こしてしまい、うまく起動できません。これは、USBのハードディスクから立ち上げるために必要なドライバがロードされないためです。

 そこで、diskless Fun's Wiki「Linux各ディストリビューションのUSBブート・対応状況」のページを参考にして、以下のような“USBブートに必要なパッチを当てるスクリプト(vine-usbboot-patch.sh)”を作成しました(リスト2)。


#!/bin/sh
MNTROOT=/mnt/sda1
MNTROOT2=/mnt/sda2
cd ${MNTROOT}/
cp initrd-2.6.16-0vl76.27.img initrd-2.6.16-0vl76.27.img.org
mkdir work
cd work
# gzip -dc ../initrd.img | cpio -idmv
gzip -dc ../initrd-2.6.16-0vl76.27.img | cpio -idmv
find ${MNTROOT2}/lib/modules -name uhci-hcd.ko -exec cp -p {} lib \;
find ${MNTROOT2}/lib/modules -name ohci-hcd.ko -exec cp -p {} lib \;
find ${MNTROOT2}/lib/modules -name ehci-hcd.ko -exec cp -p {} lib \;
patch -p0 <<EOT
--- init.orig 2008-01-03 22:20:36.000000000 +0900
+++ init 2008-01-03 23:10:56.000000000 +0900
@@ -5,6 +5,12 @@
 echo Mounted /proc filesystem
 echo Mounting sysfs
 mount -t sysfs none /sys
+echo "Loading uhci-hcd.ko module"
+insmod /lib/uhci-hcd.ko 
+echo "Loading ohci-hcd.ko module"
+insmod /lib/ohci-hcd.ko 
+echo "Loading ehci-hcd.ko module"
+insmod /lib/ehci-hcd.ko 
 echo "Loading scsi_mod.ko module"
 insmod /lib/scsi_mod.ko 
 echo "Loading sd_mod.ko module"
EOT
chmod +x init
# find | cpio -H newc -o | gzip -9 > ../initrd.img
find | cpio -H newc -o | gzip -9 > ../initrd-2.6.16-0vl76.27.img
リスト2 USBブートに必要なパッチを当てるスクリプト「vine-usbboot-patch.sh


 リスト2のとおり、このスクリプトではUSBのハードディスクのマウント先を

  • /dev/sda1(/bootの入ったパーティション) → /mnt/sda1
  • /dev/sda2(/の入ったパーティション) → /mnt/sda2

に設定しています。必要に応じてスクリプトのマウント先を変更してください。また、カーネルのバージョンアップを行った際には、このスクリプトによるパッチの実行が不可欠になります。

 リスト2のスクリプトをCFや別のUSBメモリなどに入れておきます。ここでは、CFにvine-usbboot-patch.shを入れてあります。CFをノートPCに挿入するとKNOPPIXのデスクトップ上にアイコンが表示されますので、デバイスファイル名を確認します。今回の例では、/dev/hdcと認識されています(図6)。

CFの認識 図6 CFの認識

 以下のようにCFをマウントして、パッチのスクリプト(vine-usbboot-patch.sh)を実行します(図7)。

# mount /dev/sda1 /mnt/sda1
# mount /dev/sda2 /mnt/sda2
# mount /dev/hdc1 /mnt/hdc1 ←CFをマウント
# cd /mnt/hdc1
# ./vine-usbboot-patch.sh ←バッチの実行  

各ディスクのマウントとパッチの実行 図7 各ディスクのマウントとパッチの実行

 以上の作業を行い、BIOSの設定画面でUSBからのブートを設定すれば、USBのハードディスクを接続したWindowsマシンからLinuxを起動できます(画像1)。

USBのハードディスクを接続してPCを起動すればLinuxが立ち上がる 画像1 USBのハードディスクを接続してPCを起動すればLinuxが立ち上がる

 また、USBのハードディスクを接続しない状態で起動すると、普段どおりWindowsを起動できます(画像2)。

USBのハードディスクを接続せずにPCを起動すればWindowsが立ち上がる 画像2 USBのハードディスクを接続せずにPCを起動すればWindowsが立ち上がる

 この方式ですと、Windowsが入ったハードディスクもLinux上からマウントできるため、Windows上へのデータの読み書きが可能です。また、Linuxは通常のマシンと異なるPCでも、ドライバなどを当て直してくれるため、USBのブートをサポートしているPCであれば、今回作成したUSBのハードディスクからLinuxをブートさせることが可能です。個人的にはかなり気に入っている環境なので、ぜひトライしてみてください。



 さて次回は、今回構築した「開発環境の補足」と「組み込み開発ボードの選定」について解説する予定です。お楽しみに!(次回に続く)


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.