現状の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のハードディスクのマウント先を
に設定しています。必要に応じてスクリプトのマウント先を変更してください。また、カーネルのバージョンアップを行った際には、このスクリプトによるパッチの実行が不可欠になります。
リスト2のスクリプトをCFや別のUSBメモリなどに入れておきます。ここでは、CFにvine-usbboot-patch.shを入れてあります。CFをノートPCに挿入するとKNOPPIXのデスクトップ上にアイコンが表示されますので、デバイスファイル名を確認します。今回の例では、/dev/hdcと認識されています(図6)。
以下のように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 ←バッチの実行
以上の作業を行い、BIOSの設定画面でUSBからのブートを設定すれば、USBのハードディスクを接続したWindowsマシンからLinuxを起動できます(画像1)。
また、USBのハードディスクを接続しない状態で起動すると、普段どおりWindowsを起動できます(画像2)。
この方式ですと、Windowsが入ったハードディスクもLinux上からマウントできるため、Windows上へのデータの読み書きが可能です。また、Linuxは通常のマシンと異なるPCでも、ドライバなどを当て直してくれるため、USBのブートをサポートしているPCであれば、今回作成したUSBのハードディスクからLinuxをブートさせることが可能です。個人的にはかなり気に入っている環境なので、ぜひトライしてみてください。
さて次回は、今回構築した「開発環境の補足」と「組み込み開発ボードの選定」について解説する予定です。お楽しみに!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム