#author("2023-10-05T12:15:28+09:00","default:exp","exp") #author("2023-10-09T07:54:08+09:00","default:exp","exp") [[研究室内のページ]] *2022.4.8(金) [#k0771e0c] ** ラズパイのreal time化 [#j20f57f7] google「raspberry pi リアルタイムカーネル」 https://qiita.com/mt08/items/136c29bba5e0a3e4972c ... PREEMPT_RTについて google「raspberry pi リアルタイムカーネル rtlinux」 https://nw-electric.way-nifty.com/blog/2018/02/raspberrypirt-l.html ... RT-Linuxについて。 RT-Linux の開発は少なくとも 2018年までは続いていたようだ。今月のバージョンもあり。 *2022.4.12(火) [#z782abde] **ラズパイにRT-Linuxをインストールする [#qcd09f5a] 上記URLのページを参考に作業: https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/ より、 https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.17/patch-5.17.1-rt17.patch.gz をダウンロード。 これは、ラズベリーパイかどうかとは無関係であることに注意。 対応するカーネルソースを https://github.com/raspberrypi/linux よりダウンロード *2022.4.14(木) [#z254eeee] **ラズパイにRT-Linuxインストールつづき [#p6be3a52] 5.17はバージョンが新しすぎてラズパイ用のlinuxソースが無さそう。 ウェブページに掲載されている4.9.76でやってみる。 https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/4.9/older/patch-4.9.76-rt61.patch.gz をダウンロード。 しかし、ソースがダウンロードできず: kobayasi@akamono%[1025]wget https://github.com/raspberrypi/linux/archive/aae807a781807e95c761fe0a5babbc9bd5adaed6.tar --2022-04-14 17:27:12-- https://github.com/raspberrypi/linux/archive/aae807a781807e95c761fe0a5babbc9bd5adaed6.tar Resolving github.com (github.com)... 13.114.40.48 Connecting to github.com (github.com)|13.114.40.48|:443... connected. HTTP request sent, awaiting response... 404 Not Found 2022-04-14 17:27:13 ERROR 404: Not Found. 2018の情報だから、ディレクトリ構成が変わっていても無理はない。 *2023.3.2(木) [#a9fb7506] **新しいmicroSDカードにラズパイOSの最新版をインストールする [#y6627853] 参考: https://sozorablog.com/raspberrypi_initial_setting/ ノートPCで作業。 https://www.raspberrypi.com/software/ より、Raspberry PI Imager (Windows用のimager_1.7.4) をダウンロード、ファイルをダブルクリックしてすぐインストールできた。 SDカードを挿してから、 「OSを選ぶ」で、Raspberry Pi OS(64-bit)を選択、 「ストレージを選ぶ」で新品の32GB SDカード(F:としてマウント済)を選択、 「書き込み」 ラズパイに挿して、起動。 指示に従い、ユーザ:kobayasi で初期設定した。 GUI画面で起動後、ラズパイにて: $ sudo apt-get install tenet telnetd 問題なくインストールされた。ノートPC からラズパイに telnet 接続できるようになった。 $ sudo apt-get install ftpd この後、ftp で caio530F.tgz をラズパイに転送できた。 しかし、caio530F.tgz を展開、make したらエラーとなるので、対処: kobayasi@raspberrypi:~ $ sudo apt-get install linux-headers その後、make が通った。 sudo make install もOK。 1. /boot/config.txt に dtparam=i2c_vc=on を追記 2. 再起動 3. と 4. $ cd caio530F/contec/caio/config kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./config ---------------------------------- CONTEC API-AIO(LNX) Configuration ---------------------------------- メッセージ:デバイスを検出中です。 ................................................................................... . -------------------------------------------------------------------------------- デバイス一覧 -------------------------------------------------------------------------------- DeviceName Product Name ID IP/Master IP Status [1]:+ AIO000 CPI-AI-1208LI 0 -------------------------------------------------------------------------------- [#]:デバイス選択 [o]:リスト並べ替え [r]:デバイスリスト再検出 [d]:デバイス削除 [a]:デバイス手動追加 [e]:診断レポート [s]:設定の保存 [q]:終了 設定を行うデバイスを選択してください。 コマンド入力:s ******************************************************************************** 設定を保存しますか?(y/n):y メッセージ:設定ファイルは'contec_aio.conf'です。 メッセージ:起動スクリプトファイルは'contec_aio_start.sh'です。 メッセージ:停止スクリプトファイルは'contec_aio_stop.sh'です。 確認(y): 5. kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh 以上で初期設定は完了だそうだが、 しかし、 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 1 Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory 再起動しても症状変わらず。 再起動する前に lsmod で表示されていた caio が出てこない。 contec_aio_start.sh に実行属性が無く、ちゃんと動かなかったようだ。 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo chmod 755 contec_aio_start.sh 今度は kobayasi@raspberrypi:~/caio530F/contec/caio/config $ ls /usr/local/etc/contec_aio.conf /usr/local/etc/contec_aio.conf がちゃんと出来た。 しかし、 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 1 Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory 症状変わらず。 マニュアルに、本体のダイヤルか何かでアドレスを設定する話があったが、それをやっていないのが原因か。 ダイヤルではなかったが、I2Cを有効にしていなかった。 マニュアルの指示通りに、 ラズパイで、設定→Raspberry Piの設定→インターフェイスで I2C を on にしてOKを選択。 今度は、 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- できた。 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 問題なし。 **アナログ入力を使う [#w68b5f84] アナログ入出力ドライバ API-AIO(LNX) の使い方、サンプルプログラムなどはオンラインマニュアルにある。 https://www.contec.com/jp/api/downloadlogger?download=https://help.contec.com/pc-helper/api-tool-lnx/jp/APITOOL.htm#t=mergedProjects%2FCAIO%2Fwelcome%2Findex.htm A/Dボードの取説 &ref(lxab03_220531.pdf); kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ pwd /home/kobayasi/caio530F/contec/caio/samples/jp/gcc/console/Ai kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ make gcc -Wall -c -o ai.o ai.c gcc ai.o -o ai -lcaio kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ ./ai デバイス名を入力してください : AIO000 アナログ入力レンジを以下の範囲から選択してください ±10V : 0 0〜10V : 50 ±5V : 1 0〜5V : 51 ±2.5V : 2 0〜4.095V : 52 ±1.25V : 3 0〜2.5V : 53 ±1V : 4 0〜1.25V : 54 ±0.625V : 5 0〜1V : 55 ±0.5V : 6 0〜0.5V : 56 ±0.3125V : 7 0〜0.25V : 57 ±0.25V : 8 0〜0.1V : 58 ±0.125V : 9 0〜0.05V : 59 ±0.1V : 10 0〜0.025V : 60 ±0.05V : 11 0〜0.0125V : 61 ±0.025V : 12 0〜0.01V : 62 ±0.0125V : 13 0〜20mA : 100 ±0.01V : 14 4〜20mA : 101 +/-20mA : 102 1〜5V : 150 14 AioSetAiRangeAll = 21041 : The value of AiRange is outside the designated range of the device being used 英語版の python 用のサンプルプログラムの ai.c を見たら、print(f" ..... とか書いてあってsyntax error になった。 python の printf が最近関数化されたせいかも。 一度リブートしたら、また lsmod で caio が出てこなくなった。 /usr/local/etc/contec_aio.conf はある。この中に /dev/caio000 と記載されているが、このデバイスファイルも無い。 ブート時に contec_aio.conf を見ていない? 仕方ないので手動で、ついでに config もやっておく: $ sudo ./config sで保存 qで終了 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo chmod 755 contec_aio_start.sh kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh kobayasi@raspberrypi:~/caio530F/contec/caio/config $ lsmod | grep caio caio 503808 0 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ ls -l /dev/caio* ls: '/dev/caio*' にアクセスできません: そのようなファイルやディレクトリはありません kobayasi@raspberrypi:~/caio530F/contec/caio/config $ cat /proc/contec_aio.conf #start { DeviceName:String:AIO000 Device:String:CPI-AI-1208LI FileNode:String:/dev/caio000 Minor:Number:0 DeviceType:Number:30 VendorID:Number:0x0 DeviceID:Number:0x8703 BoardID:Number:0 SerialID:String: WaitTimeWhenOutput:Number:0 IPAddress:String: Net_UnitID:Number:0 Net_DeviceID:Number:0 Net_ProductID:Number:0 Net_Type:Number:0 Port:Number:0x0 } #end /dev/caio000 が無くていいのか? サンプルプログラムの動作も、最初通過していた初期化が通らなくなってしまった: kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ ./ai AioInit = 1 : Failed in the acquisition of the resource kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 「28」も出なくなった。?? I2Cを一旦無効→有効にしたが症状変わらず。 ADボードの設定が初期化されることを期待して、一旦 shutdown → 電源off → 電源onしてブート。 kobayasi@raspberrypi:~ $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 表示された。 kobayasi@raspberrypi:~ $ lsmod | grep caio kobayasi@raspberrypi:~ $ ls /dev/caio* ls: '/dev/caio*' にアクセスできません: そのようなファイルやディレクトリはありません kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./config kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo chmod 755 contec_aio_start.sh contec_aio_stop.sh kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh kobayasi@raspberrypi:~/caio530F/contec/caio/config $ lsmod | grep caio caio 503808 0 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ ls /dev/caio* ls: '/dev/caio*' にアクセスできません: そのようなファイルやディレクトリはありません ./ai の動作は元に戻った(電源offにしたのが効いたかも): kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/Ai $ ./ai アナログ入力レンジを以下の範囲から選択してください ±10V : 0 0〜10V : 50 ±5V : 1 0〜5V : 51 ±2.5V : 2 0〜4.095V : 52 ±1.25V : 3 0〜2.5V : 53 ±1V : 4 0〜1.25V : 54 ±0.625V : 5 0〜1V : 55 ±0.5V : 6 0〜0.5V : 56 ±0.3125V : 7 0〜0.25V : 57 ±0.25V : 8 0〜0.1V : 58 ±0.125V : 9 0〜0.05V : 59 ±0.1V : 10 0〜0.025V : 60 ±0.05V : 11 0〜0.0125V : 61 ±0.025V : 12 0〜0.01V : 62 ±0.0125V : 13 0〜20mA : 100 ±0.01V : 14 4〜20mA : 101 +/-20mA : 102 1〜5V : 150 50 AioSetAiChannels = 10002 : AIO driver can't be called /dev/caio* が FIFO なのでは。これが無いのは、ラズパイOSが新しすぎるからかも? FIFOを使わない SingleAi を試してみる。 kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/SingleAi $ ./singleai デバイス名を入力してください : AIO000 アナログ入力レンジを以下の範囲から選択してください ±10V : 0 0〜10V : 50 ±5V : 1 0〜5V : 51 ±2.5V : 2 0〜4.095V : 52 ±1.25V : 3 0〜2.5V : 53 ±1V : 4 0〜1.25V : 54 ±0.625V : 5 0〜1V : 55 ±0.5V : 6 0〜0.5V : 56 ±0.3125V : 7 0〜0.25V : 57 ±0.25V : 8 0〜0.1V : 58 ±0.125V : 9 0〜0.05V : 59 ±0.1V : 10 0〜0.025V : 60 ±0.05V : 11 0〜0.0125V : 61 ±0.025V : 12 0〜0.01V : 62 ±0.0125V : 13 0〜20mA : 100 ±0.01V : 14 4〜20mA : 101 +/-20mA : 102 1〜5V : 150 50 アナログ入力を行うチャネルを入力してください 0〜7 : 0 チャネル 電圧 0 0.002441V できた。 ・おそらく、/dev/caio* は FIFO。 ・single の AD変換 を繰り返せばいい。 ・API-TOOL(LNX)のマニュアルは、PCIバスのボードとか、他のと共用。 一旦電源off後、GND と AD0 に直流安定化電源をつないでから: kobayasi@raspberrypi:~ $ cd caio530F/contec/caio/config/ kobayasi@raspberrypi:~/caio530F/contec/caio/config $ sudo ./contec_aio_start.sh kobayasi@raspberrypi:~/caio530F/contec/caio/config $ lsmod | grep caio caio 503808 0 kobayasi@raspberrypi:~/caio530F/contec/caio/config $ cd ../samples/jp/gcc/console/SingleAi/ kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/SingleAi $ ls Makefile caio.h singleai singleai.c singleai.c.org singleai.c~ singleai.o kobayasi@raspberrypi:~/caio530F/contec/caio/samples/jp/gcc/console/SingleAi $ ./singleai アナログ入力レンジを以下の範囲から選択してください ±10V : 0 0〜10V : 50 ±5V : 1 0〜5V : 51 ±2.5V : 2 0〜4.095V : 52 ±1.25V : 3 0〜2.5V : 53 ±1V : 4 0〜1.25V : 54 ±0.625V : 5 0〜1V : 55 ±0.5V : 6 0〜0.5V : 56 ±0.3125V : 7 0〜0.25V : 57 ±0.25V : 8 0〜0.1V : 58 ±0.125V : 9 0〜0.05V : 59 ±0.1V : 10 0〜0.025V : 60 ±0.05V : 11 0〜0.0125V : 61 ±0.025V : 12 0〜0.01V : 62 ±0.0125V : 13 0〜20mA : 100 ±0.01V : 14 4〜20mA : 101 +/-20mA : 102 1〜5V : 150 アナログ入力を行うチャネルを入力してください 0〜7 : min=0.002441, max=0.024414 直流安定化電源に同期して電圧表示が変化した。A/D変換自体はOKだ。 **TODO [#g122f45e] あとは、ラズパイos上でリアルタイム処理をどう動かすか。 そこで、A/D変換用の関数が動くかどうか(動かないのでは。。。) OSとしてはI2Cデバイスとして見えているので、I2Cがリアルタイムで動けばいいはずだが、 I2Cデバイスのドライバを書けるか?