]> Installing QNX RTP on Extented Partition as native qnx4 filesystem

QNX RTPを拡張パーティションにインストールする▼

Abstract

QNX RTPのインストーラーは、

のインストールしか対応していません。 が、RTPのブートローダ自体は拡張パーティションに対応しているので、 実験してみたところ インストールすることも可能です。 (major win)

English Abstract: It is possible to install QNX RTP into an Extended Partition using a native qnx4 filesystem (not only as a FAT image file, which is supported by the installer).

$Id: QNXext.html,v 1.16 2003-03-22 05:16:53+09 kabe Exp $


討死する前に

初めての人は、いきなりちゃれんじゃーにならず、 まず 標準のインストーラで インストールして (CDROMブートのままでお茶をにごさないこと)、 動かし方や「正常な動作」について把握しておきましょう。 ブート時に [SPC] [F6] [CR] でverboseモードのメッセージも どんなもんか見ておくこと。

用語

書いている最中にカタカナが多くなってイヤになったので、 以下の用語に統一します。

ちゃんと環境かけよ環境

AT互換機に QNX 6.1 です。 PPCやSH3では「拡張領域ってナニ」なので (どっかにはちゃんと書いとかなあかんよな)

対応ハードウェア にはなにも書いてませんが、PCIが想定されてる関係で Pentium以前の機械はちとつらいかも。 i82433な機械では PCI BIOS の関係で動きませんでした。

材料

なので、MBRブートローダとして OS-BSGRUB、 拡張領域いじくりツールとして Linuxの {,c,s}fdisk などが必要です。 試してませんがブートローダは LILOやntldr, Partition Magic でも大丈夫でしょう。

QNX RTP付属のMBRブートローダは単純な一次領域ブートしか対応しておらず、 拡張領域をいじくるツールも標準添付されていません。 QNX 付属の fdisk は 一次領域いじり専用です。 だからインストーラも拡張領域へのインストールに 対応していないんだと思われます。

当ドキュメントでは GRUB と Linux cfdisk を使ってみます。 Win32環境や DOS は必要ありません。


▽1.1 QNX用の拡張領域を作成

Linux の cfdisk を起動して、type=77 (0x4D) の拡張領域をこしらえます。 容量は…まあ全部インストールするなら600MBくらいですか。

[拡張領域を確保したぞ]

Linuxなんか使ってねーよという場合は、 Debian のレスキューディスク あたりが手軽でおすすめ。 CD-Rに2.88MBのイメージを焼いておけば 一発ブートできて 他のことにもいろいろ重宝しそうです。

▽1.2 QNXファイルシステムをこしらえる

Linuxを抜けて、今度は QNX RTPの CDROMでブートします。

カーネルが起動すると F1: HDDブート、 F2: CD起動、 F3: インストール の選択肢が出ますが、ここで F2: CDで起動 (Run from CD) を選択。

CDROMのインストーラは一次領域へのインストールしか対応していません。 F3: インストールを選んでもたいしたことはできず。

Photon環境の設定が始まりますが、別にPhotonがなくても以降の操作は できるので、軽いのが好きなかたはさっさと Exit でコンソールに戻ります。 んで root でログイン。 Photon環境なら端末エミュレーター (pterm) を起動。

Photonを起動すると腐る機械では、 起動時に [SPC][F1][F3] で Photon にならず すぐにコンソール login: になる。 Photon関係の余計な設定が走らないので速い。

先ほど作ったtype=77の拡張領域を確認します。

	# ls -l /dev/hd0t77
	brw-------  1 root      root         2,   4 Aug 29 23:49 /dev/hd0t77
	# _

type=77の領域が複数あると、hd0t77, hd0t77.1, hd0t77.2 ... なるデバイスが作られます

この領域に qnx4 ファイルシステムを作り込みます。

	# dinit -h /dev/hd0t77
	All existing files on /dev/hd0t77 will be lost!  Are you sure (y or n) ? y
	Using loader /x86/boot/sys/ipl-diskpc2-flop
	Disk 'dev/hd0t77' contains 1172682 blocks (586341K).
	# _
dinit で、 ファイルシステムの構築と PBRブートローダが書き込みが行われます。 ufsのようにsuperblockをえんえんと書くことはないのですぐに終了。
オプションの詳細は use dinit で見ることができます。 (QNXにはmanはなく、useかhelpviewerが標準ヘルプ)

▽1.3 さっそくマウント

	# mount /dev/hd0t77 /mnt
	# cd /mnt
	# ls -l
	total 319
	drwxrwxr-x  3 root      root           4096 Aug 30 00:28 .
	drwxrwxr-x  3 root      root           4096 Aug 30 00:28 ..
	-rw-------  1 root      root              0 Aug 30 00:28 .altboot
	-r--r--r--  1 root      root         146586 Aug 30 00:28 .bitmap
	-rw-------  1 root      root              0 Aug 30 00:28 .boot
	-r--r--r--  1 root      root           8192 Aug 30 00:28 .inodes
	# _

▽1.4 /.bootを作る

QNXのPBRローダや loadqnx.sys が読み込む初期イメージ (image file system) を作ります。 っても単にコピーしてくるだけですが。

	# cd /mnt
	# cp -p /fs/cd0/boot/fs/qnxbasedma.ifs .boot
	# cp -p /fs/cd0/boot/fs/qnxbase.ifs .altboot
	# ls -l
	total 2979
	drwxrwxr-x  3 root      root           4096 Aug 30 00:28 .
	drwxrwxr-x  3 root      root           4096 Aug 30 00:28 ..
	-r-xr-xr-x  1 root      root         680640 Jun 28 15:44 .altboot
	-r--r--r--  1 root      root         146586 Aug 30 00:28 .bitmap
	-r-xr-xr-x  1 root      root         680636 Jun 28 15:43 .boot
	-r--r--r--  1 root      root           8192 Aug 30 00:28 .inodes
	# _
いままでの起動時にDMA無効でないと調子が悪かったのであれば、 qnxbasedma と qnxbase を逆にします。

初期イメージの中身は dumpifs コマンドで覗くことができます。
FAT同居インストール環境では /.boot は空のままです。 初期イメージは loadqnx.sys の引数の X:\Program files\qnx\boot\fs\qnxbasedma.ifs が DOSの ファイルシステムサービスを使って読まれるため、 /.boot は使われません。
/.boot と /.altboot は特殊ファイルなので、入れ替える前に バックアップするつもりで mv .boot .boot- とかしても弾かれます。
cf.QNX4ファイルシステム概要

▽1.5 /.diskrootを作る

実は dinit -hR とすれば .diskroot も同時に作ってくれたりするんですが、 何をやっているかわかるように手順を分けてみました。

	# cd /mnt
	# touch .diskroot
	# chmod 444 .diskroot
初期イメージから最後に起動される diskboot コマンドは、マウントできそうな 領域やファイル (*.qfs) を調べ、空の /.diskroot があるものを / として 使用する、ようです。 /.diskroot が全然見つからないと、ブート時に↓で停止します。
	/.diskroot file for root not found on any filesystem.
	Starting with safe mode
	Unable to locate devc-con
	_

diskboot の詳細な動作や /.diskroot に関しては全然資料がないので 結構弱ったり。

▽1.6 ベースパッケージ(qnxbase.qfs)をもってくる

	# cd /mnt
	# mkdir boot
	# mkdir boot/fs
	# cp -p /fs/cd0/boot/fs/qnxbase.qfs boot/fs/qnxbase.qfs

通常ブートでもCDROM起動でも、このファイルの中身は diskbootによって /pkgs/base にマウントされます。 /bin などの実体は全部ここにあるので、このファイルがないと始まらない。

たぶん /pkgs/base/.diskroot に書いてある "mount=/pkgs/base" で 制御されてるんでしょうけど、資料がないので詳しいことが ぜんぜんわからん。
へぼい CDROMドライブ(ノート内蔵のとか…)だと けっこうコピーミスがでるようなので、 cmp で一応比較しておくのがおすすめ。

これで qnx4領域のいじくりはとりあえず終了。


▽2.1 ブートマネジャの設定

作った拡張領域の PBR からブートできるように、お好みの ブートマネジャを設定します。

2.2.1 GRUB

GRUBでは、しごく単純に

	title QNX
	chainloader (hd0,6)+1
(番号は当然、いくつ論理領域をこしらえてあるかで変動します)

誰も読みゃしないと思いますが GRUB の info にある chainloader +4 てのは おそらく QNX 4.x の話で、QNX 6.x では +1 で十分。 (大体現行のGRUB は chainloader +100 としても1セクタしか読まない)

2.2.2 ntldr

他のOSと同じ。まず PBR を bootsect.qnx とでもして 抜き出してから、boot.iniで指定。

	$ dd if=/dev/hd0t77 of=bootsect.qnx count=1
	boot.ini:
	[operating systems]
	C:\bootsect.qnx="QNX Momentics 6.2"

2.2 違うHDDだとブートしない?

色気出して本体を /dev/hd1t77 (2台目のHDD) に 入れたりすると、うまくいかないことがあるようです。 めんどくさいのがいやな人は素直に /dev/hd0t77 に入れること。 6.1 でdinitした PBR を使ったり、GRUB の map, LILO の map-drive で 解決する *かも* しれない。


おつかれっ! (まだQNX自体の設定は残ってるよ〜ん)

これで終了です。 ブートすると、/ が空なのを検出して自動的に最終設定が(CDROM起動と同じように) 開始されます。

あとは、とりあえず使ってみた場合と同じように設定していってください。 FAT に間借りしていた場合よりディスク周りの動作が速くなっていることは 体感できると思います。 (CPUが速すぎるとわかんないかも〜)

もう FAT や loadqnx.sys は使ってないので、 間借りブートしていた場合は DOS関係のファイルを消去できます。 (GRUBのstage2まで消さないように注意)


使いすぎると嫌われる略語集

QNX RTP
QNX RealTime Platform. RTPとつくのは Neutrinoカーネルを採用した QNX 6.0以降のもの。 "QNX" は "Qunix" だったものが商標関係で変化したもの。
MBR
Master Boot Record. AT互換機で、ハードディスクの一番先頭のセクタのこと。 ブートストラップ用のプログラムと、4つの一次領域の場所が書かれている。 BIOSによって起動される。
PBR
Partition Boot Record. 各領域の先頭セクタ。OS固有のブートローダが書かれている。 ここのローダはMBRやブートセレクタによって起動される。
LILO
LInux LOader. Linuxで一番多く使われているブートローダ。 設定変更にLinuxを要するので単独では使えないが…

かべ@sra-tohoku.co.jp