×

開発者1号の足跡[その1]~ホットなラズベリーパイをいただきました~

2016-04-27

こんにちは。Lazuriteの開発者1号です。自分の隣で日々進化を遂げていく「らずらいと姫♥」に刺激を受けまして、ついブログを書いてみようと思い立ってしまいました。自分のメモがてら、皆様にとって有益な情報をご提供できればと思っています。不定期の更新になりますが、よろしくお願いいたします。

Raspberry Piは、ZeroやPi 3と日々進化を遂げています。そして今回、Raspberry Pi3がついに入手できましたので、Lazurite Pi Gatewayを動作できるようする過程のメモを残していきたいと思います。Raspberry Pi2は5V1A電源だったのに対して、Raspberry Pi3の推奨電源は5V/2.5Aが推奨とのことなので、「甘くないラズベリーパイを頂きました」(デバイスプラスで紹介されていたRaspberry Piの紹介記事)というより、Raspberry Pi3は「ホットなラズベリーパイ」ですね。

IMG_0445

さて、本記事ではカーネルドライバのビルド環境を構築し、SPIをカーネルドライバから使用できるように変更する部分を中心に書いていきます。細かくRaspberry Piを立ち上げ方を知りたい方は他のホームページを参照して頂けるようお願いいたします。

1.最初の立ち上げ

自分はNoobsではなくDebianをダウンロードし、そのカーネルファイルをWin32Disk Imagerを使用してSDカードに書き込みします。

使用したバージョンは、「2016-03-18-raspbian-jessie」でした。

書き込み完了後、Raspberry Pi3に装着してみたところ、SDカードが抜けづらくなっています。改良されていますね!!

起動すると最初からXターミナルが起動しGUI画面が出るようになっていました。
そして、お約束のディスク容量拡張やキーボードの設定などは、GUI上でできるように進化しています!!驚きの連続です。
→GUI上では英語文字コードが外れてしまい文字化けが発生してしまいました。結局raspi-configで英語を残しつつ日本語を足す形で設定をおこないました。

2. wifiの設定

カーネルファイルを配布することを考え、Wi-Fiの設定は手作業で行っていきます。
次のファイルを開き、ファイルの最後にWi-FiのSSIDとパスワードを設定を追加します。

[bash]

pi@raspberrypi:~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="your SSID"
psk="your password"
}

[/bash]

その後、次のコマンドを入れてWi-Fiを再起動すると、Wi-Fiの接続ができます。

[bash]

pi@raspberrypi:~ $ sudo ifdown wlan0
pi@raspberrypi:~ $ sudo ifup wlan0

[/bash]

一応、確認してみると次の通りアドレスの取得ができました。他にもいろいろなメッセージが表示されますが、inet addr:の後ろにIPアドレスが表示されていたら成功です。

pi@raspberrypi:~ $ ifconfig wlan0⏎
…….
inet addr: 192.168.0.xx
……..

さらっと流してしまいましたが、Raspberry Pi3からWi-Fiとbluetoothが内蔵されたので、そのままWi-Fiがつながるんですね!!

3.日本語キーボードの設定

Lazurite Pi Gatewayでは、4GBのディスク容量で納めるために、日本語入力などの設定は省略させていただいています。ただし、キーボードだけは設定しないと不便なので有効にしておきましょう。

4.Advanced Option

I2C,SSH,シリアル, SPIを有効にしておきます。

5.Raspberry Piのカーネルビルド

Raspberry Piのホームページにカーネルビルドの方法が掲載されていましたので、その通りに進めていきます。ローカルビルドというのはRaspberry Piでコンパイルするすること、クロスコンパイルというのはRaspberry Pi以外でコンパイルすることです。今回はRaspberry Pi3をつかってRaspbery Pi3のカーネルをビルドしていくので、ローカルビルドのほうを進めていきます。 ソースコードの取得

pi@raspberrypi:~ $ git clone –depth=1 https://github.com/raspberrypi/linux

ビルドに必要なソフトウエアの取得
pi@raspberrypi:~ $ sudo apt-get install bc

6.SPIをカーネルドライバから使用するための変更

SPIは最初から組み込まれているアプリケーションに占有されているようで、そのままではカーネルドライバからSPIを使用することが出来ません。そのため、SPIドライバの名称を変更してLazurite Pi Gatewayを制御できるようにしています。

Raspberry Pi3のSPIドライバは次のファイルに記述されているようです。spidev@0の名称をbp3596_spiに変更します。

bp3596_spi

変更後の画像はこちら

spidev0_after

7.カーネルビルド

再びRaspberry Piのホームページに掲載されているカーネルビルドに戻り、続きを進めていきます。

cd linux
KERNEL=kernel7
make bcm2709_defconfig

そしていよいよカーネルビルドです。これは非常に時間が掛かるので覚悟して行ってください。

make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img

 

8.コンパイル時にできた不要なファイルを削除し、再起動します。

[bash]

pi@raspberrypi:~ $ cd ~/linux/
pi@raspberrypi:~/linux $ make clean
pi@raspberrypi:~/linux $ reboot

[/bash]

9.ここまでの作業でビルド環境が完成したはずです。

LazDriverのソースコードを取得し、コンパイルの確認をしてみたいと思います。
まずはソースコードの取得から

[bash]

pi@raspberrypi:~ $ cd
pi@raspberrypi:~ $ mkdir driver
pi@raspberrypi:~ $ cd driver
pi@raspberrypi:~ $ git clone git://github.com/LAPIS-Lazurite/LazDriver
Cloning into ‘LazDriver’…
remote: Counting objects: 123, done.
remote: Total 123 (delta 0), reused 0 (delta 0), pack-reused 123
Receiving objects: 100% (123/123), 154.64 KiB | 58.00 KiB/s, done.
Resolving deltas: 100% (62/62), done.
Checking connectivity… done.
[/bash]

続いてドライバをビルドしてみます…

[bash]

pi@raspberrypi:~ $ cd ~/driver/LazDriverpi@raspberrypi:~/LazDriver $ make
make -C /lib/modules/4.4.8-v7+/build SUBDIRS=/home/pi/LazDriver modules
make[1]: Entering directory ‘/home/pi/linux’
CC [M] /home/pi/LazDriver/drv-802154e.o
CC [M] /home/pi/LazDriver/mac-802154e.o
CC [M] /home/pi/LazDriver/phy-bp3596.o
CC [M] /home/pi/LazDriver/i2c-bp3596.o
CC [M] /home/pi/LazDriver/spi-bp3596.o
CC [M] /home/pi/LazDriver/ieee802154e.o
LD [M] /home/pi/LazDriver/DRV_802154.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/pi/LazDriver/DRV_802154.mod.o
LD [M] /home/pi/LazDriver/DRV_802154.ko
make[1]: Leaving directory ‘/home/pi/linux’

[/bash]

無事、ビルドすることが出来ました!!

10.動作確認

最後にドライバの動作確認をしてみたいと思います。ここではLazGemを使って動作確認をしてみます。

10-1.LazGemのインストール

[bash]
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install gem
pi@raspberrypi:~ $ sudo gem install LazGem
[/bash]

10-2.LazGemの取得

Ruby用サンプルコードを取得します。

[bach]

pi@raspberrypi:~ $ mkdir ~/ruby
pi@raspberrypi:~ $ cd ruby
pi@raspberrypi:~ $ git clone git://github.com/LAPIS-Lazurite/LazGem

[/bash]

10-3.サンプルコードを実行してみましょう。

[bash]
pi@raspberrypi:~ $ cd ~/ruby/LazGem/sample
pi@raspberrypi:~ $ ./sample_rx.rb
[/bash]

無事に受信できました!!

rpi3_rx

まとめ

長くなってしまいましたが、初回はRaspberry Pi3でLazuriteを動作させる方法を記載させて頂きました。これをダウンロードできるように配布したいところですが、ディスク容量が4.5Gバイトもあり、カーネルをダウンロードできるようにするには大きすぎます。色々と実験をして、4GB以内のサイズ以内に収めることが出来るようになったら、改めてご連絡いたします。