Windowsを傷付けずにUSBからLinuxをブートせよ!:−ザ・組み込み−ソフトウェアのハードウェア化(1)(3/3 ページ)
“ソフトウェアの肥大化問題”に立ち向かえ! まずは、開発環境の準備。筆者イチ押しの安全・便利なLinux環境とは?
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のハードディスクのマウント先を
- /dev/sda1(/bootの入ったパーティション) → /mnt/sda1
- /dev/sda2(/の入ったパーティション) → /mnt/sda2
に設定しています。必要に応じてスクリプトのマウント先を変更してください。また、カーネルのバージョンアップを行った際には、このスクリプトによるパッチの実行が不可欠になります。
リスト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.