Linuxの方は新規インストールすればOKそうだと言うことが分かったので、今度は、FreeBSD7.0の方をブートしてみました。最初はディスク構成が変わってデバイスファイル名が変わったため、エラーが発生したものの、ブートローダー等のプロンプトで、正しいデバイス位置を指定しなおして起動に成功。その後fstabを書き直してインストール済みのFreeBSD7.0から起動できるようになりました。
起動できるようになったFreeBSDですが、2つの問題に気が付きました。(Audio出力関係やIEEE1394関係はカーネルに認識されたことを確認しただけでチェックしていません)
(1) P-ATAに接続したDVDドライブが認識できない。
(2) オンボードのGbitLANチップ Broadcom BCM5784を認識しない。
(1)の問題は、インストール用GENERICカーネルでも発生するので、DVD/CDからのインストールができないという残念な現象となります。
(2)の問題は、(1)の回避のためにDVD/CDの代わりにネットワークっ経由で各種パッケージファイル等を取り出そうとしても、うまく取り出せず、(1)の回避策にならないことになります。
(1)について調べたところ、P-ATAのセカンダリポートを検索しないため、P-ATA接続されたDVD/CDを検出できないのが原因のようです。
SB750(の一部となるP-ATAポート)をIXP700として内部的に認識するのですが、FreeBSD内でSB750(IXP700)を検出すると、ポート(チャネル)が1個しかないと強制的に設定されてしまい、FreeBSDでは最初のポート(プライマリ)だけをチェックして、セカンダリになっているA7DA-Sの唯一のP-ATAのポートがチェック対象にならず、FreeBSDから認識されないのが原因のようです。
IXP600, IXP700の時にポート(チャネル)を1個に強制的に設定している部分のコードをコメントにして、カーネルを作り直したところ認識されるようになりました。(環境がないから確認できないけど、後述のCurrentの修正を見ると、SB600とかだとこの修正だとかえって不具合が出るかも)
/usr/src/sys/dev/ata/ata-chipset.cの
ata_ati_chipinit()内に下記のように #if 0 と #endifを追加
if (ata_setup_interrupt(dev))
return ENXIO;
#if 0
/* IXP600 & IXP700 only have 1 PATA channel */
if ((ctlr->chip->chipid == ATA_ATI_IXP600) ||
(ctlr->chip->chipid == ATA_ATI_IXP700))
ctlr->channels = 1;
#endif
ctlr->setmode = ata_ati_setmode;
return 0;
(2)については、FreeBSD用のBroadcom BCM5784用のドライバがないためで、検索してもBCM5784用のドライバなど、対応策は見つかりませんでした。また、このような場合は、Windows用のNDISドライバを流用するという話を見つけたので、NDISデバイスドライバをビルドして作ってみましたがそれを、認識はするものの、IPアドレスを設定するとPanicを起こしてFreeBSDが落ちてしましました。
結局、(1)の問題は、USB変換アダプタを介してP-ATAのDVDドライブをUSB接続することで回避して、DVD-ROMのデータをマウントすることができました。(USB接続やS-ATA接続の起動装置を用意するなどして、P-ATA以外の接続手段を使えば回避できると思います。)
(2)の問題は、VIAのイーサネットカードを挿して、そちらを使うことで回避しています。
(1)の問題に関連しそうなソースコードの修正状況を調べてみると、Currentの最新のソースコードでは、IXP600のデバイスの場合だけポート(チャネル)を1個に強制設定し、IX700のデバイスの場合は、ポート(チャネル)を1個に強制的に設定しないように修正されていました。
FreeBSDのHEAD(Current?)では、ATAのchipsetの処理をchipsetの種類毎の別ソースファイルに分割されているようなのですが、ATI/AMD SB600/700/800 SATAコントローラの処理を常にAHCIモードで動くように修正したときに一緒に上記の修正が行なわれたようです。StableでもはCurrentと同じように、以下の修正をした版がリリースされれば、A7DA-SでもちゃんとインストーラからP-ATA接続のDVD/CDドライが使えるようになるんじゃないかなと思います。(もしかしたら、A7DA-Sだけでなく、790GX & SB750チップセットのマザーボード全体で動くようになる?)
/usr/src/sys/dev/ata/ata-chipset.c
ata_ati_chipinit()
if (ata_setup_interrupt(dev))
return ENXIO;
- /* IXP600 & IXP700 only have 1 PATA channel */
- if ((ctlr->chip->chipid == ATA_ATI_IXP600) ||
- (ctlr->chip->chipid == ATA_ATI_IXP700))
+ /* IXP600 only has 1 PATA channel */
+ if (ctlr->chip->chipid == ATA_ATI_IXP600)
ctlr->channels = 1;
次のリリース(7.3(?))までに、Currentの修正がStableに組み込まれて、標準のインストーラからでも、A7DA-S(790GX & SB750)のP-ATAポート接続したDVD-ROMドライブからリリース版のFreeBSDインストーラを使ってインストールできるようになっているとうれしいんだけどなあ。
#HEADのコメントを見ると、BIOS設定を変えるとDeviceIDだかSunDeviceIDだかが変わったりすることもあるらしいので、いろいろと複雑そうですが。