やまちゃんのオーディオブログ

真空管アンプ、最近は資金調達のためのFX,MetaTrader4ネタもやっています。

ラズベリーパイB

ラズベリーパイ、volumioカーネル環境をmakeなしクロスコンパイルなしで2時間で立ち上げる。クロスLAN接続

投稿日:2016年4月23日 更新日:

私は、ラズベリーパイをリニア電源(スイッチング電源でなくノイズが少ない)で動作するノーマルBモデル、rev2(過去記事「ラズベリーパイモデルBの入手と設定1」)をaliexpressで入手し、あえてこれを使っているが、
以下の準備は、ほとんど変わらないのではないかと思われる。

1 用意するもの。
PC、ラズベリーパイ本体、USBキーボード、クロスLANケーブル(近くの量販店でも数百円)、マイクロUSBケーブル(ダイソー)
8G以上のSDカード、HDMIケーブル(またはHDMI⇔DVI変換ケーブル(アマゾン))
LANケーブルはクロスでなくてもよいという話だが、確かめていない。

2 volumioのサイトから、PC上で1.55をダウンロードする。

3 Win32DiskImager.exeをダウンロードしてインストール。

4 PCにSDカードを刺し、Win32DiskImager.exeを起動し、ラズベリーパイ用のLINUXをSDカードにインストールする。
ここでPC上ではSDカードの容量が見かけ100MBになってしまい、
目が点になってしまうかもしれないが、WIN7から認識できていないだけなので、気にしない。
WIN7は認識できないので、ボリュームチェックなどしようとするが無視。

5 HDMIケーブル、記録済みSDカード、USBキーボード、マイクロUSBのケーブルを刺し、LANケーブルでPCと直接つなぐ。
ここで、USBキーボードを使って直接ラズベリーパイを操作するのは、ネットワークを確実迅速に接続するためであり、後でパソコンからLANケーブルでログインするので、後の操作ではキーボードはいらなくなる。
当方のLANの構成は
ラズベリーパイ⇔クロスLANケーブル⇔PC⇔無線LAN⇔無線ルーター親機⇔外界ネット
であり、ラズベリーパイを外界へつなぐには、後述のブリッジ接続をする。

6 マイクロUSBの他端(A型端子)をPCに刺したら、ラズベリーパイが立ち上がるので、
VOLUMIOが立ち上がったら、ロゴと#のマークが最後に出る。
ちなみに、HDMIが使えるテレビでも、映すことが出来る。

7 IPアドレスの固定
sudo nano /etc/network/interfaces
と直打ち入力して、以下のように設定ファイルを書きかえる。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.11.5
netmask 255.255.255.0
gateway 192.168.11.1

などとする。(各自の環境により、「11」「1」「5」は異なるので以下説明する。)
デフォルトでは、上記の「static」のところ、「vhdc」となっているので、IPアドレスを自動割り当てする設定になっており、PCから見るとそのアドレスを見つけるのが厄介で専用ソフトなどもあるぐらいだから、まずこれをさっさと固定するため「static」にする。
つまり、IPアドレスを固定しないと、PC側だけからラズベリー側のアドレスを探るにも、大変な苦労が必要になってしまうし、ネットワークが接続できない場合には2つのPCのいずれかに要因があって、トラブル原因がアドレス以外にも多いし、通信する相手方の情報がないと、接続するのは至難の業となってしまう。
そこで、まずそのIPアドレスの原因をまずつぶす。
ここで、addressは、ラズベリーパイのIPアドレスになる。まず、192.168.11.xxの「192.168.11.」という3ケタの部分がPCのものと一致していなければ、そもそも接続できない(前回の記事)。例えば、ラズベリーパイのVOLUMIOの初期設定は、192.168.1.Xとなっており、バッファローのものは、上3桁目が11なので、1を11へ書き変えない限り接続できない。
その3ケタを調べる方法は、
PC側は、コマンドプロンプトでipconfig
ラズベリーパイ側は、コマンドラインでifconfigである。
「gateway 192.168.11.1」は、ルータのIPアドレスを書く。
これを書かないと、外界ネットへ接続してファイルをダウンロードするとき、エラーになります。
4桁目の「5」は任意であるが、自身のPC環境で使っていない番号を選ぶ。
ルーターは通常1で、常用のPCが10だとすると、1、10以外にする。
書き変えたら、ctrl+Oでセーブ、エンターで記録される。
その後、ctrl+xでエディタを終了させる。
8 sudo nano /etc/resolvconf/resolv.conf.d/base
とやって、空ファイルが立ち上がるところ、
<2016.7.13修正>ここですべきコマンドは、どうやらsudo nano /etc/resolv.confのようです。空ファイルではなくて、「nameserver 8.8.8.8」というファイルが立ち上がります。
「nameserver 192.168.11.1」などと記入する。この「192.168.11.1」というアドレスは、各自の環境に従い変える必要がり、ここはルーターのアドレスとする。
このファイルもセーブ(ctrl+o)。
sudo nano /etc/resolv.confで
上記設定がされているか確認。
次にrebootで再起動することにより、上記設定変更を適用する。
再起動したら、ifconfigというコマンドを打ち込んで、以上の変更を調べる。

9 ここまでくれば、邪魔な別キーボードを外してよく、後はPCから遠隔操作する。
linuxでは、ログインにより別pcから遠隔操作するのが、むしろ普通のようである。
サーバーへのログインといったイメージか?

10 PC側は、コマンドプロンプトで「ipconfig」を入力してみる。
「169.254.・・・」と出た場合には、以下の措置。
「コントロールパネル」→「ネットワークと共有センター」
→ 左上の「アダプターの設定変更」
→「ローカルエリア接続」のプロパティでipv4の項目のところ、
固定アドレスとして、「192.168.11.10」などと固定アドレスを入れる。
このとき「255.255.255.0」というネットマスクは必須。ゲートウェイまで設定する必要はない。
このとき上3桁の「192.168.11」は、ルーター親機と共通にし、かつラズベリーパイの上記編集したファイルとも同じにする。最後の4桁「10」は、同一ネットワーク上でほかとは別の番号にする。

11 teratarmなるSSHのソフトをインストールする。
SSHは昔あったテルネットのセキュリティを強化したものととらえることが出来る。

12 teratarmを立ち上げたら、「ssh・・・」という項目にチェックを付け、ホストの欄に上記設定した「192.168.11.5」というラズベリーパイのアドレスを入れる。11と5は各自の環境に合わせる。

13 ここで上記再起動したラズベリーパイが#が出るまで完全に立ち上がった場合には、ログインの画面が表示される。ユーザー名「root」,パスワード「volumio」とする。
<2016.7.13修正>ちなみにvolumio2では、SSHでrootではログインできなくなったようです。

14 そうすると、一応PCからラズベリーパイを操作できる状態になる。
もちろん、コマンドを直打ちする必要がなくなり、ネットの情報をコピペできる。
ctrl+Cでコピー、マウスの右クリックでペーストできる。

15 次に、SDカードの領域を拡張する。
volumio入りのSSDカードは初期状態では、容量の全部は認識できない状態にあり、それを拡張する。
ラズベリーパイで遊ぶよ~!」というサイトの「ラズベリーパイのvolumioのSDカード領域を拡張するよ!」を参照して、
sudo nano /usr/bin/raspi-config
でファイルの「ne2:then」の2を3に変えます。
<2018.3.25 現在はこの辺の変更は不要です。>

セーブして、エディタを終了させ、
sudo raspi-configと入力し、フォームが立ち上がるので、「expand file system」の項目を選択して、設定を行うと拡張されている。
rebootをして、

fdisk -l

を入力すると、sdカードの全領域が使用されている。

root@volumio:~# fdisk -l

Disk /dev/mmcblk0: 31.4 GB, 31393316864 bytes
4 heads, 16 sectors/track, 958048 cylinders, total 61315072 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00043284

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 155647 76800 b W95 FAT32
/dev/mmcblk0p3 155648 61315071 30579712 83 Linux
root@volumio:~#

16 実はこのままでは、外部ネットワークに接続できないので、以下のブリッジ接続をする。
「コントロールパネル」→「ネットワークと共有センター」→ 左上の「アダプターの設定変更」
→「ローカルエリア接続」と「無線LAN」とをctrlを押しながら、
2つともマウスで選択し、右クリックし、ブリッジ接続の項目をクリック。
ここで、上記のSSHは自動的に切断し、即座に終了となる。

17 システムの更新
SSHを立ち上げなおし、以下のコマンドを打つ。

apt-get update
apt-get upgrade

(rpi-updateをすべきかは微妙やめたほうがいいです。 理由:依存性の問題。
これをやると、依存性があってできませんとかというような内容の警告表示がいっぱい出てくる。)
これでパーミッションエラーがでるときは、前に「sudo」を付けて、「sudo apt-get update」とする。

18 エラーが出たりダウンロード接続できないようだと、接続がおかしい。
ラズベリーパイとPCとのクロス接続をする場合の主なトラブル対策(前回の「ラズベリーパイ LANクロスケーブル接続を外部ネットへ ネットワークブリッジ 接続トラブル」参照)
①192.168.11.の3桁がPCとラズベリーパイで異なっている。→そもそもSSHでログインできない。
②ブリッジ接続をしていない。
③sudo nano /etc/resolv.confで「nameserver 192.168.11.1」等の記述がない。この記述がないとダウンロードが始まらず、タイムアウトになる。
④gateway 192.168.11.1などのゲートウェイの記述がない。
→この記述がないと、network・・・というエラーになる。

19 ここのあたりで、volumioのパスワードを変える。
外界からの侵入には、まったく無防備だからである。
sudo su
passwd
で2回パスワードを入力する。パスワードはメモしておく。

20 ソース一式をダウンロード。
ここではmakeをする必要はない。
どのサイトにも、コンパイルすべきことが書いてある。ラズベリーパイ上でやると8時間かかるそうである。
しかし、makeをする必要はない。
rpi-source というコマンドがあるからである。
参考サイトは、「new_western_elec」というサイトの「SabreBerry32のドライバのコンパイル方法(SABRE9018Q2C)」、本家のrpi-sourceのサイト参照。
素人がクロスコンパイル(PC上で作ったオブジェクトファイルをラズベリーパイへ移動)をやると、依存性の問題が出て、収拾がつかなくなる。クロスコンパイルでは最新のソース一式が導入され、古いシステムに依存しているVOLUMIOのシステムではまずいことになりかねないからのように思える。また、あまり言われていないが、vmplayer上のubuntuでクロスコンパイルをすると、「apt-get update」の通信速度が遅く、とんでもなく時間がかかる。2時間、3時間、4時間ぐらい??
「armデバイスプロドライバープログラミング」という本と、ネット情報の指示に従い、クロスコンパイルをすると、gccすら起動、インストールできない状態で参った。おそらくvolumioは、ラズベリーの子亀になるので、アップデートが遅く、古いシステムに依存しており、下手にラズベリー側のファームウェアにつきrpi-update等をすると、依存性の問題が噴出するのではないかと思われる。

20 まずは空ファイルをコンパイルしてみる(「手軽ARMコンピュータラズベリーパイでI/Op73)。
これが出来なければ話にならない。その方法は、上記した本家のrpi-sourceのサイトに詳しい。makeの方法などが書いてある。
まず適当なフォルダを作る。
コマンドラインから

cd /
mkdir test  (テストというフォルダを作成)
cd test
nano nothing.c  (nothingという新規ファイルを作成)

で「nothing.c」という新規ファイルを作る。
その内容は以下の通り。
「#include
MODULE_LICENSE(“Dual BSD/GPL”)」(上記「ラズベリーパイでI/O」参照。)
Makefileの内容は、「obj-m := nothing.o」とする。

<2018.5.6 追記:ここで、カーネルヘッダーをインストールしておくのが後々のエラーを回避できるので得策です。>

sudo apt-get install raspberrypi-kernel-headers

メークのコマンドについては、上記書籍のコマンドでは動かず上記rpi-sourceの「Examples on how to build various modules」に記載の「Hello World example」にある

$ make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
$ sudo insmod hello.ko

insmodにより、カーネルに組み込まれ、コマンドラインから、組み込んだドライバモジュールを呼び出して、実行できる。
その他上記の例(「Examples on how to build various modules」)には、いろいろビルドする例が掲載されているので、参考になる。

21 ここまできたら、SDカードの内容をPCのハードディスクにセーブする。
カーネルというのはOSの心臓部だから、壊れてしまうとシステムが立ち上がらなくなるリスクがあり、
以上の操作をやり直さなければならなくなってしまうからである。
私は2回ぐらい、やり直しをした。1度は、sudo nano /etc/network/interfacesで無線LANの設定をあるサイトに従いやってみると、起動の途中でfatal errorで止まった。2度目は、クロスコンパイルを説明するサイトに従い、クロスコンパイル環境を入れると、gccすら存在しない、新たに入れることもできないとなって、やむを得ずやり直した。

22 I2Sのソースファイルを探す。
I2SのスレープIO(外部クロック受け付けモード)のソースは、上記volumioのシステムにhifiberry_dac+というドライバ名でもとから組み込まれているので、
ファインドコマンドを使って、そのソースを検索する。

root@volumio:~# find ~/ -name “*i2s.c”
・・・
/root/linux-a6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46/sound/soc/bcm/bcm2708-i2s.c
/root/linux-a6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46/sound/soc/bcm/bcm2835-i2s.c
/root/linux-a6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46/sound/soc/davinci/davinci-i2s.c
/root/linux-a6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46/sound/soc/samsung/s3c2412-i2s.c
・・・

「・・・/sound/soc/bcm/」にi2s関連のファイルがある。
そこで、その関連のフォルダの名称をコピペして、以下のcdで移動し、

cd /root/linux-a6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46/sound/soc/bcm/

内容をdirで調べる。
(もちろん、みなさんが追試された場合に「linux-a6cf3c9・・・」とは限らない。コピペした内容による。)

root@volumio:~/linux-a6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46/sound/soc/bcm# dir
bcm2708-i2s.c bcm2835-i2s.c hifiberry_dac.c hifiberry_digi.c Kconfig rpi-dac.c
bcm2708-i2s.h hifiberry_amp.c hifiberry_dacplus.c iqaudio-dac.c Makefile

ラズベリーパイの使用しているICに応じて、
bcm2708-i2s.cか、bcm2835-i2s.cを使う。ノーマルB rev2.0(512Mb)は、bcm2708である。
ここで、正確なクロックを受信して、ラズベリーパイが受動的にそのクロックに同期してデータを送信するというスレーブモードがあるが(仕様書p120、CLKM=1、PCM_CLKが入力になる)、
これをきちんと動作させているのが、1つの例として「HiFiberry DAC+ PRO」である。
このドライバは、テキサスインスツルメンツのPMC5122用であるがシステムをアップデートして、ソースを取得すれば、そのドライバはシステムに含まれるものとして、既にソースファイルがインストールされている(「HiFiBerry DAC+ PROを買って使ってみた」参照)。
このサイトにある「rpi-update」が本当に必要かは調査中。
このソースはボードの下位互換を保つため、無駄にも思えるチェック動作をしているので、その機能削減等、常にスレーブモードで、もっと汎用性を持って動かすようにするというのが今後の課題である。
当該サイトによると、hifiberry_dacplus.cには、HiFiBerry DAC+ PROの動作もプログラムされているようであるが、アップデートしなければ使えない。
アップデートが「apt-get update」、「apt-get upgrade」、「rpi-update」のどれによるものかはよく分からない。「rpi-update」をすると依存性の問題が生じやすく、素人では手に負えない可能性がある。
ちなみに、現状では、「rpi-update」はしていない・・・

-ラズベリーパイB

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

ラズベリーパイ カーネル3 I2Sドライバのコンパイルをあきらめず続ける

以前の記事に引き続き、I2Sドライバのコンパイルをあきらめず続ける。 「三日坊主な私がいつまでブログやれるか...( ̄~ ̄;) 」のラズベリーパイの記事を参考にさせていただいています。 volumio …

no image

ラズベリーパイのi2s外部クロック、その後4(2018年度版)

13 ラズパイの信号に応じて、クロックを切り替えるボード  この点をどのようにするか、基板を起こす方法もあるけれど、試行錯誤が多いと思えるので、 FPGAを用いて、プログラム的に、信号切り替え、分周な …

no image

ラズベリーパイ、volumioカーネル環境2 I2Sドライバのコンパイル

前回の「ラズベリーパイ、volumioカーネル環境をmakeなしクロスコンパイルなしで2時間で立ち上げる。クロスLAN接続」に引き続き、ラズベリーパイ、volumioカーネル環境で、I2Sドライバをコ …

no image

ラズベリーパイのi2s外部クロック、ついに動作確認

やりました! とうとうやりました。 PLLではなく、外部クロックでラズベリーパイを鳴らせることができました! bckも外部クロックで駆動しています。 使ったクロックは、キョーセラの7050k(22.5 …

no image

ラズベリーパイのi2s外部クロック、その後3-3(2018年度版)

(以下、コンパイルの説明をする。コンパイルをしてしまうと後で戻ることは難しくなる。  ここで、パソコンにSDカードのデータをセーブする必要がある。セーブするにはsdformatterを使う(後の回に説 …

[最近の記事]
2016年4月
 12
3456789
10111213141516
17181920212223
24252627282930