#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デバイスのドライバを書けるか?

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS