Project Home
Project Home
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - ハードディスクドライブの S.M.A.R.T. 機能を利用する: (1 Item)
   
ハードディスクドライブの S.M.A.R.T. 機能を利用する  
QNX Neutrino ではハードディスクドライブの SMART 機能の利用に関して以下のようになっています。

QNX 6.5.0 SP1 まで: devb-eide のオプションで SMART のモニターをイネーブルするのみ

QNX 6.6.0 : devb-eide/devb-ahci のオプションで SMART のモニターをイネーブルにして、
		起動時に HDD の SMART で問題が見つかれば、そのメッセージを システムログに残す
		(Utilities Reference の devb-eide/devb-ahci 項を参照の事)

上記の通り、QNX Neutrino ではハードディスクドライブの SMART 情報を読み出す手段をデフォルトでは
持っていません。 このため QNX Neutrino で SMART 情報を読み出す場合には、その機能をユーザーが
作成する必要がありました。

Linux や BSD 系の OS にはオープンソースの smartmontools が代表的なツールとして利用されており、
最新(2015 年 7 月現在)の smartmontools 6.4 では QNX Neutrino でも動作するようになっています。

ここでは、smartmontools 6.4 を QNX Neutrino 6.5.0 SP1 セルフホスト環境でビルドする方法と
QNX Neutrino で SMART 情報にアクセスする際のプログラミング・インターフェースについて記載します。

1) smartmontools 6.4 を QNX Neutrino 6.5.0 SP1 セルフホスト環境でビルドする

smartmontools 6.4 のソースコードは以下のサイトから入手できます。

https://www.smartmontools.org/wiki/Download

このページで Install from the source tarball 項の Download the latest source tarball from ​-> here.
が下記のページにリンクされており、ここから各バージョンのソースコードがダウンロードできます。

http://sourceforge.net/projects/smartmontools/files/

smartmontools-6.4.tar.gz がダウンロードできたら、解凍して smartmontools-6.4 ディレクトリにて
configure を実行して QNX SDP 6.5.0 SP1 の環境で make が実行できるようにします。

ここでひとつ問題があり、QNX 6.5.0 SP1 の rm コマンドが POSIX 仕様に完全に準拠していない
ために configure の途中でエラーとなってしまいます。 そこで、POSIX 仕様に完全に準拠した 
QNX 6.6.0 の rm バイナリを一時的に使用することで回避します。

/bin/rm のバックアップを取り、添付の rm.660 を /bin/rm にコピーして configure を実行して下さい。
configure 実行後は元の rm を /bin に戻しておく事をお勧めします。

configure が終了したら make を実行すると、smartctl および smartd バイナリがビルドされます。
それぞれの使用方法は smartctl -h および smartd -h で参照可能です。

* QNX 6.6.0 ではセルフホスト環境がないため、QNX 6.5.0 SP1 でビルドしたバイナリを
  使用するしかありません。(他に方法がないか考え中です・・・)

2) QNX Neutrino で SMART 情報にアクセスする際のプログラミング・インターフェース

アプリケーションからハードディスクドライブの SMART 情報にアクセスするには、devb-eide および
devb-ahci が用意しているコマンド・パススルー・インターフェースを使用します。

具体的には、devb-eide/devb-ahci が作成したデバイス /dev/hd0 等を open() して得られた fd に
対して devctl()/devctlv() を実行して ATA コマンド(SMART コマンド)をドライブに送ります。

例:
fd = open("/dev/hd0", O_RDONLY);
devctl(fd, DCMD_CAM_PASS_THRU, ...);

サンプルコードとしては、smartmontools に含まれる、os_qnxnto.cpp と os_qnxnto.h を参照すると、
どのようにプログラミングすればよいか分かると思います。
Attachment: Text rm.660 13.89 KB