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

   2019/08/08

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

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

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


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

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

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

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

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

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

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

環境

ビルド手順

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

カーネルのソースを取得

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

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が参考になった。

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

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

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


この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

13 + 20 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください