Linux日記: 1998年


Linuxでvoodoo(1998.12.23)

LinuxではMesaというライブラリで、OpenGL環境が提供されており、xscreensaverやxlockmore等、あるいはGL Quake等で利用されています。

このMesaのドキュメント等を見ると、別途glideを用意すればMesaを通してglideが使えるようになるようです。 今までLinuxではただの画像劣化装置にしかならなかった私のPure3D IIですが、これさえあれば役に立てることができるではないですか!

本家3dfxではLinux用のglideがダウンロード可能なのですが、voodoo1用のglide2.4しか見つけられませんでした(補足4)。 ネット上で探してみたところ、Linux 3D hardwareというページでvoodoo2対応のglide-2.53のRPMファイルを発見できましたので、早速実験してみました。


  1. glideをインストールする
    • rpm -ivh Glide_V2-2.53-1.i386.glibc.rpm
    • rpm --rebuild Device3Dfx-1.1-2.src.rpm
    • rpm -ivh /usr/src/redhat/RPMS/i386/Device3Dfx-1.1-2.rpm
    • rpm -ivh Glide2x.SDK-2.1-3.i386.rpm
    • (これらファイル名は、voodoo1/2/rush、libc/glibc等で変わるので注意)
  2. Mesaをglide対応で作りなおす
    • tar xvfz MesaLib-3.0.tar.gz
    • tar xvfz MesaDemos-3.0.tar.gz
    • make linux-386-glide (makeのみで使用可能なオプションの一覧が見られる)
  3. 動くかどうか実験してみる
    • cd 3Dfx/demos
    • export MESA_GLX_FX=fullscreen (全画面表示の設定)
    • ./fire
  4. (うまく動いたら)Turbo Linux ではデフォルトでMesaが/usr/libにインストールされているので、今作った新しいライブラリと入替える
    • cp lib/lib*.so.3.0 /usr/lib
    • cp src/lib*.a src-glu/lib*.a /usr/lib
    • ldconfig

Mesa with Glide うまく動きますと、3.の実験で、fireデモを実行すると、Windowsでは見慣れた3dfxロゴが表示され、このようなデモ画面が表示されます。めでたし、めでたし。

画面にしたがってキーを押すと移動したり、フォグやテクスチャなどの条件を変えることができます。


補足1 :
環境変数 MESA_GLX_FX にfullscreenではなくwindow等と入れると、Xのウィンドウ表示でも動作しますがやっぱり遅いです。
補足2 :
Windows版のQuakeIIを持っている方は、Id Softwareのftpサイトから、QuakeII for Linuxが入手できるようです。Windows版よりもFPSが高いという話も?(私は持ってないので未確認)。
補足3 :
Mesaを使う実行プログラムにはchmod +sをしてroot権限を与えておかないと、一般ユーザからはGlideが利用できないかもしれません。
補足4:
1999年3月から3dfx : Voodoo2 Linux Reference DriversでLinux用ドライバが公開されました(中身は上で紹介したLinux 3D hardwareのものと同じ?)
補足5 :
さらにその後、Linux.3dfx.comのOpen Sourceのページで、Glideやデバイスドライバ等がソースごと公開されるようになりました。

ALSA (Advanced Linux Sound Architecture)をテスト(1998.12.9)

Linuxでサウンドを出そうとすると、カーネルに付属のフリー版のOSSを使うのが一般的でしょう。 しかし、フリー版OSSはどうやらサンプリングレートが低かったりして機能制限が入っているらしいです。 そこで、これで満足できない向きには、商用版のOSSを使うか、ALSAというものを使うらしいです。 Dr.Kに、「音源マニアな君も実験してみたまえ」と挑発されて、ついつい挑戦してしまいました。 TL3.0には商用版のOSSが含まれているらしいし、一般的なOSSを使うほうが初心者の俺にはとっつきやすいでしょうが。

何はともあれ、ソースを入手して(日本語ページがあるのでこちらから)実験開始。 インストール等の詳しい方法は、下記のサイトから情報収集させていただきました。

流れとしては、2.0系カーネルの場合はサウンド関連のオプションをすべて外してカーネルを再構築します。 2.2系カーネルの場合は、'Sound card support'だけモジュールにして組み込んでおきます。 カーネル再構築の後、ALSAドライバをインストールし、/etc/conf.modules にALSAドライバの設定を書けばとりあえずALSAで音が鳴らせるようになります。 OSSのエミュレーションもされているので、従来のサウンド関係のプログラムも結構問題無く使用できるようです。

しかし、ALSAはデフォルトでボリュームが0な上、ご丁寧にミュートまでされているので、毎回ボリューム設定するのは面倒です。 amixerというALSA用のプログラム(下記のalsa-utilsに含まれる)を使って、ボリュームを設定するのが普通なようなので、私もそうしました。

alsa-driver
ソース名 alsa-driver-0.2.0-pre10p2.tar.gz
install手順 # ./configure
# make; make install
# ./snddevices
備考
  • /etc/conf.modules の設定は良く分からないので、他の方々の設定ファイルを参考に適当に作った
alsa-lib
ソース名 alsa-lib-0.1.3.tar.gz
install手順 # ./configure
# make; make install
備考
alsa-utils
ソース名 alsa-utils0.0.8.tar.gz
install手順 # ./configure
# make; make install
備考
/etc/conf.modules (2.0系カーネル+ALSA-0.2.0pre10)

#[for OSS]
#alias sound sb
#options -k sb io=0x240 irq=5 dma=1,5
#alias midi opl3 
#options -k opl3 io=0x388

#[for ALSA]
alias char-major-14 snd-sbawe
alias snd-minor-oss-0 snd-mixer
alias snd-minor-oss-1 snd-seq
alias snd-minor-oss-2 snd-midi
alias snd-minor-oss-3 snd-pcm1-oss
alias snd-minor-oss-4 snd-pcm1-oss
alias snd-minor-oss-5 snd-pcm1-oss
alias snd-card-0 snd-sbawe
options snd snd_major=14 snd_cards_limit=1
options snd-sbawe snd_index=1 snd_id="SBAWE32" snd_port=0x220
   snd_mpu_port=-1 snd_awe_port=0x620 snd_irq=5 snd_dma8=1
   snd_dma8_size=64 snd_dma16=5 snd_dma16_size=128 snd_mic_agc=0
post-install snd-sbawe /usr/bin/amixer -p /etc/amixerrc -r
/etc/conf.modules (2.2系カーネル+ALSA-0.3.0pre4)

alias char-major-14 soundcore
alias char-major-116 snd
alias snd-card-0 snd-sbawe
alias sound-slot-0 snd-card-0
alias sound-service-0-3 snd-pcm1-oss
alias sound-service-0-12 snd-pcm1-oss
options snd snd_major=116 snd_cards_limit=1 snd_device_mode=0660
  snd_device_gid=0 snd_device_uid=0
options snd-sbawe snd_index=1 snd_id="SBAWE32" snd_port=0x220
  snd_mpu_port=-1 snd_awe_port=0x620 snd_irq=5 snd_dma8=1
  snd_dma8_size=64 snd_dma16=5 snd_dma16_size=128 snd_mic_agc=0
post-install snd-sbawe /usr/bin/amixer -p /etc/amixerrc -r

2.2系では、カーネルのsoundcoreモジュールが組み込まれ、ALSAはその下にぶら下がる形になっています。

現在のところ、PCMは無事利用できていますが、MIDIシンセがうまく使えてません。 もう少しドキュメントを読んだりして情報収集が必要ですかね。 肝心のPCM部分の再生能力ですが、どうでしょう? 私も大した音感の持ち主ではありませんし、微妙なニュアンスを文章で伝えるのは難しいですが、「音が豊かになった」ような気はします(^^;。


Turbo Linux 3.0β5(1998.11.29)

DOS/V POWER REPORTの99年1月号にTurbo Linux 3.0のβ5が付録でついていました。 さっそく実験です。

インストール

ブートフロッピー、拡張ハードフロッピーを作成して再起動し、インストール開始。 このあたりのインストール手順は基本的にTL2.0と変わりません。 順調に進んでいったのですが、何故か「ルートパーティションの作成&フォーマット」で失敗します(make2fsがいつまでたっても終わらない)。 まぁそのパーティションにはTL2.0が入っていたので既にext2fsのはずですから、Alt+F2でコンソールに切替えてmke2fsを殺し、無理矢理インストールを継続しました。

とりあえずインストールタイプとしては「標準ワークステーション」を選択。 私はTL2.0ではいつも「標準WS」を選択して手動で不要なパッケージをいくつか外してインストールしていたのですが、どうもパッケージ選択すると失敗してしまいます。 まぁインストール終了後にrpmコマンドで個別に消せばいいやってことで、標準WSのまま継続。

まだβ版のためか含まれていないパッケージがあるようで、「解消できない依存関係がある」とか警告が出るけど、とりあえず無視。

Xの設定まで進むと、マウス設定に「wheel(ローラー付き)マウス」が追加されているのが目につきました。 といっても私は普通の2ボタンPS/2マウスしかないので関係ありませんけど(^^;。 次のXの解像度設定で、Xの画面のテスト(周波数とか間違えたのでグチャグチャ)が終わった後、コンソール画面も壊れてしまいました。 地獄のようにちらつく模様の向こうにTLのインストール画面が見えてはいますが、これではどうしようもありません。 ま、まぁノートパソコンだとちゃんと設定しないとXが正常に見えないのは良くある話ですが、せめてコンソールには正常に復帰して欲しいなぁ...。

いたしかたなく再起動&インストールのやり直しです。 今度はXのテストを無視してなんとかインストールを終了することができました(無理矢理mke2fsを終了したせいかエラーがでたけど、fsck.ext2を手動で起動して修正をかけた)。

ようやく動作するようになったので、カーネルをアップグレードしてみました(何故いきなり?)。 と、ブート時の圧縮されたlinuxカーネルを解凍するところで、「out of memory」と表示されてストップ。 あれ? 古いカーネルで立ち上げなおして、/etc/lilo.confをみると、initrd=/boot/initrd の記述がない....。 オイオイRAMディスク無しだとさすがにツライだろってことで、付け足してliloを書きなおしたら、今度はちゃんと立ち上がりました。


TurboLinux2.0と3.0の相違点

2.0とどこが変わったかといいますと、私が気づいたのはこれぐらいですか。 既に自分でインストールして実現していたものもありますが、日本語対応がより強化され、glibcに移行した3.0はなかなか気に入りました。


X-TTのインストールに挑戦 ... 中止

X-TTはX-TrueType Serverの略で、その名の通りTrueTypeフォントを直接扱えるようにした X サーバのことです。 フリーの日本語フォントを各サイズ揃えるのは大変ですから、Netscape等で日本語を綺麗に表示するのはなかなか大変な話なのですが、MS WindowsのTrueTypeフォントをXから使えるようになれば一気に話が解決します。 Debianのjpパッケージでは既にX-TTが入っているようですし、Turbo Linuxも3.0でX-TTを実装する予定です。 さて、このX-TTをインストールをするには、

という流れになります。

1.FreeTypeのインストール

freefype-1.1.tar.gzを解凍して、./configure、make、make installでインストール。 ただし、DynaLab のフォントを使用したい場合はX-TTに付属のパッチを当てる必要があるようです。

2.XFree86にパッチを当てる

xtt-1.0.tar.gzを解凍して、XFree86のソースにパッチを当てます。 X-TTをどう使うかによって2通りの方法があるようで、使用するソースファイルも違います。 下の説明は、/usr/src/xtt-1.0 に解凍したxtt関連のファイルとX332xxx.tgzがあるという前提で書いています。

Xフォントサーバを経由して
X-TTを使用
XサーバのみでX-TTを使用
X332src-1.tgzを使う
# ./ext-xfs.sh X332src-1.tgz
# cd xc
# patch -p1 -t < ../xtt-1.0.diff
X332servonly.tgzを使う
# tar xvfz X332servonly.tgz
# cd xc
# patch -p1 -t < ../xtt-1.0.diff

3.XFree86のコンパイル&インストール

パッチをあてたら、XFree86をコンパイルします。基本的にはxc/config/cf/xf86site.defがきちんと書かれていれば、xcディレクトリでmake World、make installでコンパイルできるようです。

補足1 :
X-TTのサイトは99年現在、http://x-tt.dsl.gr.jp/index-ja.html にあるようですね。

EGCSをインストール(1998.10.31)

Turbo Linux 2.0に収録されているのGNU Cコンパイラ(gcc 2.7.2)では、486までのCPUの最適化しか対応しておらず、Pentiumにすら最適化できません(もちろん、x86系CPUはバイナリ互換だから動作しないという意味ではない)。 最新のCPUの最適化にも対応できるCコンパイラとしては、EGCS (Experimental / Enhanced Gnu Compiler System, egcs)、さらにEGCSにパッチをあてる形で提供されているPentium GCC(pgcc)があるようです。 PGCCのサイトによれば「正しくPentium最適化すれば30%の高速化ができる」とのことですから、新しいコンパイラを使って、Linuxのカーネルやアプリをコンパイルし直すだけで、ロハでパフォーマンスアップが図れるということではないですか!(病気が出た...)。 こいつは挑戦しがいがありますな。

最もaggressiveに最適化できるのはPGCC なのですが、その分不安定でオプションによってはしばしば動作しないバイナリをはくことがあるようです。 初心者としてはまずEGCS から挑戦してみることにします。 さっそくEGCSのサイトから現時点での最新版、egcs-1.1bを落としてきてインストールです。 付属のドキュメントに一応目を通して、ふむふむ。 インストールは基本的に簡単です。

# ./configure
# make
# make install

で、/usr/local/bin、/usr/local/libにEGCSがインストールされます(gcc 2.7.2は/usr/bin、/usr/libにあるので上書きされるわけではない)。

# cd /usr/bin
# ln -s ../local/bin/gcc xgcc

とりあえず、適当にシンボリックリンクをはっておいて、と。 さて、カーネルをコンパイルしてみましょうかね。

/usr/src/linuxに移動して、MakefileのCC = gccをxgcc、CFLAGSの-O2を-O3に変更して、arch/i386のMakefileのCONFIG_M586の-m486を削除しました。 さて、とりあえずmake!。

あんまり見た目の変化はありません。 PGCCをテストした時には、最適化レベルを-O6まで上げたら滅茶苦茶にwarningが出まくったのですが。 待つことしばし。 ちゃんとコンパイルが終了したみたいなので、再起動してみました。 おお!ちゃんといつもどおりLinuxが立ち上がっていくじゃないですか。 あ、Xが立ち上がらない....。

コンソールのメッセージがバックグラウンドでどんどん流れてしまうので、何のエラーが起こってるのかもわかりません。 とりあえずrootでログインして、ログをとりながらXを再起動してみましょう。

# startx > /tmp/x.out 2>&1

さて、どんなエラーが...、へ?core dump? どうやら設定の問題というより、XFree86がクラッシュしてるようです。 早速、WWWをまわって情報を収集してみると、こんなん見つけましたけど。

Q.E11- XFree86 crashes on Linux systems with GCC 2.8.x (XFree86のFAQより抜粋 )

If your Linux kernel version is below than 2.1.79 (this includes ALL 2.0.xx kernels), and is compiled with the new GCC 2.8.x, XFree86 will always crash and dump a core file.

This is NOT a problem with XFree86, but rather with the Linux kernel. The problem is in the Linux kernel file /usr/src/linux/arch/i386/kernel/ioport.c. This file is not compiled correctly with GCC 2.8.0. There are a number possible solutions:

  • compile the entire Linux kernel with an older GCC.
  • compile it with 2.8.0, but use an ioport.o file compiled with an older GCC.
  • replace ioport.c with the ioport.c file from linux kernel 2.1.79 or later (this works for the 2.0.xx series kernels as well) and rebuild your kernel.

ふ〜む、こういう理由でTurbo Linuxに収録されているのはgcc 2.7なんだね(私の人柱的実験では、gcc 2.8.1、pgcc 1.1、egcs-1.1bのいずれでもこの障害が発生しました)。 とすると解決するには、ioport.cをどうにかするか、カーネルそのものを2.1.xにしてしまうかですね?(古いgccでコンパイルするのでは、そもそも目的が達せられない)

結局、2.0.35のカーネルをインストールし直し、ioport.cを2.1.88のカーネルに含まれているものに入替えてコンパイルすることで、ちゃんとXが立ち上がるようになりました(2.1.125のioport.cではコンパイルに失敗したので、あえて2.1.88を使いました。 また、ちょうど同じ問題に悩んでいたDr.Kは、別のマシンでgcc 2.7でコンパイルしたオブジェクト、ioport.oを使うという2番目の方法で成功したようです。

そのまま2.0.35に戻るというのは個人的にとても悔しいので、2.1.125に添付されているncr53c8xxドライバを2.0.35に組み込んで使っています。


結局、最適化を進めた効果の程はというと、「わからん」というのが正直なところです。 K6-2/300で既に十分な速度が得られているので、どの程度の効果があるのかわかりにくいですね。 もともと時間がかかるtar.gzファイルの圧縮/展開、gimp等での画像ファイルの処理あたりがわかりやすそうですが、元の環境で計測してないので効果が比較できません。 でもP5-133のマシンで試したときには、全般的なレスポンスが良くなった(ような気がする)。 この際、XFree86から個別のコマンドから、すべて再コンパイルするかね(誰かやってない?バイナリくれないかなぁ)。


WindowsとLinuxのスワップ共有(1998.10.22)

私はLinuxをインストールするときに、パーティションをどう切るべきか分からなかったので適当に設定してしまいました。 具体的には4.3GBのIBM DDRSを、(1)Windowsシステム(sda1, 3GB, FAT32)、(2)Windowsスワップ(sda5, 0.5GB, FAT16)、(3)Linuxシステム(sda3, 0.6GB, ext2)、(4)Linuxスワップ(sda4, 128MB, swap)、の4つのエリアに切り分けていました。

こんな適当な切り方をしたツケがまわってきて、Linuxのメインパーティションであるsda3は最近少々不足気味です。 とはいえ、Windowsで使用しているsda1をまたバックアップしてパーティションを切りなおすのはゴメンだし。 それにしても、Windowsで設定しているスワップ専用パーティション(sda5)に500MB確保してあるのに、Linuxのスワップ・パーティションでも128MBも占有されており、無駄なことこの上ない...。 というわけで、何とか一つのパーティションでWindowsとLinuxのスワップを行いたいと思いまして、試行錯誤を繰り返してきました。 そして、ついにLinuxのswapファイルを、Windowsパーティションに作る方法が開発できました。 Windowsパーティションを壊すこと6回、Linuxを起動不能にし、再インストールすること4回かかりましたが(^^;。

というわけで、めでたくLinuxのswapパーティションは不要になったので、mke2fsでLinux Nativeファイルシステムに変更し、/homeにマウントすることにしました。 今回は、パーティションを節約しただけですが、さらにrc.sysinitにwin386.swpを発見したら削除する処理を書き加え、WindowsのAUTOEXEC.BATにもlinux.swpを発見したら削除するよう付け加えると、ファイルエリアの無駄も減らすことができます。

変更前Windows C:(FAT32) 3.0GBWindows E:(FAT) 0.5GBLinux Native 0.6GB
/
Linux Swap 128MB
変更後Windows C:(FAT32) 3.0GBWindows E:(FAT) 0.5GBLinux Native 0.6GB
/
Linux Native 128MB
/home
補足1 :
rc.sysinitやhaltを書き換えるのはスマートじゃないので、スクリプトに起こして、/etc/rc.d/init.dに置き、起動/終了時に start/stop できるようにしました。 init.dに置くスクリプトはこちら、RedHat系で(多分使える)RPM形式にしたものはパッケージ置き場にあります。試したい人はどうぞ(当然自己責任でね)。

インターネットにPPP接続(1998.10.11)

パシフィックハイテックのサイトによれば「インストール時に PPP に関する設定がされていれば、 X Window System の画面左下にあるモデムアイコンをクリックする事で接続・切断が出来る」そうです。

設定をしなかった場合は、rootでログインしてnetcfgを実行し、PPPの接続先を設定すればいいようです。

う〜ん、こう簡単に話が進むわけはありませんでしたね(笑)。 私の使っているAterm IT65では前面に液晶が付いていて、電話をかけたりすれば分かるようになっています。 しか〜し、まったく電話をかけている気配がありません! (しかも稀に電話がかかる、でもすぐ切れる)。 なんでやねん

よくわからないのでktermをインストールして、直接/dev/cua0(WindowsのCOM1)にATコマンドを送ってみました。 お、ちゃんとOKが帰ってきたぞ? う〜ん、じゃぁATDxxxxxxxでプロバイダに電話してみるか...、あ、ATermの液晶を見るとちゃんと電話をかけてるようです。 なんでPPP接続はしてくれないの〜ん。 って、どうせオイラの設定がどっかで間違ってるんだろうなぁ。


パシフィックハイテックのサイトで、メーリングリストの検索をしたり、他のLinuxユーザさんのページを調べて、ようやく解決しました(やっぱり私の設定ミス(^^;)。 画面右上のアイコン「ネットワーク設定」で「ネットワーク」を選択するか、netcfg & でダイアログを呼び出し、以下の手順で設定しました。

[ Names ] タブ


Hostname   : localhost.localdomain (デフォルト) 
Domain     :  (デフォルト) 
Search for hostnames in additional domains: infoweb.ne.jp (プロバイダに合わせて設定) 
Nameservers: 202.248.2.226
             202.248.2.209 (プロバイダに合わせて設定)
あまりいじるところはないが、設定しておかなかったせいか、最初は接続しても一瞬で切断されて、なかなかうまくいかなかった。

[ Hosts ] タブ


IP       : 127.0.0.1 (デフォルト) 
Name     : localhost (デフォルト) 
Nickname : (デフォルト 
いじるところはないっしょ。

[ Interfaces ] タブ

lo : ループバックデバイス

ppp0: ここが一番の難関。設定してもうまく登録されなかったり、よくわからない。一度ppp0を消去して一から作り直した。

[ Interface Type ]

Interface Type : PPP
次のダイアログでは、

PhoneNumber           : (プロバイダのアクセスポイント)
Use PAP authentication: (チェックして赤にする)
PPP login name        : (プロバイダへのログイン名)
PPP password          : (プロバイダの接続パスワード。何故か丸見えなのがちょっとイヤ)
Customizeを押して続けてもいいみたいだが、なぜか動作が変なので、一度OKを押して、下段のEditボタンを押して編集した。
[ Hardware ]
「Allow any user to (de)activate interface」をチェックして、赤にしておかないとroot以外のユーザが使用できません。他のオプションはそのまま。
[ Communication ]

Modem Init String  : ATQ0V1X3$N1=1&D1 (デフォルトはATZ。Atermのマニュアルに合わせて変更)
Modem Dial Command : プッシュならATDT、ダイアルならATDP、ISDNならATD(デフォルトはATDT)
Phone Number       : (これは既に設定してあるはず。Expect, Sendは特に設定せず)
[ Networking ]
Restart PPP when connectin failsは外した。
[ PAP ]
なぜかユーザー名とパスワードが入ってないことがある。しょうがないので、Appendボタンを押してもう一度設定。(何故かExpect、Sendというダイアログが出て来るが、気にせず)Expectにユーザー名、Sendにパスワードを入れる。上の段のSend usernameにも同じユーザー名を入れておいた。

[ Routing ] タブ

default gateway等を設定するらしいが、空欄のまま何も変えてない。

Linuxでサウンドを(1998.10.10)

Linuxで音を出すには、以下の作業が必要です。

  1. サウンドカードを取り付ける
    サウンドカードをスロットに取り付け、スピーカ等を接続します。 私の場合、Windowsで既に動作しているPCなので省きますが、IRQやDMAなどリソース設定を確認しておくと後で便利。
  2. カーネルの設定を変更して再構築する
    make xconfig等でカーネルの設定を変更し、サウンド機能を組み込んだ新たなカーネルを構築する必要があります。
  3. デバイスファイルを作成する
    /usr/src/linux/drivers/sound にあるREADME.linux の最後の方にあるシェルスクリプトを切り取る。 これをrootで実行することにより、/dev/audio、/dev/sequencer等、サウンド関係のデバイスファイルができあがる
  4. 再構築したカーネルでブートし直す

ただし、Turbo Linux2.0ではインストール時に2、3のプロセスは行われているので不要なようです。 準備ができたらコマンドラインで、
$ cat /usr/X11/lib/X11/afterstep/sounds/bong.au > /dev/audio

等と打ってみましょう。 エラーも無く音が出ればOKです。


と、スムーズにすすめば簡単だったのですが、私の環境ではなかなか音が出ませんでした。 どうしても音を出そうとすると'No such device'エラーが出てしまうのです。 いろいろ情報を集めると、このエラーが出る場合はI/Oアドレスの設定等がハードウェアと一致してない時が多いようです。 そんなこといっても、私のAWE32は一応PnPだし、Turbo Linuxにはisapnpというツールが付いていてブート時にPnPデバイスを設定してくれるはずです。 isapnp.confファイルもちゃんと作りましたし(一から作るより、以下のコマンドで自動で作ったものを修正するほうが楽)、dmesgで確認しても、ブート時にちゃんとAWE32を認識しています。

# pnpdump --config > /etc/isapnp.conf

これで何故動かん?

思わずisapnpをアップグレードしたり、いろいろ悪あがきしてみました。 う〜ん、こんなんじゃダメか...。 デバイスの設定で苦労するなんてすごく久しぶりの話ですねぇ。 Win3.1にLANマネとTCP/IPを組み込んで、コンベンショナルメモリの確保とネットワークカードのIRQ設定に苦労した日々が思い出されます。
というわけで、かなり苦労した末、ようやくたどりついた解決法とは、「PnP設定をOSに任せてしまうオプションをやめてBIOSで制御する」でした(具体的にはBIOS設定の'PnP OS Installed'をNoにする等)。 BIOS のPnP OS InstalledをEnable にすると、BIOS はPnP 機器の設定・初期化を起動に必要なVGA SCSI IDE マザーのリソース等だけにして他のPCIデバイスの設定等をOSにまかせてしまうのです。 だからしてLinuxでうまく動かすためにはDisableにして、BIOSで全デバイスの初期化をしてもらう必要があるのでした。

これでもダメな場合は、/dev/sndstat、/proc/interrupts、/proc/ioportsなんかで現在の状況を確認したり、/etc/conf.modules、/etc/isapnp.confの設定を変更したりしてみましょう。


AWEドライバのインストール

ここまでだと、まだSoundBlaster16相当の機能(PCM入出力、FM MIDI出力)までしか使えません。 AWE32 Sound Driver for Linux / FreeBSDで公開されている、AWE用ドライバとユーティリティをインストールしてみました(追伸:現在のLinuxカーネルにはこのドライバが取り込まれました)。

ドライバをインストールする基本的な手順は以下のとおりです。

  1. (以下は、/usr/src/linux 等にカーネルのソースがあることが前提)
  2. awedrv-x.x.x.tgzを適当なディレクトリで展開
  3. rootになって、解凍したディレクトリで
    # sh ./install.sh でドライバをインストール
  4. # make xconfig (またはmenuconfig)で、カーネルを再設定。
    ただし、"Sound"の項で一番下のほうにある lowlevel sound driver support をチェックする。すると AWE32 wave synth の項目が選択可能になるのでこれもチェックしておく。
  5. いつものようにカーネルとモジュールを再構築してインストール。
    # make;make install;make modules;make modules_install;depmod -a

ドライバがうまくインストールできたら、sfxload ユーティリティでSoundFontをロードし、パッチを当てた playmidi を立ち上げてMIDIシーケンスを聞いてみましょう。 どうです? FM音源のヘボい音じゃなくなってるでしょ?

そして...、いつものごとく素直には終わりませんでした(^^;。 うまくパッチは当たったのですが、sfxloadでSoundFontをロードすると、AWE32 synthがない!とエラーが出てしまいます。 FAQを検索したり、いろいろ調べたところ、先ほどのisapnpのバグできちんとリソースが確保されていないことがわかりました。 というのもAWEのWaveTableシンセは、I/Oアドレスを3つ使いますが、そのうち1つしか /etc/isapnp.conf には書かれていないのです。 しかたがないのでWindowsでリソースを確認して、自分で追加したところ、ようやく正常に動作するようになりました。


-----------------( /etc/isapnp.conf の該当部分)
(CONFIGURE CTL0042/96656 (LD 3
#     ANSI string -->WaveTable<--
  (IO 0 (BASE 0x0620))

  (IO 1 (BASE 0x0a20))   # (自分で追加)
  (IO 2 (BASE 0x0e20)) 

  (ACT Y)
))
-----------------

今回インストールしたAWEドライバに付属しているSoundFontを読込むユーティリティは、ダイナミック・ロード機能を備えていて、標準の512KBしかRAMがない状態でも2MBのSoundFontを読込めます。 私のAWE32は8MBのメモリを搭載していますが、12MB(!)のSoundFontを読込んで、MIDI演奏が可能でした。 すばらしい! 本家Creativeのドライバ・ユーティリティにも、ぜひ組み込んでほしかった機能ですね。


Windows領域のマウント(1998.10.7)

さて、LinuxからWindowsの領域を参照するにはどうしたらいいのでしょう? 実は、FAT16のパーティションであればLinuxをインストールした時点で、既に参照可能になっています(Turbo Linux2.0ではFAT32に未対応)。

私の環境では、sda5だけがFAT16なので、
# mount -t vfat /dev/sda5 /mnt/win

としてマウントすれば、問題無く参照できます(/mnt/winは適当な空のディレクトリ)。 またパシフィック・ハイテックのサポート対象外ですが、Turbo Linux2.0のCDで unsupport の中にある2.0.34のカーネルをインストールすれば、FAT32領域も参照できるようになります。 さらに、私のように手動でやる気があれば、どこかのFTPサイトから現時点での最新版である2.0.35のカーネルでもOKです。

しかし、毎回手動でマウントするのも面倒ですね。 この場合、/etc/fstabに記述すれば、次回の起動からは自動でマウントしてくれます。 ファイルの内容は環境によって異なるはずですし、間違えると起動できなくなるかもしれませんから、既に書いてある部分は書換えない方が無難でしょう。 私が書き加えたのは、6行目以降の部分です。


/dev/sda3     /             ext2    defaults       1 1    
/dev/sda4     swap          swap    defaults       0 0    
/dev/fd0      /mnt/floppy   ext2    noauto         0 0    
/dev/cdrom    /mnt/cdrom    iso9660 noauto,ro      0 0    
none          /proc         proc    defaults       0 0    

/dev/sda1     /mnt/Win/c    vfat    defaults,user  0 0    
/dev/sdb1     /mnt/Win/d    vfat    defaults,user  0 0    
/dev/sdc      /mnt/mo       vfat    noauto         0 0    

文法としては、最初がマウント対象のパーティション又はデバイス、2番目がマウントする場所、3番目がファイルシステム、4番目は属性などオプションです(最後はext2ファイルシステムで、起動時に自動チェックするかどうかの設定等)。
マウント対象、マウントする場所は説明するまでもないでしょう。 「ファイルシステム」はext2がLinux、vfatがWindows、iso9660はCDROMの、それぞれファイルシステムです。 なお、vfatを使ってもWindowsで2バイト文字(漢字等)を含んだファイル名を使用していると文字化けします。 また、vfatでなくmsdosを指定するとロングファイルネームが読めないようです。
4番目のオプションについては man mount でそれぞれ確認しましょう(^^;。


Linuxの終了に関するあれこれ(1998.9.26)

今まで書き忘れていましたが、Linuxをインストールした後、かなり悩んだことがあります。 それは「どうやって終了させたらええねん」です。 あ、そこの方、笑わないでください。

Windowsの世界では、完全にフリーズすることはよくあることですし、ハードディスクのアクセスが止まってからであれば、強制的にリセットしてもあまり問題は発生しません。 UNIXの世界ではこんなマネはタブー(むろんWindowsでも好ましくない)で、きちんとシステムを停止させてからでないと電源断やリセットは禁物です。 システムを停止させるコマンドはshutdownで、通常下のように使います(時間指定もできます)。
# shutdown -h now (直ちにシステムの停止)
# shutdown -r now (直ちにシステムの再起動=reboot)

と、ここまでは友人Dr.Kに質問して知ってました。 が、Xのkterm上でいくらshutdownコマンドを打っても、終了する気配がありません。 Ctrl+Alt+BackSpaceを押すとXから抜けられるらしいのですが、rootであってもXが終了しません。
再びDr.Kに聞いたところ、

その状態はRunlevel5(xdmが自動的に立ち上がって、loginがxdmによって行われるモード)である。 んでもって、Xを切ってもxdmが生きちゃっているから抜けられていない状態である。
init 3で、runlevel 5を抜けてrunlevel 3に移るとxdmが死ぬので、Xを切るとconsole login(テキスト・ログイン)になる。

ということだそうだ(最初、うろ覚えでいい加減なこと書いてたら、Dr.K本人から「俺はそんなこと言ってない!」と怒られたので修正しときます。 申し訳ない)。

う〜む、でもいちいちinitを実行しないとイカンなんてスマートじゃないなぁ。 パシフィックハイテックでFAQをみたら「shutdownできない」というのがやっぱりありました。
ところが、なぜかこのとおりにするとコントロールパネルがフリーズ状態になってしまいます。 結局、Turbo Linuxのデスクトップ設定でRunlevel Configurationを起動し、No5のgpmを削除することにより、kterm上からでもshutdownできるようになりました。

ちなみに私のLinuxのカーネルは2.0.35でAPMに対応してるので、shutdown -hで電源を切ることができるはずなのですができません(なんかエラーが出てシステムが死んでしまう)。 まぁ手動で電源を切っても構わないんですけど、可能なはずのことができないのは気分が悪いですよね。 なぜかなぁ? 会社のノートパソコン(SHARP PC-A445H)にインストールしてテストしたらちゃんと電源落ちたし、もしかしてMVP3のAPMにちゃんと対応してないのかなぁ。


Linuxの起動に関するカスタマイズ(1998.9.25)

Linuxがインストールされると、ハードディスクのブートセクタにLILO(LInux LOader)が書き込まれます。 LILOではハードディスクのパーティション別にブート対象を設定できるので、Linuxや既存のOSを起動させることができるようになります(これにより、例えばWindowsとLinuxの共存が可能になるわけです)。 また、Linuxでは64MB以上のメモリを自動認識できない場合がありますが、この問題が生じる場合、手動で搭載されているメモリの大きさを指定する必要があります。 これらのLILOの設定情報は/etc/lilo.confに記述されており、ここを変更した後、
# /sbin/lilo を実行することによって変更が反映されます。

例えば私の環境では、/etc/lilo.confにはこのように記述されており、WindowsとLinuxのマルチブートが可能です(赤字で記述したラベルをLILOで入力すると、太字で示したパーティションから起動する)。 また、先に記述されているパーティションの優先順位が高いので、Linuxがデフォルトで起動するようにするには、image=/boot/vmlinuzに続くブロックを、other=/dev/sda1より前に移動して、再度liloを実行すればOKです。


boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
other=/dev/sda1
        label=Windows
        table=/dev/sda
image=/boot/vmlinuz
        label=linux
        root=/dev/sda3
        initrd=/boot/initrd
        append="mem=128M"        # 128MBのメモリがあることを指定
        read-only

ハードディスクのパーティション構成

私の環境では、2台のSCSIハードディスク(DDRS-34560WとDCAS34330W)が搭載されており、以下のようなパーティション構成となっています(IDEのハードディスクならhdxx)。

LinuxWindows大きさ概要
/dev/sda1C:(FAT32)3.0GBDDRS上の基本DOS領域
/dev/sda2 - 0.5GBDDRS上の拡張DOS領域
/dev/sda3 - 0.6GBDDRS上のLinuxネイティブ領域
/dev/sda4 - 128MBDDRS上のLinuxスワップ領域
/dev/sda5E:(FAT16)0.5GBDDRS上の論理DOSドライブ
/dev/sdb1D:(FAT32)4.2GBDCAS上の基本DOS領域

またLILOを使わず、DOSレベルからLOADLINを用いてLinuxを立ち上げる方法もあります。

私の場合、従来からDOS6.x以降のマルチコンフィグを用いて、複数の起動メニュー(Windowsの起動、ASPIドライバをロードしたDOS、ほとんどTSRプログラム等を読込まないクリーン状態のDOS等)を使っています。 この上、LILOも使うと起動時の選択が2段階になって面倒なので、LILOを無効にしてLOADLINを使用しています。

LOADLIN.EXEはTurboLinuxのCDのDOSUTILSディレクトリに格納されています。 例えばDOSのC:\LINUXディレクトリにLOADLIN.EXEをコピーし、Linuxから /boot/vmlinuz、 /boot/initrd をコピーした上で、以下のように記述したBOOT.BATファイルを作れば、簡単にDOSからLinuxを立ち上げることができます。

loadlin vmlinuz root=/dev/sda3 initrd=initrd vga=normal mem=128M

LILO:
LInux LOaderの略。
LILOの無効化:
DOSからFDISK /MBRによりマスターブートレコードを初期化すればよい。
パーティション:
ハードディスク上の切り分けられた領域。物理的には4GBの1台のハードディスクを、2GBのハードディスクが2台あるように扱うことができる。 パーティションを分けることにより、ファイルシステムが異なるWindowsとLinuxが同一のハードディスク上に共存できるようになる。

SCSIカード(DC390F)のドライバのインストール(1998.9.23)

私はSCSIカードとして、TekramのDC390Fを使用していますが、バージョン2.0.33、2.0.35のLinuxカーネルにはDC390Fのドライバは含まれていません。 ただDC390Fに搭載されているチップ(Symbios 53c875)から、NCR53c8xxシリーズ用のドライバを用いれば問題無く動作するようです。

しかし、TekramではLinuxプラットフォームで使用可能なDC390シリーズ用ドライバも配布しているので、どうせならこちらを使ってみることにしました。

  1. 私の使用環境に適合すると思われるカーネル2.0.31以降のRedhat用のドライバファイル(Pw2_0_31.zip)をゲットしました。
  2. Pw2_0_31.zipをpkunzip等で解凍して、できあがったPw2_0_31.gzをフロッピーにコピーします。
  3. Linuxを立ち上げ、先ほどのフロッピーをマウントしてファイルを/usr/srcにコピー
    # mcopy a:Pw2_0_31.gz /usr/src
  4. gzipでファイルを解凍
    # cd /usr/src
    # gzip -d Pw2_0_31.gz
  5. パッチをあてる
    # patch -p0 < Pw2_0_31
  6. ここからは通常のカーネルアップグレードの手順と同様。ただし、xconfigで以下の設定は変える。
    • PCI bios supportは"Yes"
    • SCSI supportは"Yes"
    • SCSI disk supportは"Yes"
    • SCSI tape supportは"Yes"
    • SCSI CD-ROM supportは"Yes"
    • SCSI generic supportは"Yes"
    • Tekram DC-390W/U/F (T) SCSI supportは"Yes" (うまくパッチが当たるとこの項目が増える)
    • NCR53c7,8xx SCSI supportは"No"
    • NCR53C8XX SCSI supportは"No"

Linuxの起動時やイニシャル・RAMディスク作成時に /lib/ncr53c8xx.o が無いとエラーが出る場合があります。 DC390ドライバをインストールする前に使用していたNCR53C8xxドライバの設定が残っているためです。 動作そのものには問題はないけど気分がすっきりしないので探してみたら、/etc/conf.modules の中にいくつかのドライバとその設定が記述されており、その中にNCR53C8xxの部分を修正したら直りました。


いきなりカーネルアップグレード(1998.9.19)

早速Linuxで遊ぼうと思いきや、Windowsパーティション(FAT32)がマウント・参照できません。 これではWindowsとのデータ交換に支障をきたしますし、どうしたものかと思案していると、あれ?友人の環境では問題なくマウントできます。 ところで、インストールしたばかりのTurboLinuxのカーネルは2.0.33ですが、友人は2.0.34にアップグレードしていました。 おそらくカーネルのバージョンの違いによるものと見当をつけ、この友人(仮にDr.Kとしましょう)の助け、というか全面的な指示を受けてカーネルのバージョンアップにチャレンジすることにしました。

今回行った作業の流れは以下のとおりですが、実際には文字で書くほど流暢に事が進んだわけではありません。 失敗して起動できなくなることもあり得るので、ブートフロッピーを作ってから作業を行うことを強くお奨めします。

いやはやファイルをコピーしては再コンパイル、またエラー、と何度も繰り返す羽目になりましたが、なんとか終了しました。 どうやら、as86やld86など開発環境、stdio.hなどライブラリファイルが存在しないようです(もしかしたらlibc等のRPMファイルをインストールし直せばきちんと対処できるのかも)。

これでOKだろうと再起動したところ、いきなり設定をミスっていて、Linuxがブート不能になったりしましたが、フロッピーでブートして修正し、事無きを得ました。

今回はDr.K氏には誠にお世話になりました。 我が家は明日から旅行の予定だというのに深夜までPCと格闘し、妻に冷たい目で睨まれドヤされる羽目になったのは、もちろん私自身の身から出たサビです。 しかし、問題に突き当たるとそれを解決するまでは決して途中で放り投げたりしない、辛抱強いDr.Kのおかげでもあることはいうまでもありません(^^;。

まぁこれに懲りずに今後ともよしなに(誰に?)。

通常の場合、アップグレードの流れはこんな感じです。
  1. 落としてきたファイル(linux-2.0.35.tar.gz)を/usr/srcにコピー
  2. # tar -xzf linux-2.0.35.tar.gz でファイルを展開
  3. /usr/src/linux/Makefileをエディタで開き、#INSTALL_PATH=/bootを探して、行頭の#を削除する
  4. # make mrproper で設定初期化(初期化する場合のみ)
  5. # make xconfig でカーネルの諸設定
  6. # make dep; make clean でファイルの依存関係を洗い、不要なものを消去
  7. # make zImage でカーネルをプレコンパイル
  8. フロッピーを入れて、# make zdisk; make zlilo で新しいカーネルのブートディスクを作成
  9. フロッピーを入れたままリブート。「モジュールのバージョンが異なる」旨メッセージが出るが無視。カーネルがPanicを起こさずに起動できればOK。
  10. 再び/usr/src/linuxに移動して、# make; make install で新しいカーネルと起動環境をハードディスクに書き込む。
  11. # make modules; make modules_install; depmod -a でモジュールをコンパイル
  12. フロッピーを抜いてリブート。うまく起動できればOK。
さらにTurboLinuxでサポートされRPM化されたものを用いる場合は、かなり簡単にアップグレードできるようです(パシフィックハイテックのFAQより)。
  • kernel-modules 以外のパッケージの場合:
    1. 最新のパッケージを入手
    2. 以下のコマンドを実行
      rpm -Uvh --force --nodeps ファイル名
  • kernel-modules の場合:
    1. 最新のパッケージを入手
    2. 以下のコマンドを実行
      rpm -ivh --force --nodeps ファイル名
    3. パッケージインストール終了後、以下のコマンドを実行
      mkinitrd -f /boot/initrd 2.0.33 (カーネルのバージョン)
      lilo
    4. 再起動
ちなみにLinuxカーネルのバージョン番号の構成は、最初の桁がメジャーバージョンで、2番目の桁はマイナーバージョンですが、マイナーバージョンが偶数のものは安定稼動重視バージョン、奇数のものは新機能の実装テスト等のための不安定(?)バージョンであることを示します。 最後の3桁目の番号はリビジョン番号で、数が大きいほどバグフィックスを経ていることを示します。 2.0.33と2.0.35はともに安定稼動バージョンのカーネルで、両者の違いは細かなバグフィックスのみ、機能面での追加はありません。

Turbo Linuxのインストール(1998.9.15)

  1. Linux用のパーティションの準備

    Linuxをインストールするにあたっては、まずハードディスク中にLinux用のパーティションを作成する領域を空けておく必要があります。 これには大別して2つの方法があります。

    • Windows付属のFDISK等で一度パーティションを削除し、構成し直す
      もっとも一般的な方法(?)は、Windowsに付いてくるFDISKで、現在のパーティションをいったん削除し、新たに構成しなおす方法です。 ただし、ハードディスクにもともとあったデータは全て消去されてしまいます。 もしWindowsを使いたいなら、Linuxをインストールした後、再インストールする必要があります。
    • 他のユーティリティを使い、既存データを保持したままパーティション構成を変更する
      Windowsの再インストールなんてゴメンだという方は多いでしょう(当然か)。 既存のデータを保持したままパーティション構成を変更するユーティリティとしては、市販されているPARTITION MAGIC等があります。 Turbo Linux LiteのCDにもフリーのツール、FIPS(First nondestructive Interactive Partition Splitting program)が収録されています(CDの\DOSUTILS\FIPS.EXE)。
      これらのユーティリティは、ハードディスクの空白部分を切り離して別パーティションを作成するので、実行前にWindowsでデフラグを使用して連続した空白領域を作る必要があります。

    私の場合、データを消さずに処理する2番目の方法を実行しました。 Win95/98のFAT32に対応しているらしい'97年12月付のVer1.5bを使用したところ、確かにパーティションは分かれたものの、FDISKとWindows上でディスク構成情報が狂ってしまいました(FDISKで3GBの領域がWindows上では4.3GBに見える。scandiskでもエラー無し)。 なぜか正常(?)動作してはいるものの、絶対にヤバそうなので結局、ハードディスクの内容を別のディスクにコピーして、まっさらにしてやり直すことになりました。 こういうときに複数のハードディスクがあるとバックアップがものすごく楽ですから、巨大なハードディスクが1基のシステムよりも、半分の大きさのディスクが2基ある方が私は使いやすいと思っています。

    どちらの方法をとるにせよ、パーティションを変更するときは必ずデータをバックアップしてから作業を行いましょう。

  2. インストーラの起動

    Linuxをインストールするには、いくつかの方法がありますが、おそらくフロッピーを使う最も原始的な方法が一番確実でしょう。 いずれにせよ英語モードのDOS環境でインストーラを起動しましょう(日本語DOSモードで実行すると画面が何も見えません)。

    • インストールCD-ROMでブートする(私の場合は失敗)
    • ハードディスクにCDのDOSUTILS以下をコピーして、シングルモードDOSで立ち上げてDOSUTILS\AUTOBOOT.BATを起動する(IDEドライブがあればこれでもうまくいくが、ALL SCSIのせいか1号機では失敗)
    • CDのDOSUTILSのMKBOOT.BAT、MKEHW.BAT、MKSUPP.BATを使い、インストール用フロッピー3枚を作成してブートする
  3. Linuxのインストール

    あとは基本的には日本語で表示される指示に従えば、インストールが終了するものと思います(いきなり省略(^^;)。
    FDISKでパーティションを作るところだけ説明すると、Linux用の基本パーティションとスワップパーティションを作成する必要があります。 スワップパーティションを作るには、一度Linux Nativeパーティションを作りIDをスワップ用に変更します(83→82)。 なお、スワップの大きさは物理メモリの2倍程度あればよいようですが、Linuxが一度にアクセスできるスワップ領域は128MBが限度らしいので、それ以上必要な場合は128MBの領域を複数作れば良いようです。


結局、紆余曲折を経て、WindowsでC:ドライブとして使用されていたDDRS 4.3GBのパーティション構成は、Linuxのインストール前後でこんな感じに変更されました。

使用前Windows C:
(FAT32)4.3GB
FIPS実行後Windows C:(FAT32) 3.0GB
4.3GBと誤認識
(空白)1.3GB
初期化してFDISKWindows C:(FAT32) 3.0GB(空白)1.3GB
Linuxインストール後Windows C:(FAT32) 3.0GBWindows E:(FAT) 0.5GBLinux Native 0.6GBLinux Swap 128MB

Return to Previous page一つ前のページに戻る / Return to topこのページのTOPに戻る