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ファイルを発見できましたので、早速実験してみました。
うまく動きますと、3.の実験で、fireデモを実行すると、Windowsでは見慣れた3dfxロゴが表示され、このようなデモ画面が表示されます。めでたし、めでたし。
画面にしたがってキーを押すと移動したり、フォグやテクスチャなどの条件を変えることができます。
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-0.2.0-pre10p2.tar.gz |
install手順 |
# ./configure # make; make install # ./snddevices |
備考 |
|
ソース名 | alsa-lib-0.1.3.tar.gz |
install手順 |
# ./configure # make; make install |
備考 |
ソース名 | 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部分の再生能力ですが、どうでしょう? 私も大した音感の持ち主ではありませんし、微妙なニュアンスを文章で伝えるのは難しいですが、「音が豊かになった」ような気はします(^^;。
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を書きなおしたら、今度はちゃんと立ち上がりました。
2.0とどこが変わったかといいますと、私が気づいたのはこれぐらいですか。 既に自分でインストールして実現していたものもありますが、日本語対応がより強化され、glibcに移行した3.0はなかなか気に入りました。
X-TTはX-TrueType Serverの略で、その名の通りTrueTypeフォントを直接扱えるようにした X サーバのことです。 フリーの日本語フォントを各サイズ揃えるのは大変ですから、Netscape等で日本語を綺麗に表示するのはなかなか大変な話なのですが、MS WindowsのTrueTypeフォントをXから使えるようになれば一気に話が解決します。 Debianのjpパッケージでは既にX-TTが入っているようですし、Turbo Linuxも3.0でX-TTを実装する予定です。 さて、このX-TTをインストールをするには、
という流れになります。
freefype-1.1.tar.gzを解凍して、./configure、make、make installでインストール。 ただし、DynaLab のフォントを使用したい場合はX-TTに付属のパッチを当てる必要があるようです。
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 |
パッチをあてたら、XFree86をコンパイルします。基本的にはxc/config/cf/xf86site.defがきちんと書かれていれば、xcディレクトリでmake World、make installでコンパイルできるようです。
gcc -O -ansi -pedantic -I../.. -I../../exports/include -Dlinux LinuxMachineDefines -D_POSIX_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -DX_LOCALE -DFUNCPROTO=15 -DNARROWPROTO -c makestrs.c -o makestrs.o
gcc: cannot specify -o with -c or -S and multiple compilations
gcc -O -ansi -pedantic -I../.. -I../../exports/include -Dlinux LinuxMachineDefines -D_POSIX_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -DX_LOCALE -DFUNCPROTO=15 -DNARROWPROTO -c makestrs.c -o makestrs.o
gcc: LinuxMachineDefines: No such file or directory
#ifdef i386Architecture
#define LinuxMachineDefines -D__i386__
/usr/X11R6/bin/Xwrapper: error in loading shared libraries
libfont.so.1: cannot open shared object file: No such file or directory
おげ、エラーでした。
う〜ん、Xwrapperも、libfont.so.1も当然あります。
libfontが参照している共有ファイルが見つけられないってことなのかなぁ。
よくわかりませんがmake Worldのログを眺めてたら、'#error You must use Tk 4.1 or newer'ってエラーが出てました。
むむぅ、host.defで指定した/usr/libにはlibtk4.2.soがあるのだが)。
くじけそうな心にムチ打って、tcl/tkをもう一度インストールして再挑戦。
さっきのエラーは消えたけど、やっぱり再起動後にlibfont.so.1のエラーが出てXが上がりません。
おお!久しぶりにxdmのログイン画面が出てきた(ToT)。Turbo Linuxがカスタマイズした画面じゃなくなって地味になったけど、そんなの別にかまいませんね。 早速ログイン!あれ?そのままログイン画面に戻ってしまうぞ? う〜む、Ctrl+Rでコンソールからstartxしてみるか。げ、Xが落ちてコンソールに戻ってしまった...。
/usr/X11R6/bin/afterstep: can't load library 'libXext.so.6'
waiting for X server to shut down FreeFontPath: FPE "/usr/X11R6/lib/X11/fonts/misc/" refcount is 2, should be 1; fixing.
結論からいえば、X-TTのパッチを当てたXFree86をlibc5ベースでコンパイルするか、XFree86やX上のアプリをすべてglibcベースでコンパイルし直すという途方もない作業が必要になる!
や、やめよう。libc5に戻るのは何か納得いかないし、全部作りなおすのはスゴすぎる。 X-TTを採用するTurbo Linux3.0を待つか、既に入っているらしいDebianに鞍替えしよう。
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で、/usr/local/bin、/usr/local/libにEGCSがインストールされます(gcc 2.7.2は/usr/bin、/usr/libにあるので上書きされるわけではない)。
# cd /usr/binとりあえず、適当にシンボリックリンクをはっておいて、と。 さて、カーネルをコンパイルしてみましょうかね。
/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:
|
ふ〜む、こういう理由で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から個別のコマンドから、すべて再コンパイルするかね(誰かやってない?バイナリくれないかなぁ)。
私は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回かかりましたが(^^;。
最初はmkswap、swapon等のmanをみて、自分なりに研究してやってみました。
どうやらmkswapコマンドは、スワップ専用パーティションにスワップを作るだけでなく、既存のパーティションに「スワップファイル」を作ることができるようです(これができないと、そもそも話にならない)。
mount -t vfat /dev/hda5(FAT領域) /mnt/swap
mkswap /mnt/swap/linux.swp 65216
swapon /mnt/swap/linux.swp
早速、FATパーティションをマウントし、スワップファイルを試しに64MBほど作ってみました。
お、何のエラーも無くいけたじゃん。
freeコマンドで確認しても確かにスワップエリアが、先ほど確保したファイルの分だけ増えています。
でも、再起動してWinを立ち上げると、そのパーティションはアンフォーマットされてました。
は、は、は。Windowsでもスワップ専用として使っているパーティションなので、この時は実害はありませんでしたが...。
途中まではうまくいってましたから、もう少し工夫すれば成功しそうです。 というわけで、イジクリまわしていろいろ試していたら、Linuxが起動できなくなりました。 起動中に「rootのパスワードを入れるとメンテナンスする。Ctrl+Dを入れると継続」というような英語のメッセージが表示される状態です。 rootでメンテモードにすると、ファイルシステムがread-onlyでマウントされており、設定変更ができません...。 ならばと再起動して、今度はCtrl+Dを押すと、あ、リブートされた...。 がび〜ん。 泣く泣くLinuxの再インストールに踏み切りました。 (こっから回復させる技ってあるのかいな?今度、Dr.Kに聞いてみるか)
/usr/docとかの下にSwap-Space.txtというのをmuleで開いてみると、「WindowsとLinuxでスワップを共有する方法」というのがありました。 まさにこれじゃん! 具体的な手順はドキュメントを各自参照していただくとして、これがまたなかなか複雑な状態です。 しかも、ちょっと古い話(Win3.1とLinuxの場合の説明)です。 まぁ参考にはなるだろう、と試行錯誤をしていたら...、が〜ん、今回もブート時に「rootのパスワードを入れるとメンテ〜」というメッセージ。 またやってしもうた! 今回は原因はわかっています。 /etc/fstab をconsoleでいじっていた時に、/ へのマウント設定を消去してしまったからです。 何故そんなバカなことをと聞かれるとツライのですが、私が実験中の環境ではなぜかXからコンソールに落ちると画面がズレてしまい、表示されるものと実体が異なってしまう場合があるのです。 で、この辺だろうと適当に書換えたら、/ の部分が書き換わってしまったわけで。
まぁその他いろいろ試行錯誤をしまして、さんざんLinuxの再インストールを行いました。 もうここまできたら何が何でも成功させたる! 方法論としては、最初の独学の場合はかなり成功してたから、あとはドキュメントが行っている方法を解析して、参考にしてみればうまくいくかも。 何回か試行錯誤して、最終的にたどりついた方法はこんな流れです。
私がテストした方法でも、Linuxを動かしている間は正常に動いてましたから、どうやら終了時に「スワップを停止する」あたりがカギのようです。 で、私が修正したスクリプトは以下のとおりです。 私の場合はこれでうまくいきましたが、このあたりのスクリプトを書き間違えると、Linuxが起動不能になるかもしれません。
起動プロセス( /etc/rc.d/rc.sysinit ) =中略=
# Mount all other filesystems (except for NFS). Contrary to standard usage,
=以降、続く=
|
終了プロセス( /etc/rc.d/init.d/halt ) =中略=
# Turn off swap, then unmount file systems.
=以降、続く=
|
マウント対象記述ファイル( /etc/fstab ) =中略= =以降、続く= |
というわけで、めでたくLinuxのswapパーティションは不要になったので、mke2fsでLinux Nativeファイルシステムに変更し、/homeにマウントすることにしました。 今回は、パーティションを節約しただけですが、さらにrc.sysinitにwin386.swpを発見したら削除する処理を書き加え、WindowsのAUTOEXEC.BATにもlinux.swpを発見したら削除するよう付け加えると、ファイルエリアの無駄も減らすことができます。
変更前 | Windows C:(FAT32) 3.0GB | Windows E:(FAT) 0.5GB | Linux Native 0.6GB / | Linux Swap 128MB |
変更後 | Windows C:(FAT32) 3.0GB | Windows E:(FAT) 0.5GB | Linux Native 0.6GB / | Linux Native 128MB /home |
パシフィックハイテックのサイトによれば「インストール時に 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を消去して一から作り直した。
|
[ Routing ] タブdefault gateway等を設定するらしいが、空欄のまま何も変えてない。 |
Linuxで音を出すには、以下の作業が必要です。
ただし、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の設定を変更したりしてみましょう。
ここまでだと、まだSoundBlaster16相当の機能(PCM入出力、FM MIDI出力)までしか使えません。 AWE32 Sound Driver for Linux / FreeBSDで公開されている、AWE用ドライバとユーティリティをインストールしてみました(追伸:現在のLinuxカーネルにはこのドライバが取り込まれました)。
ドライバをインストールする基本的な手順は以下のとおりです。
ドライバがうまくインストールできたら、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のドライバ・ユーティリティにも、ぜひ組み込んでほしかった機能ですね。
さて、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をインストールした後、かなり悩んだことがあります。 それは「どうやって終了させたらええねん」です。 あ、そこの方、笑わないでください。
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がインストールされると、ハードディスクのブートセクタに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)。
Linux | Windows | 大きさ | 概要 |
---|---|---|---|
/dev/sda1 | C:(FAT32) | 3.0GB | DDRS上の基本DOS領域 |
/dev/sda2 | - | 0.5GB | DDRS上の拡張DOS領域 |
/dev/sda3 | - | 0.6GB | DDRS上のLinuxネイティブ領域 |
/dev/sda4 | - | 128MB | DDRS上のLinuxスワップ領域 |
/dev/sda5 | E:(FAT16) | 0.5GB | DDRS上の論理DOSドライブ |
/dev/sdb1 | D:(FAT32) | 4.2GB | DCAS上の基本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私はSCSIカードとして、TekramのDC390Fを使用していますが、バージョン2.0.33、2.0.35のLinuxカーネルにはDC390Fのドライバは含まれていません。 ただDC390Fに搭載されているチップ(Symbios 53c875)から、NCR53c8xxシリーズ用のドライバを用いれば問題無く動作するようです。
しかし、TekramではLinuxプラットフォームで使用可能なDC390シリーズ用ドライバも配布しているので、どうせならこちらを使ってみることにしました。
Linuxの起動時やイニシャル・RAMディスク作成時に /lib/ncr53c8xx.o が無いとエラーが出る場合があります。 DC390ドライバをインストールする前に使用していたNCR53C8xxドライバの設定が残っているためです。 動作そのものには問題はないけど気分がすっきりしないので探してみたら、/etc/conf.modules の中にいくつかのドライバとその設定が記述されており、その中にNCR53C8xxの部分を修正したら直りました。
早速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のおかげでもあることはいうまでもありません(^^;。
まぁこれに懲りずに今後ともよしなに(誰に?)。
通常の場合、アップグレードの流れはこんな感じです。
|
さらにTurboLinuxでサポートされRPM化されたものを用いる場合は、かなり簡単にアップグレードできるようです(パシフィックハイテックのFAQより)。
|
Linuxをインストールするにあたっては、まずハードディスク中にLinux用のパーティションを作成する領域を空けておく必要があります。 これには大別して2つの方法があります。
私の場合、データを消さずに処理する2番目の方法を実行しました。 Win95/98のFAT32に対応しているらしい'97年12月付のVer1.5bを使用したところ、確かにパーティションは分かれたものの、FDISKとWindows上でディスク構成情報が狂ってしまいました(FDISKで3GBの領域がWindows上では4.3GBに見える。scandiskでもエラー無し)。 なぜか正常(?)動作してはいるものの、絶対にヤバそうなので結局、ハードディスクの内容を別のディスクにコピーして、まっさらにしてやり直すことになりました。 こういうときに複数のハードディスクがあるとバックアップがものすごく楽ですから、巨大なハードディスクが1基のシステムよりも、半分の大きさのディスクが2基ある方が私は使いやすいと思っています。
どちらの方法をとるにせよ、パーティションを変更するときは必ずデータをバックアップしてから作業を行いましょう。
Linuxをインストールするには、いくつかの方法がありますが、おそらくフロッピーを使う最も原始的な方法が一番確実でしょう。 いずれにせよ英語モードのDOS環境でインストーラを起動しましょう(日本語DOSモードで実行すると画面が何も見えません)。
あとは基本的には日本語で表示される指示に従えば、インストールが終了するものと思います(いきなり省略(^^;)。
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 | ||
初期化してFDISK | Windows C:(FAT32) 3.0GB | (空白)1.3GB | ||
Linuxインストール後 | Windows C:(FAT32) 3.0GB | Windows E:(FAT) 0.5GB | Linux Native 0.6GB | Linux Swap 128MB |