無料Wikiサービス | デモページ
Linuxなどのメモ書き

VAIO VGC-RA52へのインストール


VAIO VGC-RA52 へFedoraCore3をインストールした時のメモ。新しいPCへのインストールは毎度のことながらハマル。現在ならFedoraCore4を使って簡単にインストールできるはず。

問題点

インストーラのカーネル(2.6.9-1.667)がSATAコントローラ(ICH6R)がNativeModeなのにLegacyModeで動作させようとしてIDEのI/O Port(0x1f0,0x170)にアクセスするため、HDDを認識できない。 (Abnormal StatusとなりDisablingしてしまう)

2.6.11ではちゃんとNativeModeで動作するようになっているみたい。

対策

libata-core.cを修正してNativeModeでアクセスするドライバを作成し、 インストールの途中でlibata.koを入れ換える。


手順

1. ドライバの作成

(1) Kernel-2.6.9のソースを取って来る

(2) include/linux/vermagic.h
magicverを書き換える。

#define VERMAGIC_STRING "2.6.9-1.667 586 REGPARM 4KSTACKS gcc-3.4"

(3) libata-core.cにpatch追加

   drivers/scsi/libata-core.c
   @@ -3605,6 +3605,9 @@ int ata_pci_init_one (struct pci_dev *pd
                       legacy_mode = (1 << 3);
       }

   +   if ((pdev->class >> 8) == PCI_CLASS_STORAGE_RAID)
   +           legacy_mode = 0;
   +
       /* FIXME... */
       if ((!legacy_mode) && (n_ports > 1)) {
               printk(KERN_ERR "ata: BUG: native mode, n_ports > 1\n");

(4) libata-scsi.c
コールする関数を変更。
copy_to_user()だとモジュールをなぜかロード出来ない。

copy_to_user() -> __copy_to_user_ll()

(5) コンパイルオプションの変更
インストーラーのカーネルに合うように以下のconfigでコンパイルする。
  • SMPオプションは外す
  • ProsessorTypeは586
  • Preemptも外す
  • module versioning support をOff <-- CRCが合わないので外しておく
  • use register argumentsをOnにする <--引数がおかしくなりpanicする。
  • spinlock debuggingを追加 <-- こいつもいれないとなぜかPanicする。関数のサイズがずれるから?

(6) コンパイルしてlibata.koを取りだす

(7) インストーラをlinux noprobeで起動
これをやらないとlibata.koを入れ換えてもDiskDruidでHDDが見つからない(sdaやsdbとしては見えるのだが、、、)

(8) Installの途中でCtl+ALT+F2でコンソールに移動してata_piix,libata削除する。
       rmmod ata_piix
       rmmod libata

(9) 作成したlibata.koを/tmpに持っていきコンパイルしたドライバをロードしなおし。
   modprobe libata.ko
   modprobe ata_piix.ko
   <-- HDD(sda)が見えるようになる

(10) 後は通常どおりインストール可能


インストール完了後のリスタートで再度起動不可となる(インストールされたKernelが2.6.9で古いため)。このため、別のPCでKernel 2.6.11 をコンパイルして入れ換える(コンパイルオプションはdot.config参照)。

インストールの時と同じようにインストーラの途中で止めて、libata.koを入れ換えて/bootパーティションをマウント。その後、コンパイルしたKernelを/bootにコピー。grub.confも書き変えること。

rootパーティションの設定はroot=/dev/sda7のようにデバイス指定に変更しておくこと。(デフォルトのラベル指定?のままだとなぜかroot fsのマウントが出来ない)

[udevへの対応]
インストーラで起動してHDDをマウントし、以下のデバイスファイルを作成しておく。

(1) /dev/console
<==これがないと、Kernel起動時、unable open initial consoleとなりinitが起動してもメッセージが表示されない。

(2) /dev/null



最終更新 2006/04/17 23:01:06 - kztomita
(2006/04/12 01:09:22 作成)