Feed for discussion QNX Neutrino を使おう in project QNX Japanese Community. http://community.qnx.com/sf/discussion/do/listTopics/projects.qnx-j-community/discussion.forum1107 Posts for QNX Neutrino を使おう post114077: ハードディスクドライブの S.M.A.R.T. 機能を利用する http://community.qnx.com/sf/go/post114077 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 を参照すると、 どのようにプログラミングすればよいか分かると思います。 Wed, 08 Jul 2015 08:40:02 GMT http://community.qnx.com/sf/go/post114077 Shinji Inotsume 2015-07-08T08:40:02Z post84893: x86 のCPU Clock 周波数の測定 http://community.qnx.com/sf/go/post84893 最近の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を測定 Tue, 12 Apr 2011 13:11:01 GMT http://community.qnx.com/sf/go/post84893 Koichi Okazawa 2011-04-12T13:11:01Z post84731: 共有メモリーに後で、物理メモリー領域を割り当てるには http://community.qnx.com/sf/go/post84731 共有メモリーに後で物理領域を割り当てるには次の関数を用います。 ヘルプを参照すれば全体のコードを確認できます。 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を要求するためです。 一度、作成した連続メモリー領域を物理アドレスに変換してこの関数を呼べばアクセスしたいプロセスで名前による共有が可能となります。 Thu, 07 Apr 2011 02:42:59 GMT http://community.qnx.com/sf/go/post84731 Koichi Okazawa 2011-04-07T02:42:59Z post59035: USB 日本語キーボードの不具合回避 http://community.qnx.com/sf/go/post59035 QNX Neutrino の Photon 環境で USB 日本語キーボードを使用すると、] キーが入力できないという不具合があります。 この不具合を回避する方法を作成しましたので、ご利用下さい。 Fri, 09 Jul 2010 06:10:46 GMT http://community.qnx.com/sf/go/post59035 Shinji Inotsume 2010-07-09T06:10:46Z post44258: サウンドデバイスの動作確認 http://community.qnx.com/sf/go/post44258 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 です。 もし再生できないようでしたら、現状ではサポートされていないと思われます。 Tue, 22 Dec 2009 09:08:35 GMT http://community.qnx.com/sf/go/post44258 Shinji Inotsume 2009-12-22T09:08:35Z post41138: Re: パフォーマンスモニタについて http://community.qnx.com/sf/go/post41138 Inotsumeさんへ 丁寧な回答ありがとうございます。 早速試してみたいと思います。 Mon, 02 Nov 2009 13:00:33 GMT http://community.qnx.com/sf/go/post41138 hiroshi tuchiya 2009-11-02T13:00:33Z post41124: Re: パフォーマンスモニタについて http://community.qnx.com/sf/go/post41124 QNX Neutrino では、残念ながら Windows のタスクマネージャーような CPU 負荷をグラフィカルにトレンド表示するツールやこれをロギングするツールは標準では持っていません。 基本的にシステムの状況を表示するコマンドは pidin で、各プロセスの消費時間を表示するコマンドは pidin times となります。 また、hogs コマンドや top コマンドが役に立つかも知れません。 これらのコマンドを活用して表示させたり、ログしてみて下さい。 Mon, 02 Nov 2009 04:45:11 GMT http://community.qnx.com/sf/go/post41124 Shinji Inotsume 2009-11-02T04:45:11Z post41112: パフォーマンスモニタについて http://community.qnx.com/sf/go/post41112 初めまして。 仕事で関わっている装置の、とある不具合の原因調査にCPU負荷などをモニタリングしたいと考えておりますが、QNX NeutrinoにはWindowsのようなパフォーマンスモニタとロギング機能は無いのでしょうか?  初歩的な質問で申し訳ないのですがよろしくお願いします。 Sat, 31 Oct 2009 03:52:57 GMT http://community.qnx.com/sf/go/post41112 hiroshi tuchiya 2009-10-31T03:52:57Z post13540: Re: シグナルについて http://community.qnx.com/sf/go/post13540 そうですね。 良い方法だと思います。 Wed, 17 Sep 2008 09:28:41 GMT http://community.qnx.com/sf/go/post13540 Shinji Inotsume 2008-09-17T09:28:41Z post13230: Re: シグナルについて http://community.qnx.com/sf/go/post13230 こんにちは。 回答を頂き、ありがとうございました。 たしかに、signal.h ではSA_RESTART フラグはコメントアウトされています。 今回は、シグナルに関係しないスレッドでは、シグナルをマスクし、 シグナルを使うスレッドでは、受付ても大丈夫な状態でのみシグナルマスクを 解除するようにコーディングししてみました。 これでシステムコールが割り込まれることは無いはずですが...。 Thu, 11 Sep 2008 05:21:57 GMT http://community.qnx.com/sf/go/post13230 Kuniaki Kubota 2008-09-11T05:21:57Z post12797: Re: シグナルについて http://community.qnx.com/sf/go/post12797 signal.h を見てもらうと分かるのですが、SA_RESTART フラグはコメントアウトされて(not supported yet) となっており、指定することが出来ません。 Foundry27 の中でも Reported issues で報告されていますので、改善されることをお待ち下さい。 Thu, 04 Sep 2008 04:39:37 GMT http://community.qnx.com/sf/go/post12797 Shinji Inotsume 2008-09-04T04:39:37Z post12521: シグナルについて http://community.qnx.com/sf/go/post12521 QNXのシグナルは、POSIXと云うことになっていますが、sigacition()のパラメタで、 action.sa_flags != SA_RESTARTは指定できないのでしょうか? システムコールがエラーで終了するのは、あんまりうれしくないです。 Thu, 28 Aug 2008 06:09:00 GMT http://community.qnx.com/sf/go/post12521 Kuniaki Kubota 2008-08-28T06:09:00Z