LoginSignup
7
6

More than 5 years have passed since last update.

JETSON TX1が来てやったこと(4日目)

Posted at

本日の目標

カメラモジュールをV4L2へ置き換えます。
と言っても、やはりよく分からないので
Development Guide「Video for Linux User Guide」の章を上から順に舐めていきます。

テストパターン

どうやらサンプルで、テストパターン画像を生成する擬似デバイス(カメラの制御は行わない)が入っているようです。
起動の流れをざっくり書くと
1. 既存のモジュール(GStreamer?)を停止する
2. V4L2ドライバをインストールする
3. V4L2制御用ソフト(Yavta ---- Windowsで言うところのamcapみたいなもの?)で画像をキャプチャする。
という流れのようです。
ここだけ見ると、別にV4L2ドライバのためにカーネル再ビルドする必要ないんじゃね?と思えてくるんだけどね……
基本的にはガイド通りに進めれば良いので、書かれてないことだけ捕捉します。

Yavtaのインストール
V4L2デバイスから画像を取得するために必要なソフトのようです。
パッケージで配布されてないようなので (apt-getでインストールできない)
Gitで引っ張ってくる必要があります。
以下のコマンドを打つと、Yavtaが使えるようになります。
$ sudo apt-get update
$ sudo apt-get install git
$ git clone git://git.ideasonboard.org/yavta.git
$ cd yavta
$ make


ImageMagickのインストール
Yavtaでキャプチャした画像を表示するために必要なソフトのようです。
こちらはパッケージで配布されているので、以下のコマンドでインストールできます。
$ sudo apt-get install imagemagick

上手く行くと、彩りタイル画像が表示されます。
modprobe tegra_cameraした時点で、/dev/video0というデバイスが見えるようになります。
当然なのかどうなのか、Gstreamerで画像取得は出来なくなっています。
引数らしきtpg_mode=2の数字を1とか3とかに変えても大きな変化なし、つまらん。

OV5693_V4L2ドライバのインストール

ここからは、Gitの使い方も知らないズブの素人による悪戦苦闘の記録になります。
手順書によると、まずカーネルのソースコードにパッチを当てる必要がありそうです。
ところで、パッチについてはL4TのバージョンR23.1R23.2に限定するような記述ですね。
今日時点、Gitから取得できる最新のバージョンはR24.1です。
意味は気にせずgit checkout tegra-l4t-r24.1と打ち込んでいたので、多分バージョンがズレてると怒られます。
というわけで、ひとまずバージョンをR23.2に戻すことにします。
git checkout .
git checkout tegra-l4t-r23.2
これでバージョンR23.2の状態に戻り、パッチが当てられるようになったはずです。

パッチを当てる

git am 0001-ARM64-adding-OV5693-V4L2-on-E3326-jetson_cv.patch
手順書通りに上記コマンドを打ち込むと、gitから「お前ドコ中出身だオラ?」みたいな警告出てきます。
いや別にリポジトリ汚染する気はこれっぽっちもないんですローカル更新したいだけなんです……
多分、使い方を間違えてるんだろうな。あと引数で指定してるっぽい*.patchってのも実体がどこにあるのか全くの不明
分からないことはフォーラムで検索します、そして行き当たったのがこちらの記事
要約すると
「パッチはどこからダウンロードすればいいんでうsか?」
「コレがパッチだくれてやるよ(テキストべた貼り)」
って事なんですかね?
まさかそんな……と思いながらも、他にやり方が思いつかないので泣きながらコピペして*.patchファイルとして保存。
gitも、git amだとやっぱり同じように上手く行かないのでgit applyでぶち込みました。

configを書き換える

どうにかこうにかパッチを当てたと思ったら次は「設定ファイルを書き換えろよボーイ」と来たもんだ。
この設定値がどこにあるのか全く見当が付かないので、例によってgrepで当たりを付ける。
多分arch/arm64/configs/tegra21_defconfigってやつだな……というわけで、こいつを書き換えます。
あとは前回の記事同様に、カーネルを再コンパイルします。
ソースコードは再度修正しないと、またエラーで止まるからね!

ビルド結果をTX1に転送する

いよいよ最終段階、前回端折った所まで来ました。
(転送しても同じカーネルが上書きされるだけで意味が無いと思い、飛ばしたところ)
よく分からないので、それっぽいファイルは全てコピーします。
ImagezImageを、カーネルビルド出力先のarch/arm64/boot/からkernel/に上書きコピー
module_installの出力先のlibディレクトリを全てrootfs/libに上書きコピー
あとはデバイスツリーなんだけど、ビルド先に出来たのはdtsフォルダで、カーネルに置くべきはdtbっぽいぞ
これどうやって変換するんだ……と悩むこと数十分
dtsフォルダの中身、拡張子がdtbやないか!!クソ、時間返せ!!
一応、元のdtbフォルダの中身は全部消してからdtsフォルダの中身を全コピーします。
これで動くやろ、./flash.shを走らせて待機。

結果

TX1再起動!またgitとYavtaインストール!めんどい!
ガイド通りにコマンドどーん!!rawファイル保存できた!!
raw2bmpって何だよ、分からないからUSBメモリにどーん!!
Windows上のRawビューワーで、カメラ画像っぽいのが撮れてる事が確認できました。
Gstreamerで画像取得した時との違いは
* 画像サイズが違う(リサイズなのか切り出しなのかは不明)
* ベイヤー配列で出てきてるっぽい(画処理されてない)
* 画像がひっくり返ってる

まとめ

GstreamerからV4L2ドライバに置き換え、ソースコード弄れそうなところまでこぎ着けました。
バッチファイルの中を見れば、大体どこを弄れば良いか当たりが付けられそうだし
ガイドもまだまだ続きがあるので、画像サイズとか映像フォーマットとか調整できそうな気がします。
今日はここまでということで。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6