OPIにFAN をつけると温度はどのくらい下がるか?

aliexpress からFAN と熱シールが届きましたので、OPI に取り付けました。

 

1

FAN は2個入り、3M の熱伝道シールは3枚で14mmにカットしてあります。1枚に5x7で35枚でした。

2

CPU とメモリ部分にシールを取り付け、簡易的にファンもシールで貼り付け。

3

安い割りには、薄いのでこれで十分ですね。実測で、6.87mm です。

ファンを回す前と、回さない前でCPU 温度をmunin で取得しようと以下を設定。

[root@opi 19:43:22 plugins]# pwd
/etc/munin/plugins
[root@opi 19:43:23 plugins]# cat h3_temp 
#!/bin/sh

#%# family=auto
#%# capabilities=autoconf

GETNUM=`/bin/cat /sys/class/thermal/thermal_zone0/temp`

if [ "$1" = "autoconf" ]; then
        if [ -n ${GETNUM} ] ; then
                echo yes
                exit 0
        else
                echo no
                exit 0
        fi
fi

if [ "$1" = "config" ]; then
        echo 'graph_title CPU Temp'
        echo 'graph_args -r --lower-limit 0'
        echo 'graph_vlabel Temp'
        echo 'graph_category Apps'
        echo 'total.label CPU0 Temp'
        echo 'total.min 0'
        echo 'total.draw AREA'
        echo 'total.type GAUGE'
        exit 0
fi

echo "total.value $GETNUM";

確認は以下を実行。

[root@opi 19:46:32 plugins]# ./h3_temp autoconf
yes
[root@opi 19:46:37 plugins]# ./h3_temp config
graph_title CPU Temp
graph_args -r --lower-limit 0
graph_vlabel Temp
graph_category Apps
total.label CPU0 Temp
total.min 0
total.draw AREA
total.type GAUGE
[root@opi 19:46:44 plugins]# ./h3_temp 
total.value 57
[root@opi 19:46:52 plugins]# 

で、munin-node を再起動

# systemctl restart munin-node

すると、以下な感じでグラフができます。

h3_temp-day

ファンをつける前のデータをとりあえず記録するため、まだ回していません。結構熱そうですね。70 度くらいになっています。

しばらく、このまま記録をとってからファンを回したいと思います。最初、テストで回していたときは、上のグラフの最初の部分で40 度くらいでした。効果はかなり期待できそうです。

 

参考

muninプラグインを作成

https://www.seeds-std.co.jp/seedsblog/671.html

1us Lチカ

2016年 謹賀新年、あけましておめでとうございます。おせち料理も31日と1日で食べつくしてしまいました。

さて、今年最初のブログですね。0.000001秒のLチカをロジックアナライザーでモニタリングして光らせてみました。

あと、オレンジパイで、8本のGPIO を使って安価なロジックアナライザーで採取できるかも確認してみました。

 

サンプルプログラムを採取したデータが以下です。8本分は取れていますが、速すぎるところは取りこぼしているようです。

1

矢印は500ns で光っている部分で採取に失敗し、取りこぼす事がありました。このあたりが2Mhz の限界なんですね。今のファームウェアとソフトウェアだとこれが限界のようです。

2

複数のLED は、blink ファンクションにて光らせていますが、呼び出しと初期化の処理で250us 程度使っているようです。

3

usleep 関数を使っても思ったより、処理に時間がかかるようです。1us を指定して光らせているんですが、実際は69us 光っています。nanosleep を使っても66us は使われてしまうようで、1us を光らせる為にwhile で調整してみました。

4

サンプルのプログラムは以下です。

/*
 *  +-----+-----+----------+------+---+--OrangePiPC--+---+------+---------+-----+--+
 *  | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 *  +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 *  |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 *  |   2 |  -1 |    SDA.0 |      |   |  3 || 4  |   |      | 5V       |     |     |
 *  |   3 |  -1 |    SCL.0 |      |   |  5 || 6  |   |      | 0v       |     |     |
 *  |   4 |   6 | IO6 PA06 |  OUT | 0 |  7 || 8  |   |      | TxD3     |     |     |
 *  |     |     |       0v |      |   |  9 || 10 |   |      | RxD3     |     |     |
 *  |  17 |  -1 |     RxD2 |      |   | 11 || 12 | 0 | OUT  | IO1 PD14 | 1   | 18  |
 *  |  27 |  -1 |     TxD2 |      |   | 13 || 14 |   |      | 0v       |     |     |
 *  |  22 |  -1 |     CTS2 |      |   | 15 || 16 | 0 | OUT  | IO4 PC04 | 4   | 23  |
 *  |     |     |     3.3v |      |   | 17 || 18 | 0 | OUT  | IO5 PC07 | 5   | 24  |
 *  |  10 |  -1 |     MOSI |      |   | 19 || 20 |   |      | 0v       |     |     |
 *  |   9 |  -1 |     MISO |      |   | 21 || 22 |   |      | RTS2     |     |     |
 *  |  11 |  -1 |     SCLK |      |   | 23 || 24 |   |      | SPI-CE0  |     |     |
 *  |     |     |       0v |      |   | 25 || 26 |   |      | CE1      |     |     |
 *  |   0 |  -1 |    SDA.1 |      |   | 27 || 28 |   |      | SCL.1    |     |     |
 *  |   5 |   7 |  IO7 PA7 |  OUT | 0 | 29 || 30 |   |      | 0v       |     |     |
 *  |   6 |   8 |  IO8 PA8 |  OUT | 0 | 31 || 32 | 0 | OUT  | IO9 PG08 | 9   | 12  |
 *  |  13 |  10 | IO10 PA9 |  OUT | 0 | 33 || 34 |   |      | 0v       |     |     |
 *  |  19 |  12 | IO12PA10 |  OUT | 0 | 35 || 36 | 0 | OUT  | IO13PG09 | 13  | 16  |
 *  |  26 |  14 | IO14PA20 | ALT3 | 0 | 37 || 38 | 0 | OUT  | IO15PG06 | 15  | 20  |
 *  |     |     |       0v |      |   | 39 || 40 | 0 | OUT  | IO16PG07 | 16  | 21  |
 *  +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 *  | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 *  +-----+-----+----------+------+---+--OrangePIPC--+------+----------+-----+-----+
 *         ^^^^ Pin NO                                                   ^^^^ Pin NO
 * 1us LED blink.
 * building ex) gcc -lwiringPi -lpthread -I/usr/local/include -L/usr/local/lib -levent -o 2016blinkall 2016blinkall.c
 * 
 *
*/
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <wiringPi.h>

#define MSEC 1
#define USEC 33
#define NANOSEC 1000

int blink2(int led, int delay);

int main (void)
{
  int led;
  int i = 0;

  while (i < 3)
  {
    blink2(16, 1000);
      blink2(15, 1000); //Next blink 250 us
      blink2(13, 1000);
      blink2(9, 1000);
      blink2(5, 1000);
      blink2(4, 1000);
      blink2(1, 1000);
      blink2(6, 1000);

    i++;
  }

  delay (MSEC);
  return 0;
}

int blink2(int led, int delay){
    // unsigned int usecs;
    // usecs = delay;
    // sec = delay;
    led = led;
    int i = 0;

    // nano sec
    struct timespec nano;
    nano.tv_sec = 0;
    nano.tv_nsec = delay;

    wiringPiSetup () ;
    pinMode (led, OUTPUT) ;

    digitalWrite (led, HIGH) ;
    nanosleep(&nano, NULL); // 66us
    // usleep (usecs) ; // 66us
    // delay (delay);
    digitalWrite (led,  LOW) ;
    usleep (1);

    digitalWrite (led, HIGH) ;

    // 1us
    while (i < 100)
    {
        i++;
    }
    digitalWrite (led,  LOW) ;
    usleep (1); // 66us

    digitalWrite (led, HIGH) ;
    // 500 ns
    digitalWrite (led,  LOW) ;
}

GPIO の8本を同時に処理させるにはどうしたらいいんでしょうかね。マルチスレッド処理ですかね?シフトレジスタに投げて、一括処理とかですかね?

 

前ちょっと触ったイベント処理のlibevent とかを使うとどのくらいの精度になるんでしょうかね。いろいろ疑問がわいてきます。

E-ink を表示するためにはまだまだ超えないといけない山がたくさんあるようです。

なんとか、春までには表示したいんですが。こつこつとやっていきます。

FX2LP でsigrok のロジックアナライザー

年末で、何かとイベントごとがあってなかなかブログを更新できずにいました。

Aliexpress からもどんどんお品が届いて、ロジックアナライザーとして使うボードも到着しました。テストがてら、OrangePi PC の GPIO につないだLED のタイミングを計測してみること。

配線は、とりあえず1チャンネルでテスト。全部で8チャンネルいけます。

logic2

ちょっとわかりにくいですが、PB0 ~ PB7 までの端子が sigrok でいう0から7 までに対応しています。とりあえず今回はPB0 の端子につないで1チャンネルの表示をしてみました。

PulseView1

全体のテスト配線は以下のような感じです。

 

logic

osx だと sigrok のソフトウェアの中にファームウェアがあります。最新のファームウェアは、以下にビルド済みのものがあります。

fx2lafw (pre-built firmware files の項を参照)
http://sigrok.org/wiki/Fx2lafw

つい先月にリリースされている0.1.3 を使いました。

sigrok-firmware-fx2lafw-bin-0.1.3.tar.gz

http://sigrok.org/download/binary/sigrok-firmware-fx2lafw/

ほどよく、配置。*.fw がファームウェアです。

HOPE:sigrok-firmware junkhack$ pwd
/Applications/PulseView.app/Contents/share/sigrok-firmware
HOPE:sigrok-firmware junkhack$ ll
total 1088
-rw-r--r--@ 1 junkhack  admin  45268 11  3  2014 asix-sigma-100.fw
-rw-r--r--@ 1 junkhack  admin  45396 11  3  2014 asix-sigma-200.fw
-rw-r--r--@ 1 junkhack  admin  45396 11  3  2014 asix-sigma-50.fw
-rw-r--r--@ 1 junkhack  admin  45360 11  3  2014 asix-sigma-50sync.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-braintechnology-usb-lps.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-cwav-usbeeax.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-cwav-usbeedx.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-cwav-usbeesx.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-cypress-fx2.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-saleae-logic.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-sigrok-fx2-16ch.fw
-rw-r--r--@ 1 junkhack  admin   8120 11 27 09:09 fx2lafw-sigrok-fx2-8ch.fw
-rw-r--r--@ 1 junkhack  admin  81808 11  3  2014 sysclk-lwla1034-extneg.rbf
-rw-r--r--@ 1 junkhack  admin  81808 11  3  2014 sysclk-lwla1034-extpos.rbf
-rw-r--r--@ 1 junkhack  admin  81460 11  3  2014 sysclk-lwla1034-int.rbf
-rw-r--r--@ 1 junkhack  admin  48521 11  3  2014 sysclk-lwla1034-off.rbf
HOPE:sigrok-firmware junkhack$ 

sigrok の PluseView を開きます。

現在、手元でビルドしていないので、ELIAS さんのビルドしたものです。

OPIでFedora22のメモ

loborisさんがリリースしている、Fedora22 のMinimal がどんなものテスト。

以下、備忘録です。Cで、GPIO ピンで光らせる部分まで確認。

 

・Fedora22_Minimal.img をsdcard に dd。要注意で。

$ sudo dd bs=1m if=./Fedora22_Minimal.img of=/dev/rdisk3

・BOOT パーティションの中は、orange pi pc の用途にあったものにリネーム。

[junkhack@OrangePi ~]$ ll /media/boot/
合計 10695
-rwxr-xr-x 1 root root    35724 10月 13 14:08 script.bin
-rwxr-xr-x 1 root root 10915616 10月 13 14:08 uImage

 

・SDCard 挿入、起動

・DHCP で起動するので、IP を固定に。以下のようになじみのあるeth0 に名前変更。

[root@opi 13:35:56 network-scripts]# ll ifcfg-*
-rw-r--r-- 1 root root 364 Jan  1  1970 ifcfg-LoBoInternet
-rw-r--r-- 1 root root 389 Dec 19 13:15 ifcfg-eth0
-rw-r--r-- 1 root root 254 Apr  9  2015 ifcfg-lo
[root@opi 13:36:06 network-scripts]# 

 

・中を変更

[root@opi 13:36:07 network-scripts]# cat ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=c0a09f2a-3229-4901-9689-7deb7e356848
DEVICE=eth0
ONBOOT=yes
DOMAIN=junkhack
IPADDR=192.168.1.42
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.17
DNS2=192.168.1.1
[root@opi 13:36:23 network-scripts]# 

 

・root のプロンプトを変更。好みで。

[root@opi 13:35:08 ~]# tail -n 3 .bash_profile 
PS1="[\u@opi \t \W]# "
export LANG=C

[root@opi 13:35:16 ~]# 

 

・タイムゾーン設定

[root@opi 13:34:18 ~]# timedatectl set-timezone Asia/Tokyo

・後方の空きパーティション拡大。スクリプトが同梱されているので。ない場合は、git にあるので参照。

[root@opi 13:37:46 ~]# find / -name fs_resize
/usr/local/bin/fs_resize
[root@opi 13:37:59 ~]# 

[root@opi 13:39:25 ~]# fs_resize

 

リブート

・cpu周波数のツールを入れ、ポリシーを見てみる。interactiveのようです。

[root@opi 13:43:15 ~]# dnf install cpufrequtils

[root@opi 13:51:19 ~]# cpupower frequency-info
analyzing CPU 0:
  driver: cpufreq-sunxi
  CPUs which run at the same hardware frequency: 0 1 2 3
  CPUs which need to have their frequency coordinated by software: 0 1 2 3
  maximum transition latency: 2.00 ms.
  hardware limits: 480 MHz - 1.54 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, interactive, performance
  current policy: frequency should be within 480 MHz and 1.54 GHz.
                  The governor "interactive"★ may decide which speed to use
                  within this range.
  current CPU frequency is 480 MHz (asserted by call to hardware).
  cpufreq stats: 60.0 MHz:0.00%, 120 MHz:0.00%, 240 MHz:0.00%, 312 MHz:0.00%, 408 MHz:0.00%, 480 MHz:96.37%, 504 MHz:0.00%, 600 MHz:0.00%, 648 MHz:0.00%, 720 MHz:0.00%, 816 MHz:0.01%, 912 MHz:0.00%, 1.01 GHz:0.95%, 1.10 GHz:0.06%, 1.20 GHz:0.21%, 1.34 GHz:0.17%, 1.44 GHz:0.01%, 1.54 GHz:2.21%  (173)
[root@opi 13:51:22 ~]# 

 

参考

http://oneofis05users.seesaa.net/article/288446337.html

    ■ Interactive

    より速いondemandを、ということで考案された。CPUがアイドル状態から

    抜けるとサンプリングを増やして追従を上げる。反応はondemandより良いが、

    最大クロックに上げるまでには間を取る。マルチタスクで忙しい仕事とゆっくり

    した仕事が交互にあっても、最大最小に切り替え時に一気に上下せず少し間を取って、

    中間のクロックを取る。パフォーマンス的にはondemandより良い。

    画面オンで早くトップスピードに上げるので、画面オンの時間が短く、それを

    繰り返すような使用法ではバッテリー消費が多くなる。

 

・kernel をあげてみる。上げる前は以下。

[root@opi 13:55:50 src]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/mmcblk0p2 ext4       15G  1.1G   13G   8% /
udev           devtmpfs   10M     0   10M   0% /dev
tmpfs          tmpfs     201M  420K  201M   1% /run
tmpfs          tmpfs     502M     0  502M   0% /dev/shm
tmpfs          tmpfs     502M     0  502M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat       63M   11M   53M  17% /media/boot
tmpfs          tmpfs     101M     0  101M   0% /run/user/0
tmpfs          tmpfs     101M     0  101M   0% /run/user/1001
[root@opi 13:55:57 src]# 
[root@opi 13:55:57 src]# ll /boot/
total 12632
-rwxr-xr-x 1 root root    32768 Oct 13 23:08 boot0_OPI.fex
-rw-r--r-- 1 root root    35724 Oct 13 23:08 script.bin
-rw-r--r-- 1 root root    35724 Oct 13 23:08 script.bin.OPI-PC_1080p50
-rw-r--r-- 1 root root    35724 Oct 13 23:08 script.bin.OPI-PC_480p
-rw-r--r-- 1 root root    35724 Oct 13 23:08 script.bin.OPI-PC_720p50
-rw-r--r-- 1 root root    35724 Oct 13 23:08 script.bin.OPI-PC_720p60
-rw-r--r-- 1 root root   901120 Oct 13 23:08 u-boot_OPI-emmc.fex
-rw-r--r-- 1 root root   901120 Oct 13 23:08 u-boot_OPI.fex
-rw-r--r-- 1 root root 10915616 Oct 13 23:08 uImage
[root@opi 13:56:16 src]# 
[root@opi 13:56:38 src]# ll /media/boot/
total 10695
-rwxr-xr-x 1 root root    35724 Oct 13 14:08 script.bin
-rwxr-xr-x 1 root root 10915616 Oct 13 14:08 uImage
[root@opi 13:56:46 src]# 

[root@opi 13:57:30 src]# uname -a
Linux OrangePi 3.4.39 #1 SMP PREEMPT Mon Oct 12 12:02:29 CEST 2015 armv7l armv7l armv7l GNU/Linux
[root@opi 13:57:34 src]# lsmod
Module                  Size  Used by
8189es                887631  0
[root@opi 13:57:41 src]# 

 

・消してしまってスクリプト上でチェックしているようで、ダミーを作成

[root@opi 14:21:02 src]# echo > /boot/uImage_OPI-2

・tar も入ってなかったのでいれておく。

[root@opi 14:25:05 src]# dnf install tar

・スクリプト実行

[root@opi 13:57:45 src]# ./update_kernel.sh 
Sat Dec 19 13:57:54 JST 2015
*********************************************************
Updating kernel, script.bin and /lib/modules for OrangePI
*********************************************************

Do you want to download script&kernel package from server, (y/N)?  y.


Unpacking ...
Files unpacked.
==============================================
Select the OrangePI board you want to upgrade:
  1   OrangePI 2
  2   OrangePI PLUS
  3   OrangePI PC
?  3
Updating OrangePI PC

===============================
Select hdmi display resolution:
  1   1080p 60Hz
  2   1080p 50Hz
  3    720p 60Hz
  4    720p 50Hz
?  1

Selected 1080p 60Hz

=====================================
Do you have HDMI->DVI adapter, (y/N)?  N
HDMI interface selected

================
CONTINUE, (y/N)?  y

kernel, script.bin and /lib/modules updated, please REBOOT.
AFTER REBOOT RUN:  sudo depmod -a
===========================================================

[root@opi 14:29:35 src]# 

 

・video 関連が新規追加されたようです。

[root@opi 14:30:04 src]# ll /boot/
total 24220
-rwxr-xr-x 1 root root    32768 Dec 19 14:27 boot0_OPI.fex
-rw-r--r-- 1 root root    35836 Dec 19 14:27 script.bin.OPI-2_1080p50_dvi
-rw-r--r-- 1 root root    35792 Dec 19 14:27 script.bin.OPI-2_1080p50_hdmi
-rw-r--r-- 1 root root    35836 Dec 19 14:27 script.bin.OPI-2_1080p60_dvi
-rw-r--r-- 1 root root    35792 Dec 19 14:27 script.bin.OPI-2_1080p60_hdmi
-rw-r--r-- 1 root root    35836 Dec 19 14:27 script.bin.OPI-2_480p_dvi
-rw-r--r-- 1 root root    35792 Dec 19 14:27 script.bin.OPI-2_480p_hdmi
-rw-r--r-- 1 root root    35836 Dec 19 14:27 script.bin.OPI-2_720p50_dvi
-rw-r--r-- 1 root root    35792 Dec 19 14:27 script.bin.OPI-2_720p50_hdmi
-rw-r--r-- 1 root root    35836 Dec 19 14:27 script.bin.OPI-2_720p60_dvi
-rw-r--r-- 1 root root    35792 Dec 19 14:27 script.bin.OPI-2_720p60_hdmi
-rw-r--r-- 1 root root    35856 Dec 19 14:27 script.bin.OPI-PC_1080p50_dvi
-rw-r--r-- 1 root root    35812 Dec 19 14:27 script.bin.OPI-PC_1080p50_hdmi
-rw-r--r-- 1 root root    35856 Dec 19 14:27 script.bin.OPI-PC_1080p60_dvi
-rw-r--r-- 1 root root    35812 Dec 19 14:27 script.bin.OPI-PC_1080p60_hdmi
-rw-r--r-- 1 root root    35856 Dec 19 14:27 script.bin.OPI-PC_480p_dvi
-rw-r--r-- 1 root root    35812 Dec 19 14:27 script.bin.OPI-PC_480p_hdmi
-rw-r--r-- 1 root root    35856 Dec 19 14:27 script.bin.OPI-PC_720p50_dvi
-rw-r--r-- 1 root root    35812 Dec 19 14:27 script.bin.OPI-PC_720p50_hdmi
-rw-r--r-- 1 root root    35856 Dec 19 14:27 script.bin.OPI-PC_720p60_dvi
-rw-r--r-- 1 root root    35812 Dec 19 14:27 script.bin.OPI-PC_720p60_hdmi
-rw-r--r-- 1 root root    36900 Dec 19 14:27 script.bin.OPI-PLUS_1080p50_dvi
-rw-r--r-- 1 root root    36856 Dec 19 14:27 script.bin.OPI-PLUS_1080p50_hdmi
-rw-r--r-- 1 root root    36900 Dec 19 14:27 script.bin.OPI-PLUS_1080p60_dvi
-rw-r--r-- 1 root root    36856 Dec 19 14:27 script.bin.OPI-PLUS_1080p60_hdmi
-rw-r--r-- 1 root root    36900 Dec 19 14:27 script.bin.OPI-PLUS_480p_dvi
-rw-r--r-- 1 root root    36856 Dec 19 14:27 script.bin.OPI-PLUS_480p_hdmi
-rw-r--r-- 1 root root    36900 Dec 19 14:27 script.bin.OPI-PLUS_720p50_dvi
-rw-r--r-- 1 root root    36856 Dec 19 14:27 script.bin.OPI-PLUS_720p50_hdmi
-rw-r--r-- 1 root root    36900 Dec 19 14:27 script.bin.OPI-PLUS_720p60_dvi
-rw-r--r-- 1 root root    36856 Dec 19 14:27 script.bin.OPI-PLUS_720p60_hdmi
-rw-r--r-- 1 root root   901120 Dec 19 14:27 u-boot_OPI-emmc.fex
-rw-r--r-- 1 root root   901120 Dec 19 14:27 u-boot_OPI.fex
-rw-r--r-- 1 root root 10917600 Dec 19 14:27 uImage_OPI-2
-rw-r--r-- 1 root root 10917592 Dec 19 14:27 uImage_OPI-PLUS
[root@opi 14:30:08 src]# 
[root@opi 14:30:09 src]# ll /media/boot/
total 21392
-rwxr-xr-x 1 root root    35812 Dec 19 14:29 script.bin
-rwxr-xr-x 1 root root    35724 Dec 19 14:29 script.bin.bak
-rwxr-xr-x 1 root root 10917600 Dec 19 14:29 uImage
-rwxr-xr-x 1 root root 10915616 Dec 19 14:29 uImage.bak
[root@opi 14:30:14 src]# 

[root@opi 15:35:40 modules]# diff -qr 3.4.39/ 3.4.39-01-lobo/ | grep gpio
diff: 3.4.39/build: No such file or directory
diff: 3.4.39-01-lobo/build: No such file or directory
Files 3.4.39/kernel/drivers/gpio/gpio-sunxi.ko and 3.4.39-01-lobo/kernel/drivers/gpio/gpio-sunxi.ko differ
Files 3.4.39/kernel/drivers/w1/masters/w1-gpio.ko and 3.4.39-01-lobo/kernel/drivers/w1/masters/w1-gpio.ko differ
diff: 3.4.39/source: No such file or directory
diff: 3.4.39-01-lobo/source: No such file or directory
[root@opi 15:35:45 modules]# 

[root@opi 15:31:41 modules]# diff -qr 3.4.39/ 3.4.39-01-lobo/ | wc -l
diff: 3.4.39/build: No such file or directory
diff: 3.4.39-01-lobo/build: No such file or directory
diff: 3.4.39/source: No such file or directory
diff: 3.4.39-01-lobo/source: No such file or directory
197
[root@opi 15:31:54 modules]# 


[root@opi 15:45:18 modules]# diff -qr 3.4.39/ 3.4.39-01-lobo/ | grep 'Only in'
::
Only in 3.4.39-01-lobo/kernel/drivers/input: serio
Only in 3.4.39-01-lobo/kernel/drivers/input: touchscreen
Only in 3.4.39-01-lobo/kernel/drivers/media: dvb
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gl860
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_benq.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_conex.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_cpia1.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_etoms.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_finepix.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_jeilinj.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_jl2005bcd.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_kinect.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_konica.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_mars.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_mr97310a.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_nw80x.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_ov519.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_ov534.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_ov534_9.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_pac207.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_pac7302.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_pac7311.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_se401.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sn9c2028.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sn9c20x.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sonixb.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sonixj.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_spca1528.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_spca500.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_spca501.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_spca505.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_spca506.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_spca508.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_spca561.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sq905.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sq905c.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sq930x.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_stk014.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_stv0680.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_sunplus.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_t613.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_topro.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_tv8532.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_vc032x.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_vicam.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_xirlink_cit.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: gspca_zc3xx.ko
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: m5602
Only in 3.4.39-01-lobo/kernel/drivers/media/video/gspca: stv06xx
diff: 3.4.39/sourceOnly in 3.4.39-01-lobo/kernel/drivers/media/video: tveeprom.ko
: No such file or directory
Only in 3.4.39-01-lobo/kernel/drivers: misc
diff: Only in 3.4.39-01-lobo/kernel/drivers/net/wireless: rtl818x
3.4.39-01-lobo/sourceOnly in 3.4.39-01-lobo/kernel/drivers/net/wireless: zd1201.ko
: No such file or directory
Only in 3.4.39-01-lobo/kernel/drivers/net/wireless: zd1211rw
Only in 3.4.39-01-lobo/kernel/net: 802
Only in 3.4.39-01-lobo/kernel/net: bridge
Only in 3.4.39-01-lobo/kernel/net: llc
[root@opi 15:45:24 modules]# 

 

・gpio_sunxi がロード

[root@opi 14:32:15 ~]# sudo depmod -a

[root@opi 14:36:36 ~]# uname -a
Linux OrangePi 3.4.39-01-lobo #1 SMP PREEMPT Sun Oct 25 14:46:41 CET 2015 armv7l armv7l armv7l GNU/Linux

[root@opi 14:33:14 ~]# ls /sys/class/gpio_sw/
ls: cannot access /sys/class/gpio_sw/: No such file or directory
[root@opi 14:33:16 ~]# 

[root@opi 14:33:17 ~]# modprobe gpio_sunxi
[root@opi 14:33:34 ~]# 
[root@opi 14:33:35 ~]# lsmod
Module                  Size  Used by
gpio_sunxi              8233  0
8189es                901572  0
[root@opi 14:33:43 ~]# 
[root@opi 14:34:04 ~]# ls /sys/class/gpio_sw/
PA10  PA13  PA14  PA15  PA21  PA3  PA6  PA7  PA8  PA9  PC3  PC4  PC7  PD14  PG6  PG7  PG8  PG9  PL10  normal_led  standby_led
[root@opi 14:34:05 ~]# 

・基板上の電源LED の隣の緑LED が点灯、消灯

[root@opi 14:34:58 ~]# echo 1 > /sys/class/gpio_sw/standby_led/data
[root@opi 14:35:13 ~]# echo 0 > /sys/class/gpio_sw/standby_led/data

・WiringOP を入れる準備。c関連を面倒なのでグループインストール

[root@opi 14:41:48 WiringOP]# dnf group list
Last metadata expiration check performed 1:47:22 ago on Sat Dec 19 12:56:05 2015.
Available environment groups:
   Minimal Install
   Fedora Server
   Fedora Workstation
   Fedora Cloud Server
   KDE Plasma Workspaces
   Xfce Desktop
   LXDE Desktop
   LXQt Desktop
   Cinnamon Desktop
   MATE Desktop
   Sugar Desktop Environment
   Development and Creative Workstation
   Web Server
   Infrastructure Server
   Basic Desktop
Available groups:
   3D Printing
   Administration Tools
   Audio Production
   Authoring and Publishing
   Books and Guides
   C Development Tools and Libraries★
   Cloud Infrastructure
   Cloud Management Tools
   Container Management
   D Development Tools and Libraries
   Design Suite
   Development Tools
   Domain Membership
   Fedora Eclipse
   Editors
   Educational Software
   Electronic Lab
   Engineering and Scientific
   FreeIPA Server
   Games and Entertainment
   Headless Management
   LibreOffice
   MATE Applications
   MATE Compiz
   Medical Applications
   Milkymist
   Network Servers
   Office/Productivity
   Robotics
   RPM Development Tools
   Security Lab
   Sound and Video
   System Tools
   Text-based Internet
   Window Managers
[root@opi 14:43:30 WiringOP]# dnf group install "C Development Tools and Libraries"

 

・WiringOP ビルド

[root@opi 14:50:36 WiringOP]# ./build 
wiringPi Build script
=====================


WiringPi Library
[UnInstall]
[Compile] wiringPi.c
[Compile] wiringSerial.c
[Compile] wiringShift.c
[Compile] piHiPri.c
[Compile] piThread.c
[Compile] wiringPiSPI.c
[Compile] wiringPiI2C.c
[Compile] softPwm.c
[Compile] softTone.c
[Compile] softServo.c
[Compile] mcp23008.c
[Compile] mcp23016.c
[Compile] mcp23017.c
[Compile] mcp23s08.c
[Compile] mcp23s17.c
[Compile] sr595.c
[Compile] pcf8574.c
[Compile] pcf8591.c
[Compile] mcp3002.c
[Compile] mcp3004.c
[Compile] mcp4802.c
[Compile] mcp3422.c
[Compile] max31855.c
[Compile] max5322.c
[Compile] sn3218.c
[Compile] drcSerial.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]

WiringPi Devices Library
[UnInstall]
[Compile] ds1302.c
[Compile] maxdetect.c
[Compile] piNes.c
[Compile] gertboard.c
[Compile] piFace.c
[Compile] lcd128x64.c
[Compile] lcd.c
[Compile] piGlow.c
[Link (Dynamic)]
[Install Headers]
[Install Dynamic Lib]

GPIO Utility
[Compile] gpio.c
gpio.c:801:13: warning: 'doPadDrive' defined but not used [-Wunused-function]
 static void doPadDrive (int argc, char *argv [])
             ^
gpio.c:889:13: warning: 'doGbw' defined but not used [-Wunused-function]
 static void doGbw (int argc, char *argv [])
             ^
gpio.c:931:13: warning: 'doGbr' defined but not used [-Wunused-function]
 static void doGbr (int argc, char *argv [])
             ^
[Compile] extensions.c
[Compile] readall.c
[Compile] pins.c
[Link]
[Install]

All Done.

NOTE: To compile programs with wiringBP v2, you need to add:
    -lwiringPi
  to your compile line(s) To use the Gertboard, MaxDetect, etc.
  code (the devLib), you need to also add:
    -lwiringPiDev
  to your compile line(s).

[root@opi 14:50:59 WiringOP]# 

 

・テストソース

[root@opi 14:54:54 gpio]# cat blink.c 
#include <wiringPi.h>

// Define GPIO Pin number wPi
#define LED 16
// delay 1 = 2msec
#define MSEC 500
// blink count 100 = 1sec
#define LOOP 100

// Main function
int main(void) {
        int i;

        // Initialize WiringPi
        wiringPiSetup ();

        // Set GPIO pin to output mode
        pinMode(LED, OUTPUT);

        // Repeat LED blinking 10 times
        for(i=0; i<LOOP; i++){
                digitalWrite(LED, LOW);
                delay(MSEC);
                digitalWrite(LED, HIGH);
                delay(MSEC);
        }

        // Turn off LED
        digitalWrite(LED, LOW);

        return 0;
}

 

・ビルド、実行

[root@opi 14:55:01 gpio]# gcc -o blink blink.c -lwiringPi -lpthread
[root@opi 14:55:26 gpio]# 
[root@opi 14:55:27 gpio]# ll
total 12
-rwxr-xr-x 1 root root 6592 Dec 19 14:55 blink
-rw-r--r-- 1 root root  624 Dec 19 14:54 blink.c
[root@opi 14:55:30 gpio]# ./blink 
^C
[root@opi 14:55:53 gpio]# 

[root@opi 14:56:19 gpio]# gpio readall
 +-----+-----+----------+------+---+--OrangePiPC--+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |   2 |  -1 |    SDA.0 |      |   |  3 || 4  |   |      | 5V       |     |     |
 |   3 |  -1 |    SCL.0 |      |   |  5 || 6  |   |      | 0v       |     |     |
 |   4 |   6 | IO6 PA06 |  OUT | 0 |  7 || 8  |   |      | TxD3     |     |     |
 |     |     |       0v |      |   |  9 || 10 |   |      | RxD3     |     |     |
 |  17 |  -1 |     RxD2 |      |   | 11 || 12 | 0 | OUT  | IO1 PD14 | 1   | 18  |
 |  27 |  -1 |     TxD2 |      |   | 13 || 14 |   |      | 0v       |     |     |
 |  22 |  -1 |     CTS2 |      |   | 15 || 16 | 0 | OUT  | IO4 PC04 | 4   | 23  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | OUT  | IO5 PC07 | 5   | 24  |
 |  10 |  -1 |     MOSI |      |   | 19 || 20 |   |      | 0v       |     |     |
 |   9 |  -1 |     MISO |      |   | 21 || 22 |   |      | RTS2     |     |     |
 |  11 |  -1 |     SCLK |      |   | 23 || 24 |   |      | SPI-CE0  |     |     |
 |     |     |       0v |      |   | 25 || 26 |   |      | CE1      |     |     |
 |   0 |  -1 |    SDA.1 |      |   | 27 || 28 |   |      | SCL.1    |     |     |
 |   5 |   7 |  IO7 PA7 |  OUT | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   6 |   8 |  IO8 PA8 |  OUT | 0 | 31 || 32 | 0 | OUT  | IO9 PG08 | 9   | 12  |
 |  13 |  10 | IO10 PA9 |  OUT | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  19 |  12 | IO12PA10 |  OUT | 0 | 35 || 36 | 0 | OUT  | IO13PG09 | 13  | 16  |
 |  26 |  14 | IO14PA20 | ALT3 | 0 | 37 || 38 | 0 | OUT  | IO15PG06 | 15  | 20  |
 |     |     |       0v |      |   | 39 || 40 | 0 | OUT  | IO16PG07 | 16  | 21  |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+--OrangePIPC--+------+----------+-----+-----+
[root@opi 14:56:27 gpio]# 

OPIでLチカ GPIOをC で

前回、RasPi2 でWiringPiを使ってGPIO の制御をしました。

RasPi2 でCの王道? WiringPi

OrangePi でも同様に無いか探したところ、Forkしたものがありました。

WiringOP
https://github.com/zhaolei/WiringOP

サンプルソース

#include <wiringPi.h>

#define LED 16
#define MSEC 50

int main (void)
{
  wiringPiSetup () ;
  pinMode (LED, OUTPUT) ;
  for (;;)
  {
    digitalWrite (LED, HIGH) ; delay (MSEC) ;
    digitalWrite (LED,  LOW) ; delay (MSEC) ;
  }
  return 0 ;
}

GPIO

ビルド方法は以下のようにしました。

# gcc -o blink blink.c -lwiringPi -lpthread

ピンの指定が、以下で出てくる wPi の番号のようでした。

root@opi:~# gpio readall
 +-----+-----+----------+------+---+--OrangePiPC--+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |   2 |  -1 |    SDA.0 |      |   |  3 || 4  |   |      | 5V       |     |     |
 |   3 |  -1 |    SCL.0 |      |   |  5 || 6  |   |      | 0v       |     |     |
 |   4 |   6 | IO6 PA06 |  OUT | 0 |  7 || 8  |   |      | TxD3     |     |     |
 |     |     |       0v |      |   |  9 || 10 |   |      | RxD3     |     |     |
 |  17 |  -1 |     RxD2 |      |   | 11 || 12 | 0 | OUT  | IO1 PD14 | 1   | 18  |
 |  27 |  -1 |     TxD2 |      |   | 13 || 14 |   |      | 0v       |     |     |
 |  22 |  -1 |     CTS2 |      |   | 15 || 16 | 0 | OUT  | IO4 PC04 | 4   | 23  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | OUT  | IO5 PC07 | 5   | 24  |
 |  10 |  -1 |     MOSI |      |   | 19 || 20 |   |      | 0v       |     |     |
 |   9 |  -1 |     MISO |      |   | 21 || 22 |   |      | RTS2     |     |     |
 |  11 |  -1 |     SCLK |      |   | 23 || 24 |   |      | SPI-CE0  |     |     |
 |     |     |       0v |      |   | 25 || 26 |   |      | CE1      |     |     |
 |   0 |  -1 |    SDA.1 |      |   | 27 || 28 |   |      | SCL.1    |     |     |
 |   5 |   7 |  IO7 PA7 |  OUT | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   6 |   8 |  IO8 PA8 |  OUT | 0 | 31 || 32 | 0 | OUT  | IO9 PG08 | 9   | 12  |
 |  13 |  10 | IO10 PA9 |  OUT | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  19 |  12 | IO12PA10 |  OUT | 0 | 35 || 36 | 0 | OUT  | IO13PG09 | 13  | 16  |
 |  26 |  14 | IO14PA20 | ALT3 | 0 | 37 || 38 | 0 | OUT  | IO15PG06 | 15  | 20  |
 |     |     |       0v |      |   | 39 || 40 | 1 | OUT  | IO16PG07 | 16  | 21  |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+--OrangePIPC--+------+----------+-----+-----+

とりあえず動きました。関数の扱いがちょっと?な部分もあり、完全に互換ソースで動くというわけじゃなさそうです。

root@opi:~# ls /sys/class/gpio_sw/
normal_led  PA10  PA13  PA14  PA15  PA21  PA3  PA6  PA7  PA8  PA9  PC3  PC4  PC7  PD14  PG6  PG7  PG8  PG9  PL10  standby_led
root@opi:~# lsmod
Module                  Size  Used by
gpio_sunxi              8233  0 
8189es                901572  0 
root@opi:~# modprobe gpio_sunxi
root@opi:~# modprobe gpio-sunxi
root@opi:~# modprobe gpio
modprobe: FATAL: Module gpio not found.
root@opi:~# echo 1 > /sys/class/gpio_sw/standby_led/data
root@opi:~# echo 0 > /sys/class/gpio_sw/standby_led/data
root@opi:~# gpio -g write 16 1
pin number error
root@opi:~# gpio -g write 21 1
pin number error
root@opi:~# gpio -g write IO16PG07 1
pin number error
root@opi:~# gpio -g write PG7 1
pin number error
root@opi:~# gpio -g write 0 1
pin number error
root@opi:~# 

もう少し、手入れが必要ですね。sysfs に直接書くと以下のように光ります。gpio のマッピングがうまく機能していないようですね。

gpio_stanby_led

OPIでx2go

オレンジパイで、x2go (VNC のようなもので、ssh ポートのみで出来るもの)をしてみました。

2

osx では、X2Go Client を使いました。

Getting X2Go

http://wiki.x2go.org/doku.php/download:start

1便利かどうかはまだ不明ですが、ssh ポートだけでいけるのはいいのではと。

インストールしたときのメモ。loborisさんは、いろいろ作ってくれているので楽させてもらっています。

 

ReadME
https://github.com/loboris/OrangePi-BuildLinux

root@OrangePI:/usr/local/src# wget https://github.com/loboris/OrangePi-BuildLinux/raw/master/install_x2goserver
root@OrangePI:/usr/local/src# chmod 755 install_x2goserver 
root@OrangePI:/usr/local/src# bash ./install_x2goserver 

    Sun Dec 13 20:30:21 JST 2015
    *********************
    Installing x2goserver
    *********************
    
    Downloading the package ...
    --2015-12-13 20:30:22--  http://loboris.eu/x2goserver_install.tar.gz
    Resolving loboris.eu (loboris.eu)... 82.196.4.208
    Connecting to loboris.eu (loboris.eu)|82.196.4.208|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 6033423 (5.8M) [application/x-gzip]
    Saving to: ‘/tmp/x2go_install/x2goserver_install.tar.gz’
    
    /tmp/x2go_install/x2goserver_install. 100%[==============================>]   5.75M   335KB/s   in 21s    
    
    2015-12-13 20:30:46 (278 KB/s) - ‘/tmp/x2go_install/x2goserver_install.tar.gz’ saved [6033423/6033423]
    
    Unpacking ...
    Installing...
    
    OK.
    
root@OrangePI:/usr/local/src# 

root@OrangePI:/usr/local/src# ps axu | grep [x]2go
root     12964  0.0  0.5  11184  6084 ?        S    20:32   0:00 /usr/bin/perl /usr/sbin/x2gocleansessions
root@OrangePI:/usr/local/src# 


orangepi@OrangePI:~$ ps axu | grep [x]2go
orangepi 24355 15.4  4.9 150072 50708 ?        S    20:57   0:57 /usr/lib/nx/../x2go/bin/x2goagent -extension XFIXES -nolisten tcp -nolisten tcp -dpi 72 -D -auth /home/orangepi/.Xauthority -geometry 1024x768 -name X2GO-orangepi-51-1450007864_stDMATE_dp32 :51
orangepi 24438  0.0  0.0   4296   636 ?        Ss   20:57   0:00 /bin/bash /usr/bin/x2goruncommand 51 24355 orangepi-51-1450007864_stDMATE_dp32 30005 mate-session esd D
orangepi@OrangePI:~$