[Top] [Contents] [Index] [ ? ]

Xバンド

Copyright © 2011 K. Dobashi.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. CentOS6でcorianderを使う


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 coriander

corianderとは、LinuxでIIDC準拠のIEEE1394接続CCDカメラを操作するためのアプリケーションです。

しかし、最近のLinuxディストリビューションでは、色々な問題があり、すんなりと動作しません。

ここではCentOS6でcorianderを動作させる方法を説明します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.2 やるべきこと

やるべきことは以下の通りです。

  1. IEEE1394関連のドライバモジュールに対応しているカーネルを導入する
  2. カーネルドライバーモジュールの衝突を回避する
  3. 必要なライブラリーのインストール
  4. corianderのインストール
  5. udevの設定(デバイスファイルのパーミッションの変更)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.3 IEEE1394関連のドライバモジュールに対応しているカーネルの導入

CentOSの標準カーネルにはIEEE1394関連のドライバーモジュールは含まれていないようなので、Centosplusリポジトリにあるcentosplusカーネルを導入します。

 
# yum install --enablerepo=centosplus kernel*

とりあえずこれでリブートすると、既にIEEE1394関連のデバイスが接続されていれば、カーネルドライバーモジュールが導入されている筈です。

 
# lsmod | grep 1394
video1394              52689  0 
raw1394                60785  0 
ohci1394               67609  1 video1394
ieee1394              393785  3 video1394,raw1394,ohci1394

しかし、/devを覗いてみると、/dev/video1394/が存在しません。 これは困りました。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.4 カーネルドライバーモジュールの衝突を回避する

以下のようにしてみると、FireWireの別のドライバーモジュールが存在することが分かります。

 
# lsmod | grep firewire
firewire_core firewire_ohci
firewire_ohci 0

これは、最近になって新しく導入されたFireWireサブシステムだそうです。実は、このサブシステムのドライバーと上記のIEEE1394関連のドライバーが干渉しているようです。

今必要なのは、video1394なので、新しいFireWireサブシステムは無効にします。

無効にするには、/etc/modprobe.d内のファイルを適切に設定し、問題のカーネルドライバーモジュールを読み込まないようにします。

例えば、/etc/modprobe.d/blacklist-firewire.confというファイルを作成します。内容は

 
blacklist firewire_core
blacklist firewire_ohci

のような感じで、# lsmod | grep firewireで表示されたモジュールを記述します。

こうすることによって、(本来なら)不必要なカーネルドライバモジュールをロードしないように出来ます。

しかし、これだけでは不十分です。実は、centosplusカーネルパッケージでは、ブートイメージに問題のモジュールが組み込まれていました。

これを取り除くには、新たにブートイメージを作る必要があります。それには、mkinitrdを使います。 まずは、安全のため、現在のブートイメージをバックアップします。

 
mv /boot/initrd-2.6.18-238.12.1.el5.centos.plus.img /boot/initrd-2.6.18-238.12.1.el5.centos.plus.img.org

そして、mkinitrdを実行します。

 
mkinitrd /boot/initramfs-2.6.32-71.29.1.el6.centos.plus.x86_64.img 2.6.32-71.29.1.el6.centos.plus.x86_64

出来たら、再起動します。

おそらく/dev/video1394が生成されていると思います。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.5 必要なライブラリーのインストール

corianderをソースコードからビルドするには、一部ライブラリが必要になるかも知れません。必要なものをyumでインストールすれば良いでしょう。注意すべきは、必要なのは、ライブラリ本体よりも開発パッケージ(*-devel)です。corianderをビルドするときに怒られるので、その都度インストールしても良いと思います。

libraw1394-devel libdc1394-devel libXv-devel libSDL-devel


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.6 corianderのインストール

適切なパッケージが揃っていれば、corianderをビルドすることが出来ます。 coriander公式ホームページには最新のソースコードはありません。 http://sourceforge.net/projects/coriander/から最新のソースコードをダウンロードして展開し、展開したディレクトリで./autogen.shを実行してください。あとはmake、make installです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.7 udevの設定(デバイスファイルのパーミッションの変更)

ここまでで、root権限であれば、corianderを実行することが出来るようになると思います。でなければ、何か問題が残っているということなので、上記の部分を再確認してください。

rootで正常に実行出来るようでしたら、次は、一般ユーザー権限での実行です。ですが、たぶん正常に動作しないと思います。それは、/dev以下のデバイスファイルのパーミッションの関係で、一般ユーザーがデバイスファイルにアクセス出来ないからです。

簡単な方法は、root権限で、chmodコマンドで問題のデバイスファイルのパーミッションを変更することです。ですが、この方法はあまり賢い方法ではありません。OSを起動する度に、デバイスファイルは新しく生成され、パーミッションもその都度書き換えられてしまうからです。これは、udevというシステムが、デバイスファイルを動的に生成しているからです。

これを回避するには、udevを適切に設定することが必要です。具体的には、udev.ruleと呼ばれるファイルを修正(新しく生成)します。

実は、このudev.ruleは、/lib/udev/rulesと、/etc/udev/rules.d/の二箇所に分かれて存在します。

/lib/udev/rules/50-udev-default.ruleというファイルには、以下のような部分があります。

 
# FireWire (deprecated dv1394 and video1394 drivers)
KERNEL=="dv1394-[0-9]*",        NAME="dv1394/%n", GROUP="video"
KERNEL=="video1394-[0-9]*",     NAME="video1394/%n", GROUP="video"

これを参考にして、/etc/udev/rules.d/49-iee1394.ruleというファイルを作ります。 49という数字には意味があります。数字が若いほど内容が優先されると考えてください。 なので、50より若い49としてあります。もっと若い数字でもたぶん問題ないと思います。

 
KERNEL=="raw1394", NAME="%k", GROUP="video", MODE="0666"
KERNEL=="dv1394-[0-9]*", NAME="dv1394/%n", GROUP="video", MODE="0666"
KERNEL=="video1394-[0-9]*", NAME="video1394/%n", GROUP="video", MODE="0666"

MODE="0666"としておけば、すべてのユーザーがデバイスファイルにアクセス出来るようになります。

udevに設定の再読み込みをさせると、次にデバイスファイルを生成する時に新しい設定でデバイスファイルを生成します。単にOSを再起動しても構いません。パーミッションが設定した通りになっているか確認してください。

これで、一般ユーザーでcorianderを実行できます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Index


[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by Katsuhiro DOBASHI on October, 9 2011 using texi2html 1.76.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back previous section in reading order 1.2.2
[ > ] Forward next section in reading order 1.2.4
[ << ] FastBack beginning of this chapter or previous chapter 1
[ Up ] Up up section 1.2
[ >> ] FastForward next chapter 2
[Top] Top cover (top) of document  
[Contents] Contents table of contents  
[Index] Index index  
[ ? ] About about (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:


This document was generated by Katsuhiro DOBASHI on October, 9 2011 using texi2html 1.76.