京都産業大学の大本です. 少し前の投稿ですが, At 10:45 PM +0900 05.2.2, FUKUHARA Makoto wrote:
Intel の Serial/Parallel ATA コントローラ用 driver は,2.4.28 では drivers/scsi/ata_piix.c と drivers/ide/pci/piix.c の二つがあり,たとえば 8086:24d1: 82801EB (ICH5) SATA Controller の場合はどちらでも使えそうですが, 8086:24df: 82801ER (ICH5R) SATA Controller の場合は ata_piix.c のみ使えそうです. Vine 3.1 の images/drvblock.img には ata_piix.o が含まれているようなので, 次のようにして 82801ER (ICH5R) で使ってみようとしました.
これに触発されて,本学の設備更新で導入されるIBM x206シリーズへ導入され たVine Linux 3.1のカーネルを入れ替えてSATAドライバを有効化してみまし た.
以下に,その作業記録を参考までに添付します. #もし,同様の作業を試されたい方は十分ご注意ください. #ちょっとでも間違えると起動時にカーネルパニックに陥ります(^^;; ---------------------------- x206シリーズのSATA対応カーネルの導入: Vine Linux 3.1の標準カーネル(2.4.27ベース)には Intel ICH5のSATAコント ローラチップドライバ ata_piix は含まれていない。 # 2.4系列のSATAサポート情報は # http://www.linuxmafia.com/faq/Hardware/sata.html # を参照のこと ちなみにICH5を採用しているらしいIBM x206シリーズにはVine Linux 3.1はイ ンストール可能だが、BIOS設定を Legacy モード(www.vinelinu.orgでは Combined modeと称されているようだ)に設定した状態なければならず、しか も、SATAはPIOモード固定で動作し、DMA転送モードは有効化できない。 なおかつ、ATAPI接続のCD-ROM(DVD-ROM)ドライブの転送モードまでも道連れに なってPIO固定になってしまうようで、DVD再生なんぞ音声途切れまくり! ひょえー! この時、x206では、Primary masterにDVD comboドライブ、Secondary master にIDE HDDが接続されているようにカーネルから認識されており、ここの場合、 rootパーティションは/dev/hdc5に入っている状態である。 そのHDDのI/O性能は、 [root@patpc001 mnt]# /sbin/hdparm -f -t /dev/hdc /dev/hdc: Timing buffered disk reads: 10 MB in 3.12 seconds = 3.21 MB/sec [root@patpc001 mnt]# /sbin/hdparm -v /dev/hdc /dev/hdc: multcount = 16 (on) IO_support = 0 (default 16-bit) unmaskirq = 0 (off) using_dma = 0 (off) keepsettings = 0 (off) readonly = 0 (off) readahead = 8 (on) geometry = 9730/255/63, sectors = 80032038912, start = 0 [root@patpc001 mnt]# ということで、転送速度3.21MB/secしか出ない。遅い、遅すぎる (T_T) さて、どうする? www.kernel.orgのChange Logを見ると、2.4.28においてata_piixドライバに相 当に手が入っていることが判明。 ストックのカーネルはさすがに何なので、Vine Seedを探すと kernel-2.4.28-0vl3.src.rpm というのが出てる。ダウンロード/展開して覗くと、ata_piixドライバが確か 含まれているので、これをベースに考える。 Vine 3.1のアップデートに出ているkernelパッケージに含まれたセキュリティ フィックスのうち、2.4.28に該当するのは add Patch22 for fix uselib() privilege elevation (CAN-2004-1235) のようなので、このパッチだけ取り出してkernel-2.4.29-0vl1.src.rpmに適用 したパッケージ kernel-2.4.28-0vl3.1.src.rpm を作成した。パッチは大部分そのまま適用できたが、一つだけrejectされたの だが、目視で確認の上、パッチを1行修正すれば大丈夫だった。 このカーネルのソースパッケージからバイナリパッケージを作成する。 ところで、x206シリーズはHyper-Threading有効のPentium-4が載っているので 作成するのはSMPカーネルが必要である。 /tmpにkernel-2.4.28-0vl3.1.src.rpmが配置してあると仮定する。 また、ホームディレクトリにあるrpmディレクトリを${RPM}と表記する。 $ /usr/sbin/mkkpkg --target=i686 --enable-smp /tmp/kernel-2.4.28-0vl3.1.src.rpm カーネルのmenu configが起動するので、適当に設定する。基本的にデフォル ト値のままだが、APMをONにしないとSMPで電源が切れないので、これは必須。 選択したコンフィグオプション Pentium-4プロセッサ最適化(折角、カーネルをビルドし直すので) Power Management support ON Software Suspend support ON(Power Management support ONの場合、これを ONにしないと、コンパイルエラーだった) CONFIG_SOFTWARE_SUSPEND2_CORE=y CONFIG_SOFTWARE_SUSPEND2=y CONFIG_SOFTWARE_SUSPEND_SWAPWRITER=y CONFIG_SOFTWARE_SUSPEND_LZF_COMPRESSION=y CONFIG_SOFTWARE_SUSPEND_TEXT_MODE=y CONFIG_SOFTWARE_SUSPEND_BOOTSPLASH=y Support for SATA (deprecated; conflicts with libata SATA driver) OFF # 上記はIDE機器項目中のもの。OFFにしなくても良いかも。 かなり、時間がかかるが、${RPM}/RPMS/i686配下に kernel-smp-2.4.28-0vl3.1.i686.rpm が出来る。 カーネルヘッダのバイナリパッケージは別途作成しないと生成されないので、 これを作成する。 $ /usr/sbin/mkkpkg --enable-smp /tmp/kernel-2.4.28-0vl3.1.src.rpm --targetオプションを指定しないのがミソですね。 同じくmenu configに答えると${RPM}/RPMS/i386にカーネルヘッダなどのパッ ケージが生成される。 これでビルドは終了したので、カーネルパッケージのインストールを行う。 # cd ${RPM}/RPMS/i686 # rpm -ivh kernel-smp-2.4.28-0vl3.1.i686.rpm ここからは、慎重な作業が必要。手順と作業内容をちょっとでも間違えると 全く起動しなくなる! /etc/modules.confを修正して、ata_piixがエントリーされるようにする。 具体的には、 alias parport_lowlevel parport_pc alias scsi_hostadapter usb-storage てな具合いの部分を alias parport_lowlevel parport_pc alias scsi_hostadapter ata_piix # alias scsi_hostadapter1 usb-storage と修正する。 次にinitrdイメージを再生成する。実は、SATAディスクはカーネルから見れば SCSIディスクとして仮想的に認識されるのだが、起動時に必要なSCSIドライバ はRAMディスクイメージである /boot/initrd-*.img に含まれていて、起動時にinitrdが上手く取り計らってカーネルにロードされ るのだ。 # /sbin/mkinitrd /boot/initrd-2.4.28-0vl3.1smp.img 2.4.28-0vl3.1smp これで /boot/initrd-2.4.28-0vl3.1smp.img というファイルができあがる。 このファイルはext2フォーマットの圧縮されたディスクイメージなので、マウ ントして中身を確認できる。こんな具合いに。 # cp /boot/initrd-2.4.28-0vl3.1smp.img /tmp/initrd-2.4.28-0vl3.1smp.img.gz # gunzip /tmp/initrd-2.4.28-0vl3.1smp.img.gz # mount -t ext2 -o loop /tmp/initrd-2.4.28-0vl3.1smp.img /mnt # df ファイルシステム 1k-ブロック 使用中 空き 使用% マウント場所 /dev/sda5 4538124 4237304 70292 99% / none 515816 0 515816 0% /dev/shm /tmp/initrd-2.4.28-0vl3.1smp.img 7745 464 6881 7% /mnt # ls /mnt/lib ata_piix.o libata.o scsi_mod.o sd_mod.o usb-storage.o これで、ata_piix.oドライバがinitrd.imgファイルにちゃんと含まれてること が確認できた。 /etc/lilo.confをインストールした新しいカーネルとinitrd.imgファイルに合 わせて修正する。こんな具合いか。 prompt timeout=50 default=linux boot=/dev/hdc map=/boot/map install=menu message=/boot/message lba32 image=/boot/vmlinuz-2.4.28-0vl3.1smp label=linux initrd=/boot/initrd-2.4.28-0vl3.1smp.img read-only root=/dev/hdc5 append="apm=power-off" この時点では、まだSATAディスクはBIOS設定にてLegacyモード設定であるから、 /dev/hdcとして認識されてるので、lilo.confの記述はこれに従う必要がある。 修正したらブートローダをインストールする。 # /sbin/lilo ここでエラーが出ているようだと再起動するとハマるので、要注意。 次に、/etc/fstabを書き換えて、 /dev/hdc6 swap swap defaults 0 0 というスワップ設定部分を /dev/sda6 swap swap defaults 0 0 というように書き換える。SATAディスクがSCSIディスクとして扱われるように なるので、これが必要なのね。 ブートローダのインストールに成功したら再起動するが、ここでの再起動時に 絶対にBIOS設定画面へ入ること。SATAディスクの設定を必ず Legacy -> Native と変更する (VineLinuxのホームページではEnhanced modeと称されてるのか な?)。これを忘れるとブート不能となるので要注意です。 また、SATAディスク設定をNativeモードへ切り替えるとVine3.1インストールCDの rescueモードは、これまたブートしないので、rescue起動したい場合は予め Legacyモードへ戻すこと。 BIOS画面でSATAモードへ切り替えたら、いよいよ新しいカーネルで再起動する。 ここでもまた、要注意なのが、VineのLilo画面で普通にメニュー選択すると、 ここでもハマってブート不能となることである。 メニュー画面が出たら、まずESCキーを押してプロンプトを出し、次のように入力し た上で起動する。 Boot: linux root=/dev/sda5 この root=/dev/sda5 というのが今まで/dev/hdcとして認識されていSATAディ スク上のrootパーティション/dev/hda5に対して、 /dev/sdaというSCSIディスク上のパーティション/dev/sda5としてとして認識 させた状態でカーネルを起動させる魔法の呪文ですな。 # うーむ、知らなかった。。。。。 これで設定を間違えてなければ、SATAディスクをSCSIディスクであるかのよう に認識して立ち上がるはず。 無事起動したら、再度/etc/lilo.confを修正する。こんな具合いでしょうか? prompt timeout=50 default=linux #boot=/dev/hdc boot=/dev/sda map=/boot/map install=menu message=/boot/message lba32 image=/boot/vmlinuz-2.4.28-0vl3.1smp label=linux initrd=/boot/initrd-2.4.28-0vl3.1smp.img read-only # root=/dev/hdc5 root=/dev/sda5 append="apm=power-off" 要するに /dev/hdc -> /dev/sda に置き換えれば良い。 /etc/lilo.confを修正したら、絶対忘れずに/sbin/liloを実行する。 忘れると、再起動時にカーネルパニックしてブート不能に陥る。 念のため、再起動してみる。 # sync; sync; sync; reboot これで表示されるLILOブート画面でメニュー選択してもちゃんと起動するよう になった。あー、やれやれ。 尚、どこかで手順を間違えて起動不能に陥ったら、一旦SATA設定をLegacyモー ドへ戻してVine3.1インストールCDからrescueブートして問題を修正して再挑 戦することになる(何度繰り返したか。。。。(T_T) 確実にブートするようになったら、カーネルヘッダなどをアップデートする。 # cd ${RPM}/RPMS/i386 # rpm -Uvh kernel-headers-2.4.28-0vl3.1.i386.rpm # rpm -Uvh kernel-doc-2.4.28-0vl3.1.i386.rpm # rpm -Uvh kernel-source-2.4.28-0vl3.1.i386.rpm ちなみに、SATAがNativeサポートされた状態になるとDVD-ROMの光学ドライ ブもDMA転送がちゃんと効くようになり、DVD視聴時の途切れも無くなり、また xcdroastによるCD-R作成も問題なく出来るようになりました。 以上 -- 京都産業大学 工学部情報通信工学科 大本 英徹 E-mail: oomoto@xxxxxxxxxxxxxxxxxx Tel: 075-705-1904 (Dial In) (*^.^*) (*^_^*) (*^o^*) (*^.^*) Fax: 075-705-1914