CentOSからI/Oをアクセス
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
*[[CentOSからI/Oをアクセス]] [#td1aabbe]
**はじめに [#d7ab3939]
>
>Raspberry Pi 3にCentOS7をインストールした場合のI/Oへのア...
Rasbianでは、各種の方法が提供されているようですが、CentOS...
そのため、調べた結果をメモします。
<
**デバイスツリーサポート状況 [#da29060d]
***デバイスツリー(Device Tree)とは [#bbe1a485]
>
>聞き慣れない用語ですが、I/Oアクセスに関する記事を検索す...
結局のところ、ARM Linux 用のプロパティ情報を記述した設定...
Device Treeの仕組みはOpen Firmwareを原点にしており、デバ...
クロック、割り込み番号といった、ハードウェア固有のプロパ...
デバイスドライバの再利用性を高めることが目的としている。~
結局、ドライバはこの情報を元に、アクセスする。~
Device Treeは2.6.38 以前のLinuxカーネルには存在しない。~
(2.6.38の開発の際に問題となり、対策としてこの手法が以降...
~
Linux コミュニティとしては Device Tree 非対応のデバイスド...
しない決まりになったとのことです。
<
***実装状況 [#c5f78f15]
>
>サポートされていると「/proc/device-tree/」で情報を取得で...
# ls /proc/device-tree/
#address-cells __symbols__ chosen cpus ...
#size-cells aliases clocks interrupt-paren...
__overrides__ axi compatible memory ...
#
>サポートはしているようです。新しいカーネルなので、当たり...
<
**ドライバーサポート [#sd6266a3]
>
>実際にどのようなドライバーがインストールされているかを調...
<
***ドライバーサポート状況 [#zde82794]
>
>モジュールの一覧を調べます。
# lsmod
Module Size Used by
brcmfmac 186339 0
brcmutil 5661 1 brcmfmac
cfg80211 427855 1 brcmfmac
rfkill 16037 1 cfg80211
bcm2835_gpiomem 3040 0
bcm2835_wdt 3225 0
uio_pdrv_genirq 3164 0
uio 8000 1 uio_pdrv_genirq
ip_tables 11445 0
x_tables 13165 1 ip_tables
ipv6 347466 33
#
>この中で、それらしいのを調べて見ます。
<
-bcm2835_gpiomem
>
>たぶんGPIO用のドライバの用です。まずは、調べてみます。~
[[WiringPi>http://wiringpi.com/]]によると ''bcm2835_gpiom...
GPIOについてはRasbianと同様のことができることが期待できま...
有効ならば、「gpiomem」ができるようです。
# ll /dev/gpiomem
crw------- 1 root root 244, 0 1月 1 1970 /dev/gpiomem
#
<
>
>ありました。
>次に、rasbianでは、「/sys/class/gpio/」以下に生成される...
# ll /sys/class/gpio/
合計 0
--w------- 1 root root 4096 9月 22 21:30 export
lrwxrwxrwx 1 root root 0 9月 22 21:30 gpiochip0 -> ....
lrwxrwxrwx 1 root root 0 9月 22 21:30 gpiochip100 ->...
--w------- 1 root root 4096 9月 22 21:30 unexport
#
>ありました。~
これらは、以下のudev ruleが設定されていると動作するらしい...
SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="...
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", P...
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGR...
<
>
>その他のドライバはデフォルトでは、サポートしていないよう...
<
***GPIOへのアクセステスト [#rb26857d]
>
>では実際にアクセスできるかテストします。
# echo 21 > /sys/class/gpio/export
# ls /sys/class/gpio/
export gpio21 gpiochip0 gpiochip100 unexport
# ls /sys/class/gpio/gpio21/
active_low device direction edge power subsystem u...
# echo out > /sys/class/gpio/gpio21/direction
# echo 1 > /sys/class/gpio/gpio21/value
# echo 0 > /sys/class/gpio/gpio21/value
# echo 21 > /sys/class/gpio/unexport
# ls /sys/class/gpio/
export gpiochip0 gpiochip100 unexport
#
<
>
>まずは、GPIOには簡単にアクセスできる方法は用意されていま...
<
***IIC [#z3035714]
>
>IIC(I2C)へのアクセスについても、ドライバーレベルでサポー...
<
-ドライバーのイネーブル
>
>インストールデフォルトでは、ドライバーがイネーブルになら...
以下の2行を追加します。
dtparam=i2c_arm=on
dtparam=i2c1=on
<
>
>これにより、起動時にドライバーを読み込んでくれるようにな...
# lsmod
(中略)
i2c_dev 6913 0
i2c_bcm2708 5994 0
(以下省略)
<
>
# ll /sys/class/i2c-dev
合計 0
lrwxrwxrwx 1 root root 0 8月 12 09:28 i2c-1 -> ../../de...
#
<
**そのほか [#w07ed0d9]
>
>検索してみたところ、「BCM 2835」という、CのRaspberry Pi ...
早速ダウンロードしてコードを見ると、IOアドレス空間を直接...
ぎょっとしましたが、Linux Kernel 2.6.23-rc1からUIOがマー...
コードでは、/dev/memをmmapし、メモリ空間をアクセスしてい...
早速、CentOSでも調べてみます。
# ll /dev/mem
crw-r----- 1 root kmem 1, 1 1月 1 1970 /dev/mem
#
>ありました。これでイケルようです。
<
**[[LIB BCM 2835>http://www.airspayce.com/mikem/bcm2835/]...
***概要 [#y5fbcb8b]
>
>Raspberry Pi用のCライブラリで、
> This is a C library for Raspberry Pi (RPi). ~
It provides access to GPIO and other IO functions on th...
allowing access to the GPIO pins on the 26 pin IDE plug o...
so you can control and interface with various external de...
It provides functions for reading digital inputs and se...
using SPI and I2C, and for accessing the system timers. ~
Pin event detection is supported by polling (interrupts...
It is C++ compatible, and installs as a header file and n...
on any Linux-based distro (but clearly is no use except o...
or another board with BCM 2835).
>とありますので、UART、割り込み以外は、おおよそ何でもでき...
<
***ライブラリのビルド [#sa4394e9]
>
>開発ツールはインストール済みの前提です。
>早速ビルドしてみます。
# cd /opt/
# mkdir bcm2835
# cd bcm2835/
# curl http://www.airspayce.com/mikem/bcm2835/bcm2835-1....
# tar zxvf bcm2835-1.50.tar.gz
# ls
bcm2835-1.50 bcm2835-1.50.tar.gz
# cd bcm2835-1.50
# ./configure
# make
# make install
<
>
>以下のファイルがインストールされます。
<
>
>>
|種別|ファイル|h
|Lib|/usr/local/lib/libbcm2835.a|
|Header|/usr/local/include/bcm2835.h|
|Document|?|
<<
<
>
>>
>>>
>>>
>>>
<<<
<<
>Kernelをアップデートするたびにmakeしなくてよさそうなのが...
>>
<<
<
***テスト [#r4263da1]
>
>サンプルのLEDチカチカがありますので、テストします。~
LEDはGPIO-17(コネクタP1の11)に接続し、1秒間隔で点滅(ON...
# cd examples/
# cd blink/
# gcc blink.c -o blink_led -l rt -l bcm2835
# ./blink_led
<
>
>※-l rt は[[real-time extensions>http://devlib.symbian.sl...
<
お疲れ様でした。
終了行:
*[[CentOSからI/Oをアクセス]] [#td1aabbe]
**はじめに [#d7ab3939]
>
>Raspberry Pi 3にCentOS7をインストールした場合のI/Oへのア...
Rasbianでは、各種の方法が提供されているようですが、CentOS...
そのため、調べた結果をメモします。
<
**デバイスツリーサポート状況 [#da29060d]
***デバイスツリー(Device Tree)とは [#bbe1a485]
>
>聞き慣れない用語ですが、I/Oアクセスに関する記事を検索す...
結局のところ、ARM Linux 用のプロパティ情報を記述した設定...
Device Treeの仕組みはOpen Firmwareを原点にしており、デバ...
クロック、割り込み番号といった、ハードウェア固有のプロパ...
デバイスドライバの再利用性を高めることが目的としている。~
結局、ドライバはこの情報を元に、アクセスする。~
Device Treeは2.6.38 以前のLinuxカーネルには存在しない。~
(2.6.38の開発の際に問題となり、対策としてこの手法が以降...
~
Linux コミュニティとしては Device Tree 非対応のデバイスド...
しない決まりになったとのことです。
<
***実装状況 [#c5f78f15]
>
>サポートされていると「/proc/device-tree/」で情報を取得で...
# ls /proc/device-tree/
#address-cells __symbols__ chosen cpus ...
#size-cells aliases clocks interrupt-paren...
__overrides__ axi compatible memory ...
#
>サポートはしているようです。新しいカーネルなので、当たり...
<
**ドライバーサポート [#sd6266a3]
>
>実際にどのようなドライバーがインストールされているかを調...
<
***ドライバーサポート状況 [#zde82794]
>
>モジュールの一覧を調べます。
# lsmod
Module Size Used by
brcmfmac 186339 0
brcmutil 5661 1 brcmfmac
cfg80211 427855 1 brcmfmac
rfkill 16037 1 cfg80211
bcm2835_gpiomem 3040 0
bcm2835_wdt 3225 0
uio_pdrv_genirq 3164 0
uio 8000 1 uio_pdrv_genirq
ip_tables 11445 0
x_tables 13165 1 ip_tables
ipv6 347466 33
#
>この中で、それらしいのを調べて見ます。
<
-bcm2835_gpiomem
>
>たぶんGPIO用のドライバの用です。まずは、調べてみます。~
[[WiringPi>http://wiringpi.com/]]によると ''bcm2835_gpiom...
GPIOについてはRasbianと同様のことができることが期待できま...
有効ならば、「gpiomem」ができるようです。
# ll /dev/gpiomem
crw------- 1 root root 244, 0 1月 1 1970 /dev/gpiomem
#
<
>
>ありました。
>次に、rasbianでは、「/sys/class/gpio/」以下に生成される...
# ll /sys/class/gpio/
合計 0
--w------- 1 root root 4096 9月 22 21:30 export
lrwxrwxrwx 1 root root 0 9月 22 21:30 gpiochip0 -> ....
lrwxrwxrwx 1 root root 0 9月 22 21:30 gpiochip100 ->...
--w------- 1 root root 4096 9月 22 21:30 unexport
#
>ありました。~
これらは、以下のudev ruleが設定されていると動作するらしい...
SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="...
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", P...
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGR...
<
>
>その他のドライバはデフォルトでは、サポートしていないよう...
<
***GPIOへのアクセステスト [#rb26857d]
>
>では実際にアクセスできるかテストします。
# echo 21 > /sys/class/gpio/export
# ls /sys/class/gpio/
export gpio21 gpiochip0 gpiochip100 unexport
# ls /sys/class/gpio/gpio21/
active_low device direction edge power subsystem u...
# echo out > /sys/class/gpio/gpio21/direction
# echo 1 > /sys/class/gpio/gpio21/value
# echo 0 > /sys/class/gpio/gpio21/value
# echo 21 > /sys/class/gpio/unexport
# ls /sys/class/gpio/
export gpiochip0 gpiochip100 unexport
#
<
>
>まずは、GPIOには簡単にアクセスできる方法は用意されていま...
<
***IIC [#z3035714]
>
>IIC(I2C)へのアクセスについても、ドライバーレベルでサポー...
<
-ドライバーのイネーブル
>
>インストールデフォルトでは、ドライバーがイネーブルになら...
以下の2行を追加します。
dtparam=i2c_arm=on
dtparam=i2c1=on
<
>
>これにより、起動時にドライバーを読み込んでくれるようにな...
# lsmod
(中略)
i2c_dev 6913 0
i2c_bcm2708 5994 0
(以下省略)
<
>
# ll /sys/class/i2c-dev
合計 0
lrwxrwxrwx 1 root root 0 8月 12 09:28 i2c-1 -> ../../de...
#
<
**そのほか [#w07ed0d9]
>
>検索してみたところ、「BCM 2835」という、CのRaspberry Pi ...
早速ダウンロードしてコードを見ると、IOアドレス空間を直接...
ぎょっとしましたが、Linux Kernel 2.6.23-rc1からUIOがマー...
コードでは、/dev/memをmmapし、メモリ空間をアクセスしてい...
早速、CentOSでも調べてみます。
# ll /dev/mem
crw-r----- 1 root kmem 1, 1 1月 1 1970 /dev/mem
#
>ありました。これでイケルようです。
<
**[[LIB BCM 2835>http://www.airspayce.com/mikem/bcm2835/]...
***概要 [#y5fbcb8b]
>
>Raspberry Pi用のCライブラリで、
> This is a C library for Raspberry Pi (RPi). ~
It provides access to GPIO and other IO functions on th...
allowing access to the GPIO pins on the 26 pin IDE plug o...
so you can control and interface with various external de...
It provides functions for reading digital inputs and se...
using SPI and I2C, and for accessing the system timers. ~
Pin event detection is supported by polling (interrupts...
It is C++ compatible, and installs as a header file and n...
on any Linux-based distro (but clearly is no use except o...
or another board with BCM 2835).
>とありますので、UART、割り込み以外は、おおよそ何でもでき...
<
***ライブラリのビルド [#sa4394e9]
>
>開発ツールはインストール済みの前提です。
>早速ビルドしてみます。
# cd /opt/
# mkdir bcm2835
# cd bcm2835/
# curl http://www.airspayce.com/mikem/bcm2835/bcm2835-1....
# tar zxvf bcm2835-1.50.tar.gz
# ls
bcm2835-1.50 bcm2835-1.50.tar.gz
# cd bcm2835-1.50
# ./configure
# make
# make install
<
>
>以下のファイルがインストールされます。
<
>
>>
|種別|ファイル|h
|Lib|/usr/local/lib/libbcm2835.a|
|Header|/usr/local/include/bcm2835.h|
|Document|?|
<<
<
>
>>
>>>
>>>
>>>
<<<
<<
>Kernelをアップデートするたびにmakeしなくてよさそうなのが...
>>
<<
<
***テスト [#r4263da1]
>
>サンプルのLEDチカチカがありますので、テストします。~
LEDはGPIO-17(コネクタP1の11)に接続し、1秒間隔で点滅(ON...
# cd examples/
# cd blink/
# gcc blink.c -o blink_led -l rt -l bcm2835
# ./blink_led
<
>
>※-l rt は[[real-time extensions>http://devlib.symbian.sl...
<
お疲れ様でした。
ページ名: