工作好きな情報系の雑記

PN7150をRaspberry Pi 3で動作チェックできるようにする

一応このページでPN7150の動作チェックを行えるRaspbianOSイメージは配布されている。
「OM5578 PN7150 RPI Linux」ってやつがそのイメージファイル。

PN7150 development kits for RaspberryPi, BeagleBone Black and boards with Arduino connectors, including LPCXpresso, Kinetis Freedom and i.MX boards.
NFC Development Kits for Arduino and more | NXP - 

しかし、これを書き込んでもRasPiがPN7150の接続を認識してくれない。
おかげでテスト用プログラムが動作しない。
おいおいしっかりしてくれよ〜。

仕方ないので、ドライバを組み込んでカーネルをビルドし直すことにした。


Raspbianのカーネルのビルド方法は、ローカルビルドとクロスコンパイルの2通り存在する。

  1. RasPi上で直接ビルドして上書きする
  2. Ubuntuとか別の環境でビルドしたものを、Raspbianを書き込んであるSDカードにコピーする

後者の方が色々やりやすいしビルドの時間も大幅に短縮できるんだけど、今回はこの方法では成功しなかった(ぐやじい!!)ので、前者のローカルビルドで話を進めていく。

Raspbianのカーネルビルドについての公式サポートページ↓

Explanation of some fundamental Linux usage and commands for getting around the Raspberry Pi and managing its filesystem and users
Kernel building - Raspberry Pi Documentation - 

PN7150のためのドライバを組み込む方法が載っているガイドライン↓

クロスコンパイルで成功している人のブログ↓
「[nfc]OM5578/PN7150S来たる」というタイトルの記事群が参考になる。

2011年からやっているので、記事の日付にご注意ください
hiro99ma blog - 

ローカルビルドで成功している人の記事↓
今回はこれをベースにして進めたらうまくいった。

Raspberry Pi 3でNFCの読み書きをする場合、USBカードリーダーを接続する方法とI2Cで接続されるボードを搭載する方法の二つがあります。本記事では、(https://www.nx...
NFCをリード・ライトするためにRaspbianをビルドする - Qiita - Qiita

環境

ビルド手順

依存モジュールをインストール

カーネルのソースを取得

ドライバーのソースを取得

drivers/misc/Makefileを編集

最下行に「obj-$(CONFIG_NFC_NXP_PN5XX) += nxp-pn5xx/」と追加。

drivers/misc/Kconfigを編集

最下行のendmenuの直前(source "~"の並びの最後)に「source "drivers/misc/nxp-pn5xx/Kconfig"」を追加。

dtsファイルの追加

nxp-pn54x-nfc.dtsというファイルを作る。

中身は以下の通り。

bcm2710.dtsiの編集

#includeの並びに「#include "nxp-pn54x-nfc.dts"」を追加。

ビルドの準備

Kernel Configuration画面では、[Device Drivers] > [Misc devices] > [< > NXP PN5XX based driver]と辿り、これを<M>にしてSaveしてExit。

ビルド

RasPiでのローカルビルドなので、4~5時間くらいかかる。
クロスコンパイルなら1時間半くらいで終わるのに...

これが終わったら、「ls arch/arm/boot/dts/*.dtb」とかを叩いてdtbファイルが生成されていることを確認する。
生成されていないとこの先で失敗する。

クロスコンパイルの時はここでdtbファイルが生成されず、先に進むことができなかった。
この辺の解決方法はフォーラムで議論されていたし、なんならdtbファイルを生成できるようにもなったんだけど、結局PN7150は認識されなかった。

インストール

パーミッションの設定

デフォルトでは、/dev/pn544のr/wはルートユーザーにしか許可されていない。
これではアプリの実行に支障をきたすので、一般ユーザーでもr/w可能にする。

新たに「pn5xx_i2c.rules」というファイルを作り、「#ACTION=="add", KERNEL=="pn544", MODE="0666"」と記述する。

再起動

再起動後、lsmodとかでpn5xx_i2cが表示されていれば、無事認識されている。
おめでとう!

i2cdetectでも接続が確認できる。

デモを動かす手順

linux_libnfc-nciというフォルダの中にでもアプリが入っているが、これも元のままだと動かないため、ビルドし直す必要がある。
linux_libnfc-nciのビルド方法はこのissueが参考になった。

Hello, I have interfaced the PN7150 into my i.MX6 board through i2c interface. I have compiled like below. ./bootstrap ./configure --enable-pn7150 make I am getting the following error while runnin...
SNEP Client Register Callback Failed · Issue #53 · NXPNFCLinux/linux_libnfc-nci - GitHub

Waiting for a Tag/Device...というのが出てくればpollingが正常に開始されたと見ていい。
ここまでくれば安心だと思う。

でも今度はマウスとキーボードが動かなくなってしまった。
なんでだ。
まぁssh使えば本来の目的が遂行できるからいいけども。

いや〜もう1週間以上かかったわ〜。
大変だった...

モバイルバージョンを終了