Feed for discussion QNX Neutrino を使おう in project QNX Japanese Community.
Posts for QNX Neutrino を使おう
post114077: ハードディスクドライブの S.M.A.R.T. 機能を利用する
Shinji Inotsume
http://community.qnx.com/sf/go/post114077
2015-07-08T08:40:02Z
2015-07-08T08:40:02Z
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 を参照すると、
どのようにプログラミングすればよいか分かると思います。
Shinji Inotsume
2015-07-08T08:40:02Z
post84893: x86 のCPU Clock 周波数の測定
Koichi Okazawa
http://community.qnx.com/sf/go/post84893
2011-04-12T13:11:01Z
2011-04-12T13:11:01Z
最近のx86CPUはCPUが発熱した場合、CPUが持つローパワー機構によりCPU Clock周波数が変動する場合があります。
そこで実際のCPUクロックの周波数を測定するプログラムを作成しました。
添付したファイルからclockcycleを解凍して利用してください。
ファイル clockcycle-x86.tar.gz
解凍方法 tar zxvf clockcycle-x86.tar.gz
実行例
# ./clockcycle
Clock Cycle Check Program 0.1
OS Tick Period = 999.847usec
Setting Clock Cycle = 1596.28MHz
Measured Clock Cycle = 1596.00MHz <-- 最後が現在のCPU Clock 周波数
補足
MultiCoreの場合はCPU 0を測定
Koichi Okazawa
2011-04-12T13:11:01Z
post84731: 共有メモリーに後で、物理メモリー領域を割り当てるには
Koichi Okazawa
http://community.qnx.com/sf/go/post84731
2011-04-07T02:42:59Z
2011-04-07T02:42:59Z
共有メモリーに後で物理領域を割り当てるには次の関数を用います。
ヘルプを参照すれば全体のコードを確認できます。
shm_ctl( fd, SHMCTL_PHYS, physaddr, memsize )
http://www.qnx.com/developers/docs/6.4.1/neutrino/lib_ref/s/shm_ctl.html
注意点)
memsize はページサイズのn倍にしてください。
ページサイズ以下で設定した場合、エラーとなります。
応用)
(1) ドライバーが使用している物理アドレス領域を共有メモリーとして公開して他プロセスからアクセスできるようにする。
デバッグ時に # spatch /dev/shmem/{Name} に内容を参照したり直接アクセスができます。
(2) mmapで連続メモリー領域を生成する場合、同時に共有メモリーを割り振れません。これはmmapの引数がNOFDを要求するためです。
一度、作成した連続メモリー領域を物理アドレスに変換してこの関数を呼べばアクセスしたいプロセスで名前による共有が可能となります。
Koichi Okazawa
2011-04-07T02:42:59Z
post59035: USB 日本語キーボードの不具合回避
Shinji Inotsume
http://community.qnx.com/sf/go/post59035
2010-07-09T06:10:46Z
2010-07-09T06:10:46Z
QNX Neutrino の Photon 環境で USB 日本語キーボードを使用すると、] キーが入力できないという不具合があります。
この不具合を回避する方法を作成しましたので、ご利用下さい。
Shinji Inotsume
2010-07-09T06:10:46Z
post44258: サウンドデバイスの動作確認
Shinji Inotsume
http://community.qnx.com/sf/go/post44258
2009-12-22T09:08:35Z
2009-12-22T09:08:35Z
QNX 6.4.x の Neutrino 環境では、それまで標準で持っていた mmplay 等のサウンド再生アプリケーションが添付されなくなり、そのままではサウンドデバイスの動作確認ができなくなっています。
そこでマニュアルにある WAV 再生サンプルコードをコンパイルし、サウンドデバイスの動作確認を行う手順を紹介します。
1.サンプルコードのコンパイル
まずサンプルコードを切り出し、コンパイルします。サンプルコードは、オンラインマニュアルの
Audio Developer's Guide -> wave.c example
にあります。これをコピーして、例えば wavplay.c という名前でファイルを作成します。
このファイルをコンパイルして実行バイナリを作成するわけですが、ライブラリとして libadound.so をリンクする必要がありますので、IDE でビルドする場合は、
1) プロジェクトの [Properties] を選択して [QNX C/C++ Project] を選択。
2) [Linker] タブを選択して [Category] から [Extra libs] を選択。
3) [Add] ボタンをクリックして Name に asound (libasound.so の lib と .so 部分を除いた文字列) と入力。
と設定し、あとは通常通りビルドして下さい。
コマンドラインからコンパイルする場合には、
# qcc -o wavplay wavplay.c -lasound
を実行して下さい。
2.WAV ファイル
QNX Neutrino 環境には標準では WAV ファイルを持っていませんので、手持ちの WAV ファイルやインターネット上のフリーの WAV ファイル等を用意して下さい。ここでは sample.wav とします。
3.サウンド再生
QNX Neutrino の起動時にサウンドデバイスが自動的に認識されていれば、
# ./wavplay sample.wav
を実行すると、音声出力端子からサウンドが出力されます。
4.サポートされているサウンドデバイス
サポートされているサウンドデバイスは下記のサイトや Utilities Reference の deva-ctrl-xxx 項目で確認できます。
http://www.qnx.com/developers/hardware_support/
ただし、最近は単独のサウンドカードよりも、CPU チップセットとコーデック IC による組み合わせが多いと思います。
この場合、使用するドライバとしては deva-ctrl-i8x0 や deva-ctrl-intel_hda が対象となりすが、使用されているコーデック IC の種類によってサポートされているか否かが変わってきます。
残念ながらサポートされているコーデック IC は公開されていないため、実際に動作するかどうかは試してみないとわかりせん。
上記の手順でサウンドが再生されなかった場合は、次の手順を試してみて下さい。
# slay io-audio
# io-audio -dintel_hda (Intel High Definition Audio の場合)
# ./wavplay sample.wav
これでサウンドが再生できるようでしたら、サポートされているコーデック IC です。
もし再生できないようでしたら、現状ではサポートされていないと思われます。
Shinji Inotsume
2009-12-22T09:08:35Z
post41138: Re: パフォーマンスモニタについて
hiroshi tuchiya
http://community.qnx.com/sf/go/post41138
2009-11-02T13:00:33Z
2009-11-02T13:00:33Z
Inotsumeさんへ
丁寧な回答ありがとうございます。
早速試してみたいと思います。
hiroshi tuchiya
2009-11-02T13:00:33Z
post41124: Re: パフォーマンスモニタについて
Shinji Inotsume
http://community.qnx.com/sf/go/post41124
2009-11-02T04:45:11Z
2009-11-02T04:45:11Z
QNX Neutrino では、残念ながら Windows のタスクマネージャーような CPU 負荷をグラフィカルにトレンド表示するツールやこれをロギングするツールは標準では持っていません。
基本的にシステムの状況を表示するコマンドは pidin で、各プロセスの消費時間を表示するコマンドは pidin times となります。
また、hogs コマンドや top コマンドが役に立つかも知れません。
これらのコマンドを活用して表示させたり、ログしてみて下さい。
Shinji Inotsume
2009-11-02T04:45:11Z
post41112: パフォーマンスモニタについて
hiroshi tuchiya
http://community.qnx.com/sf/go/post41112
2009-10-31T03:52:57Z
2009-10-31T03:52:57Z
初めまして。
仕事で関わっている装置の、とある不具合の原因調査にCPU負荷などをモニタリングしたいと考えておりますが、QNX NeutrinoにはWindowsのようなパフォーマンスモニタとロギング機能は無いのでしょうか?
初歩的な質問で申し訳ないのですがよろしくお願いします。
hiroshi tuchiya
2009-10-31T03:52:57Z
post13540: Re: シグナルについて
Shinji Inotsume
http://community.qnx.com/sf/go/post13540
2008-09-17T09:28:41Z
2008-09-17T09:28:41Z
そうですね。
良い方法だと思います。
Shinji Inotsume
2008-09-17T09:28:41Z
post13230: Re: シグナルについて
Kuniaki Kubota
http://community.qnx.com/sf/go/post13230
2008-09-11T05:21:57Z
2008-09-11T05:21:57Z
こんにちは。
回答を頂き、ありがとうございました。
たしかに、signal.h ではSA_RESTART フラグはコメントアウトされています。
今回は、シグナルに関係しないスレッドでは、シグナルをマスクし、
シグナルを使うスレッドでは、受付ても大丈夫な状態でのみシグナルマスクを
解除するようにコーディングししてみました。
これでシステムコールが割り込まれることは無いはずですが...。
Kuniaki Kubota
2008-09-11T05:21:57Z
post12797: Re: シグナルについて
Shinji Inotsume
http://community.qnx.com/sf/go/post12797
2008-09-04T04:39:37Z
2008-09-04T04:39:37Z
signal.h を見てもらうと分かるのですが、SA_RESTART フラグはコメントアウトされて(not supported yet) となっており、指定することが出来ません。
Foundry27 の中でも Reported issues で報告されていますので、改善されることをお待ち下さい。
Shinji Inotsume
2008-09-04T04:39:37Z
post12521: シグナルについて
Kuniaki Kubota
http://community.qnx.com/sf/go/post12521
2008-08-28T06:09:00Z
2008-08-28T06:09:00Z
QNXのシグナルは、POSIXと云うことになっていますが、sigacition()のパラメタで、
action.sa_flags != SA_RESTARTは指定できないのでしょうか?
システムコールがエラーで終了するのは、あんまりうれしくないです。
Kuniaki Kubota
2008-08-28T06:09:00Z