[Top] | [Contents] | [Index] | [ ? ] |
Copyright © 2011 K. Dobashi.
• USB-RS232C | CentOS6でcorianderを使う | |
Index | Complete index. |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
corianderとは、LinuxでIIDC準拠のIEEE1394接続CCDカメラを操作するためのアプリケーションです。
しかし、最近のLinuxディストリビューションでは、色々な問題があり、すんなりと動作しません。
ここではCentOS6でcorianderを動作させる方法を説明します。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
やるべきことは以下の通りです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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] | [ ? ] |
以下のようにしてみると、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] | [ ? ] |
corianderをソースコードからビルドするには、一部ライブラリが必要になるかも知れません。必要なものをyumでインストールすれば良いでしょう。注意すべきは、必要なのは、ライブラリ本体よりも開発パッケージ(*-devel)です。corianderをビルドするときに怒られるので、その都度インストールしても良いと思います。
libraw1394-devel libdc1394-devel libXv-devel libSDL-devel
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
適切なパッケージが揃っていれば、corianderをビルドすることが出来ます。 coriander公式ホームページには最新のソースコードはありません。 http://sourceforge.net/projects/coriander/から最新のソースコードをダウンロードして展開し、展開したディレクトリで./autogen.shを実行してください。あとはmake、make installです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ここまでで、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] | [ ? ] |
[Top] | [Contents] | [Index] | [ ? ] |
[Top] | [Contents] | [Index] | [ ? ] |
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.