« 2008年7月 | トップページ | 2009年10月 »

2009/05/16

Foxconn A7DA-SとFreeBSD

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だかが変わったりすることもあるらしいので、いろいろと複雑そうですが。

| | コメント (1) | トラックバック (0)

Foxconn A7DA-SとFedora

もともとサブ機には、実験用ということで、Fedora7(i386), Fedora8(i386), FreeBSD7.0(i386)が入ったS-ATAのHDDを2台つないでマルチブート構成にしていました。
最初は起動用のP-ATAのHDDからPCIのS-ATA増設カードに接続したS-ATA HDD内のOSをマルチブートする構成でした。その後、ブート可能なS-ATA増設カードに交換して、そこからブートするようにしたのですが、拡張パーティションの後ろに基本パーティションがあるという変なパーティション構成になっていました。
新しいマザーボード A7DA-SはBIOSが認識した任意のHDD/CD/DVD/FD/USBからブートする機能があるので、一旦外したS-ATA HDDを直接つないで起動してみました。
Fedora7/8は、P-ATAのHDDが無くなった事やHDDの認識位置が変わったためか、うまく起動できませんでした。レスキューDVDから修復を試みたのですが、swapが取り外した別ディスク(元起動用P-ATAのHDD?)に設定していたのか、HDDからの起動が途中でエラーになってしまいます。
最初は initrd起動中にswap領域が見つからずエラー。レスキューDVDから起動して、fstabのswapエントリを削除してinitrdを作り直したものの、結局、/dev/rootが見つからないというエラーとなり起動できませんせした。
Linuxの起動シーケンスについて調べることができたら、対策できないか調べてみます。(最悪はインストールしなおしですけど)
ちなみに、空きパーティションにFedora10(x86-64)を新規インストールしたところほぼ問題なくインストールできました。
インストーラの使い方がまずかったのか、変態パーティション構成なのでMBRとかの書き込みを警戒しすぎたせいか、grubの起動メニューに追加されなかったので、そこは、手動で設定しましたけど。
FreeBSDで発生したような問題(P-ATAポートとEthernetチップの問題:次のエントリ参照)は、Linuxでは発生しませんでした。
(Audio関係とIEEE1394関係はチェックしてません。)

| | コメント (0) | トラックバック (0)

マザーボードをFoxconn A7DA-Sへ交換しました

さすがにSocket Aのマザーボードが、家で一番早いマシンというのは、不自由を感じ始めたので、新しいマザーボードを購入してサブマシンの中身と入れ替えました。
代々、AMDのCPUを使用してきていることと、安いCPUを購入してもあとであまり買い替えをせずに性能アップを図れそうと言うことで、SocketAM2/AM2+のマザーボードから選択しました。
Socket Aからの買い替え(メインマシンもサブマシンもSocket Aなんです)だと、CPUがSocket A→Socket AM2/AM2+なのは仕方がないとして、ディスプレイカードがAGP→PCI-E、メモリがDDR→DDR2 or DDR3、HDDもP-ATA→S-ATAと、ほぼ全交換となってしまいます。(電源は、何回か故障で買い換えたので400Wとはいえ最新のマザーボードにも対応済み)
AMDのチップセットを比べたところ、AMD790GXがオンボードVGAで、なおかつ、マザーボードによっては、ディスプレイ専用メモリを搭載している(=表示用の高速なメモリを使用できて、メインメモリを流用しなくて済む)ということで、家の近くのドスパラに在庫があった Foxxcon A7DA-Sにしました。(DDR3 128MBのディスプレイ専用メモリ搭載で約1万円と安かったのも選択理由です。)
というわけで、
M/B : Foxconn A7DA-S (790GX SB750 AM2+ ATX 1394 Gigabit-Lan)
CPU : AMD Athlon X2 4850e BOX (AM2 2.5GHz 512k x 2 45W)
MEM : PQI QD2800-2G2 (DDR2 PC2-6400 2GB x 2)
HDD : Seagate ST31000528AS (SATA2 1TB 32MB)
OS : Windows XP Home 日本語版 SP3 DVD DSP版(FDD付き)
の組み合わせで購入、合計40,200円でした。
OSは、メインマシンのWindows XP Homeを残して移行するため追加購入。
電源が400Wクラスと言うことで、消費電力抑え目で、CPUは、45W or 65Wのを狙っていたのですが、購入日には45W/65Wともに最速CPUは在庫なしということで、4850eとなりました。
メモリは2GBでも良かったのですが、最近安いのとLinux/FreeBSDも動かしてみたいので4GBにしました。
HDDは、Hitachi製をいつもは買うのですが、Seagateの1TBの方が、実測値で早いと店員さんに勧められたので、Seagateの1TB(キャッシュ32MB)にしました。
(CPU+MEMで約1万円、他はそれぞれ1品約1万円と言った感じ)

マシンの組み換えは、結局、電源も別のサブ機から入れ替えたので、かなりの大工事になってしまいましたが、無事に、新品HDDにWindows XP Homeを入れて無事に動き出しました。
結局、ケースとDVDドライブ以外全部交換って、全く新規に組んだのとどこが違うんだろう?

| | コメント (0) | トラックバック (0)

« 2008年7月 | トップページ | 2009年10月 »