次のページ 前のページ 目次へ

3. IrDA対応作業

3.1 IrDA対応作業について

Vine Linux 2.0CR で使用しているカーネルは 2.2.14 です。 このバージョンのカーネルには 既に IrDA 対応のモジュールが組み込まれていますが、 試してみたところうまく動作しないようでしたので、 Linux-IrDA Project のサイトから 新しいIrDAパッチユーティリティを落としてきて、 対応カーネルの作成(3.2章)組み込み(3.3章)が必要となります。

Vine Linux の kernel-2.2.16-0vl1 以降であれば、 既に正常に動作するIrDAパッチが当たっているようですので、 irda-utilsの作成と導入(3.4章)からお読みください。

光通信は使わずケーブル接続だけで良いのであれば、 この章は飛ばして次のページへ進んでもらって結構です。

3.2 IrDA対応カーネルの作成

単にIrDAパッチを当てるだけであれば /usr/src/linux/ 下で直接行えば済む話ですが、 開発環境を持たないマシンに入れる場合には mkkpkgを使ってカーネルパッケージとした方が扱いやすいので、 それに従ってやってみましょう。

※以下、グレーの領域では $ で始まる行はユーザ権限での実行、 # で始まる行は管理者権限での実行、 それ以外は画面に表示されたメッセージと思って読んでください。 枠で囲まれた領域は設定ファイルの記述内容などを示しています。

カーネルパッケージのソースRPMを入れたCDを用意し、mkkpkg を実行。

$ su -
# mount /mnt/cdrom
# mkkpkg /mnt/cdrom/SRPMS/kernel-2.2.14-1vl6.src.rpm
executing "rpm -ivh /mnt/cdrom/SRPMS/kernel-2.2.14-1vl6.src.rpm"
リビジョン番号を変更(例えば 1vl6 を 1vl6.1 のようにする)

Input your Kernel Revision [current: 1vl6] 1vl6.1
  Your kernel Revision is [revision: 1vl6.1]. OK? [y/n] y

To edit /usr/src/redhat/SPECS/kernel-2.2.14-1vl6.1.spec, Push "Ctrl+Z" to suspend.
  (When finished to edit, type "fg" to continue.)
SPECファイルの編集をするか聞かれるので CTRL-Z で一時停止するか、 別な端末エミュレータを起動し、そちらで SPECファイルを編集する (ここでは別な端末エミュレータ上で編集を行うことに)。

$ su
# cp ~/patch-2.2.14-irda1.gz /usr/src/redhat/SOURCES/
# cd /usr/src/redhat/SPECS
# vi kernel-2.2.14-1vl6.1.spec


[変更内容]
Patch*: 行を見ていき、最後に次を追加する(今回は Patch502: 行の次に追加)

Patch600: patch-2.2.14-irda1.gz

%prepセクションの最後を探し、今のパッチ適用処理を追加(今回は %patch11 -p1 の後、rm */*.patch の前に追加)

%patch600 -p1

編集終わったらセーブして終了し、 先程一時停止していた画面の方で Enter キーを押して継続させる。

Do you want to re-expand sources/patches with new SPEC file? (y/n) y

y と答えて進めると、ソースの展開とパッチ当て等が行われる。

executing "rpm -bp /usr/src/redhat/SPECS/kernel-2.2.14-1vl6.1.spec"
+ umask 022
+ cd /usr/src/redhat/BUILD
+ rm -rf /var/tmp/kernel-2.2.14-1vl6.1-root
+ cd /usr/src/redhat/BUILD
+ rm -rf linux
+ /usr/bin/bzip2 -dc /usr/src/redhat/SOURCES/linux-2.2.14.tar.bz2
+ tar -xf -

 (中略)

+ cd ..
+ mv emu10k1/docs Documentation/emu10k1
+ exit 0
Success.

Do you want to build SRPM ? (If no, only RPM will be built) (Y/n) y
と、Success と出て正常終了したのを確認。 ソースRPMファイルを作るか聞いてきているので、y と答えることにする (バイナリRPMファイルだけで良ければ n にしても構いません)。 続けて、

Ready for make "menuconfig"
[Push enter to continue]
と聞いてくるので、Enter を押してカーネルコンフィギュレーションに進んでください (詳細については他のドキュメントを参照)。

Vine Linux 2.0 のデフォルト設定であれば、 何もせずこのまま保存しても構いません。 モジュール利用可能、ネットワーク利用可能、 IPマスカレード可能、 IrDA関連もモジュールで全て可能 の設定にしてもらえれば良いはずです。 その他はお使いのマシン環境に合わせて好きなように設定してください。

下記に一部の例を示します。

Code maturity lovel options --->
    [*]Prompt for development and/or incomplete code/drivers

Loadable module support --->
    [*] Enable loadable module support                                 
    [*] Set version information on all symbols for modules             
    [*] Kernel module loader                                           

General setup
    [*] Networking support                                         

Networking options
    <*> Packet socket                                                        
    [*] Kernel/User netlink socket                                           
    [*] Routing messages                                                     
    <*> Netlink device emulation                                             
    [*] Network firewalls                                                    
    [*] Socket Filtering                                                     
    <*> Unix domain sockets                                                  
    [*] TCP/IP networking                                                    
    [*] IP: multicasting                                                     
    [ ] IP: advanced router                                                  
    [ ] IP: kernel level autoconfiguration                                   
    [*] IP: firewalling                                                      
    [*] IP: firewall packet netlink device                                   
    [*] IP: transparent proxy support                                        
    [*] IP: masquerading                                                     
    --- Protocol-specific masquerading support will be built as modules.     
    [*] IP: ICMP masquerading                                                
    --- Protocol-specific masquerading support will be built as modules.     
    [*] IP: masquerading special modules support                             
     IP: ipautofw masq support (EXPERIMENTAL)                             
     IP: ipportfw masq support (EXPERIMENTAL)                             
     IP: ip fwmark masq-forwarding support (EXPERIMENTAL)                 
    [*] IP: masquerading virtual server support (EXPERIMENTAL)               
    (12) IP masquerading VS table size (the Nth power of 2)                  
     IPVS: round-robin scheduling                                         
     IPVS: weighted round-robin scheduling                                
     IPVS: least-connection scheduling                                    
     IPVS: weighted least-connection scheduling                           
    [ ] IP: optimize as router not host                                      
     IP: tunneling                                                        
     IP: GRE tunnels over IP                                              
    [*] IP: broadcast GRE over IP                                            
    [ ] IP: multicast routing                                                
    [*] IP: aliasing support                                                 
    [ ] IP: ARP daemon support (EXPERIMENTAL)                                
    [*] IP: TCP syncookie support (not enabled per default)                  
    --- (it is safe to leave these untouched)                                
     IP: Reverse ARP                                                      
    [*] IP: Allow large windows (not recommended if <16Mb of memory)         

IrDA (infrared) support --->
     IrDA subsystem support                                   
    --- IrDA protocols                                           
       IrLAN protocol                                         
       IrCOMM protocol                                        
    [*]   Ultra (connectionless) protocol (NEW)                  
    [*]   IrDA protocol options                                  
    ---   IrDA options                                           
    [*]     Cache last LSAP                                      
    [*]     Fast RRs                                             
    [ ]     Debug information                                    
    [*]   IrLAP compression                                      
    ---     IrDA compressors                                     
         Deflate compression (EXPERIMENTAL)                   
    Infrared-port device drivers  --->                           
    --- SIR device drivers                                        
     IrTTY (uses Linux serial driver)                          
     IrPORT (IrDA serial driver)                               
    --- FIR device drivers                                        
     NSC PC87108/PC97338                                       
     Winbond W83977AF (IR)                                     
     Toshiba Type-O IR Port                                    
     SMC IrCC                                                  
    --- Dongle support                                            
    [*] Serial dongle support                                     
       ESI JetEye PC dongle                                    
       ACTiSYS IR-220L and IR220L+ dongle                      
       Tekram IrMate 210B dongle                               
       Greenwich GIrBIL dongle                                 
       Parallax LiteLink dongle                                
       Adaptec Airport 1000/2000 dongle (NEW)                  
       Old Belkin dongle (NEW)                                 
カーネルコンフィギュレーションが終われば、 後はカーネルパッケージの作成です。

 Now we are prepared for executing
  rpm -ba /usr/src/redhat/SPECS/kernel-2.2.14-1vl6.1.spec --target i386 .

  Log output goes to /tmp/kernel-rebuild.{log,err}.
  You can read them with following sequence:
    1. Push "Ctrl+Z" to suspend the next long process.
    2. Type "bg" to continue background.
    3. Use "less" to print /tmp/kernel-rebuild.{log,err}.
    3.1 Push "Shift+F" to "Forward forever; like tail -f".
    3.2 If you want to stop, push "Ctrl+C".
    X. If you are using X, you can read log thru another term window.

Ready for Action?
[Push enter to continue]
上記のように表示されますので、Enter を押してパッケージを生成してください。 この作業には、マシンスペックにもよりますが少々時間がかかります。

パッケージ作成中のログは上記にあるように、 /tmp/kernel-rebuild.log/tmp/kernel-rebuild.err に出力されていきますので、tail -f などで監視してもいいでしょう。

次のようにメッセージが表示されたら、作成完了です。 表示された 7 つの i386.rpm がバイナリのカーネルパッケージ、 src.rpm がソース全体を含んだパッケージとなっています。

Building...Created:
/usr/src/redhat/RPMS/i386/kernel-2.2.14-1vl6.1.i386.rpm
/usr/src/redhat/RPMS/i386/kernel-doc-2.2.14-1vl6.1.i386.rpm
/usr/src/redhat/RPMS/i386/kernel-headers-2.2.14-1vl6.1.i386.rpm
/usr/src/redhat/RPMS/i386/kernel-ibcs-2.2.14-1vl6.1.i386.rpm
/usr/src/redhat/RPMS/i386/kernel-pcmcia-cs-2.2.14-1vl6.1.i386.rpm
/usr/src/redhat/RPMS/i386/kernel-source-2.2.14-1vl6.1.i386.rpm
/usr/src/redhat/RPMS/i386/kernel-utils-2.2.14-1vl6.1.i386.rpm
/usr/src/redhat/SRPMS/kernel-2.2.14-1vl6.1.src.rpm
Do you want to clean up BUILD tree and sources? (y/n) y

3.3 新しいカーネルパッケージの組み込み

通常のパッケージであれば rpm -Uvh で容易にアップグレードできますが、 さすがにカーネルとなるとそう簡単にはいきません。 詳しくは、カーネルパッケージに関するドキュメントを読んでもらいたいのですが、 ここでは簡潔に記載しておきます。

1. 必要なカーネルパッケージを必ずマウントされる場所にコピーしておく。

最低限必要なものは以下の3つ。
ここでは、/root 以下にコピーしたものとして進めます。


2. 安全の為、コンソールに root で入りシングルモードに移行。

# init S
# cd /root

3. カーネル本体を -ivh でインストール。

# rpm -ivh kernel-2.2.14-1vl6.1.i386.rpm

4. ノート機なら、次も当てる。

# rpm -Uvh kernel-pcmcia-cs-2.2.14-1vl6.1.i386.rpm

5. / パーティションが SCSI にある場合などは、mkinitrd を必ず実行。

# mkinitrd /boot/initrd-2.2.14-1vl6.1.img 2.2.14-1vl6.1

6. LILOの設定

/etc/lilo.conf を任意のエディタで開き、 新しく作成したカーネル(ここでは 2.2.14-1vl6.1)で起動できるように修正を加えます。 元のカーネルでも起動できるように前のエントリは残しておき、 それをコピーして一部修正するのが良いでしょう。 青字の部分は元のエントリをコピーしたもの、 赤字の部分は新カーネル 2.2.14-1vl6.1 用の記述です。

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
append="apm=on"
default=linuxirda

image=/boot/vmlinuz-2.2.14-1vl6
        label=linux
        initrd=/boot/initrd-2.2.14-1vl6.img
        read-only
        root=/dev/hda8

image=/boot/vmlinuz-2.2.14-1vl6.1
        label=linuxirda
        initrd=/boot/initrd-2.2.14-1vl6.1.img
        read-only
        root=/dev/hda8

編集したら保存終了し、/sbin/lilo を実行して情報を更新します。 以下の Added linux, Added linuxirda のように表示されれば正常です。 なお、liloの書込みに失敗するとOSが起動できなくなりますから、 正常終了して情報が更新された事を確認するようにしてください。

bash# /sbin/lilo
Added linux
Added linuxirda *

さて、ここまでで最低限起動できる環境は整えましたから、 後は kernel パッケージの残りの物で必要な物を追加しましょう。

# rpm -Uvh kernel-headers-2.2.14-1vl6.1.i386.rpm

# rpm -Uvh kernel-doc-2.2.14-1vl6.1.i386.rpm
# rpm -Uvh kernel-source-2.2.14-1vl6.1.i386.rpm
# rpm -Uvh kernel-utils-2.2.14-1vl6.1.i386.rpm

# kernel-ibcs-2.2.14-1vl6.1.i386.rpm

最後に、システムをシャットダウンして再起動しましょう。 今の設定では起動時に boot: と出たところで linux と入力すると前のカーネルで起動し、 linuxirda と入力するか、何も入力せず Enter で新カーネルが起動します。

# shutdown -r now

さて、新しいカーネルで無事に起動できたでしょうか?

特に問題ないようであれば、 ログインして IrDA関連モジュールが正常に起動できるか確認してください。

# modprobe irda
# modprobe ircomm
# modprobe ircomm-tty
# /sbin/lsmod

上のように modprobe を実行した際に何もエラーが出ず、 /sbin/lsmod を実行した結果表示される一覧中に、 irda, ircomm, ircomm-tty の 3つが存在していれば正常です。

なお、これ以後は上記モジュールが動くことが前提となりますので、 だめな場合は、また最初に戻ってうまく動くようになるまで頑張ってください。

3.4 irda-utils の作成と導入

これでカーネルのIrDA対応は完了しましたが、 実際に使うためには irda-utils が必須です。 今回は irda-utils-0.9.10.tar.gz を入手してきたので、 これをそのまま make して使ってもいいのですが、 せっかくなのでこれも RPMパッケージにしてしまいましょう。

ところで、このアーカイブの中には既にspecファイルが含まれていましたが、 見たところ 0.9.9 用という事で 1つ古いのと、 irkbd ディレクトリの削除とtekramディレクトリ下への移動が行われているようなので、 これを取り出して少し手直しして利用します。

[手直しした specファイル] irda-utils.spec

後は、先と同じようにそれぞれの所定の場所にコピーして rpm -ba です。

# cp ~/irda-utils.spec /usr/src/redhat/SPECS/
# cp ~/irda-utils-0.9.10.tar.gz /usr/src/redhat/SOURCES/
# cd /usr/src/redhat/SPECS
# rpm -ba irda-utils.spec
例によって /usr/src/redhat/RPMS/i386/ に irda-utils-0.9.10-1.i386.rpm ができますので、 これをインストールしてください。

# rpm -ivh irda-utils-0.9.10-1.i386.rpm 

3.5 IrDAモジュールの設定

IrDA用のデバイスの作成と、モジュールの設定、 そして起動時の初期化設定を行います。 これらの詳細は、irda-utils の付属ドキュメントに含まれており、 /usr/doc/irda-utils-0.9.10/ 以下にありますのでご覧ください。

デバイスファイルの作成

# mknod /dev/ircomm0 c 161 0
# mknod /dev/ircomm1 c 161 1
# mknod /dev/irlpt0 c 161 16
# mknod /dev/irlpt1 c 161 17

モジュールの設定 (/etc/conf.modules)

/etc/conf.modules 内に次の記述を追加。

# IrDA over a normal serial port, or a serial port compatible IrDA port
alias tty-ldisc-11 irtty

# IrCOMM (for printing, PPP, Minicom etc)
alias char-major-161 ircomm-tty

# To be able to attach some dongles
alias irda-dongle-0 tekram
alias irda-dongle-1 esi
alias irda-dongle-2 actisys
alias irda-dongle-3 actisys
alias irda-dongle-4 girbil
alias irda-dongle-5 litelink
alias irda-dongle-6 airport
alias irda-dongle-7 old_belkin

# To use the NSC driver on a Thinkpad laptop
options nsc-ircc dongle_id=0x09
alias irda0 nsc-ircc

irattach起動の設定 (/etc/irda/drivers)

お使いのマシンの赤外線ポートの接続状態に応じて、 /etc/irda/drivers 内の irattach 起動のオプションを修正します。 例えば tekram互換のドングルが COM1 に接続されているという場合は次のように指定します。
        irattach /dev/ttyS0 -d tekram
COM1 が赤外線ポートになっている場合はドングルの指定は無しでポートの指定だけで結構です。
        irattach /dev/ttyS0
下記では、COM2 が直接赤外線ポートである例を挙げています。

#! /bin/sh
#
# drivers
#
# Initialize and shutdown IrDA device drivers.
#
# This script should be invoked with two arguments.  The first is the
# action to be taken, either "start", "stop", or "restart".
#

action=$1
device=$2

case "${action:?}" in
'start')
        irattach /dev/ttyS1          # The COM2 serial port is an IrDA port
        # irattach /dev/ttyS0 -d esi # Attach a ESI dongle to the first serial port
        # irattach /dev/ttyS0 -d tekram
        # insmod pc87108             # If your machine as a pc87108 FIR chipset
        # modprobe uircc             # Sharp UIRCC chipset
    ;;
'stop')
        killall irattach             # ... or something. Currently not used
    ;;
'restart')
        /sbin/ifconfig ${device:?} down up
    ;;
esac

irmanager起動設定 (/etc/rc.d/rc.local)

上記ファイルの設定に基づいて IrDA 関連モジュールを動かす元となるのが irmanager です。 手作業で irmanger -d 1 と打って起動させても良いのですが、 毎度の事ですから起動スクリプトの rc.local の末尾に次の2行を追加して、 自動で起動するようにしておきましょう。

# IrDA module exec
/usr/sbin/irmanager -d 1

これで、システムを再起動すれば自動で irmanger が立ち上がり、 関連して irattach, ircomm, ircomm-tty が起動するはずですが、 再起動させずともここで irmanager を起動してみれば、 動作の確認が取れます。

一度、次のようにして起動しているモジュールを外した上で、 irmanager を起動して確認を取ってください。

# killall irattach
# killall irmanager
# rmmod ircomm-tty
# rmmod ircomm
# rmmod irtty
# rmmod irda
# ps ax | grep ir
# lsmod | grep ir

まず、上記で irmanger, irattach が起動していない事、 IrDA関連モジュールがロードされていない事を確認。

# /usr/sbin/irmanager -d 1
# ps ax | grep ir
# lsmod | grep ir

次に、irmanager を起動し、 irmanger, irattach が正しいオプションで起動されるかと、 irda, irtty のモジュールが起動したかの確認が取れれば正常です。

次のページ 前のページ 目次へ