VAIO VGC-RA52へのインストール
VAIO VGC-RA52 へFedoraCore3をインストールした時のメモ。新しいPCへのインストールは毎度のことながらハマル。現在ならFedoraCore4を使って簡単にインストールできるはず。
2.6.11ではちゃんとNativeModeで動作するようになっているみたい。
(1) Kernel-2.6.9のソースを取って来る
(2) include/linux/vermagic.h
magicverを書き換える。
(3) libata-core.cにpatch追加
(4) libata-scsi.c
コールする関数を変更。
copy_to_user()だとモジュールをなぜかロード出来ない。
(5) コンパイルオプションの変更
インストーラーのカーネルに合うように以下のconfigでコンパイルする。
(6) コンパイルしてlibata.koを取りだす
(7) インストーラをlinux noprobeで起動
これをやらないとlibata.koを入れ換えてもDiskDruidでHDDが見つからない(sdaやsdbとしては見えるのだが、、、)
(8) Installの途中でCtl+ALT+F2でコンソールに移動してata_piix,libata削除する。
(9) 作成したlibata.koを/tmpに持っていきコンパイルしたドライバをロードしなおし。
(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
問題点
インストーラのカーネル(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