2017-02-02

雪山、というかスキー場装備

息子一号が週末塾のテストがないそうで…というわけで、久しぶりの家族旅行。

最初、冬キャンプを予定していたのですが、、、「寒い」、、、と却下を喰らい、じゃあ、何がいいんだ?と聞いたら「スキーに行きたい」んだそうな。

というわけで、奥様と、一号がスキー。二号は最初スクールにほうりこんで、そこで滑れるようになるなら、翌日はスキー、でなければ雪遊び。おいらは二号付き添い、という方向で。

いろいろそろえた装備のテストも兼ねて…


・帽子 ミズノ ブレスサーモ
・バラクラバ ミズノ ブレスサーモ
・ネックウォーマー ノーブランド フリース


・下着 アンダーアーマー コールドギア or バーグハウス メリノウール
・ミドル アンダーアーマー コールドギア or ノーブランド フリースシャツ
・インナーダウン ノースフェイス
・ダウン バーグハウス
・アウター ミズノ ゴアテックス(合羽)


・下履き ミズノ ブレスサーモ
・防水ズボン マーモット Fusion Dri Neo Pants


・靴下 ミズノ ブレスサーモ
・靴 ノースフェイス ヌプシ ウォータープルーフ


・ブレスサーモ 手袋
・アウトドライ 手袋
・ゴアテックス オーバーミトン

って感じですかね。スキーをする予定はないので、雪上でのんびりすごせるくらいの暖かさがキープできれば、と。

ああ、そうだ、防寒テムレスも持っていかねば…

2017-01-10

浦安海釣

新年2日。検見川浜突堤にて。これでシーズン3匹め。


8日には高洲公園前で40センチのフッコ。なんか釣れてないみたいで、偵察に来た方が、唯一釣れてます、と。常連からも、年始から初めて釣れた魚をみたとか、、、カレイ以外にもセイゴは釣れてて、小さいから大抵リリースしてるんだけどなぁ、、、

で、9日。今度は総合公園前。一瞬当りがあったように見えるが、反応続かず。なんだ、と思ってあげてみたら、穴子でした。これで浦安の海で3匹め。居るなぁ、とか思いつつ。



このサイズなら自力でさばけました。



今回は奥様のご要望で、天ぷらに。ふわとろで、とても美味しかったです。


まぁ、魚は居ないわけぢゃないよ、と言うことで、、、

2017-01-09

わかった!

よーく他と比較したら…

iqaudio-dac.c に対して、iqaudio-dacplus-overlay.dtsと、同じレベルのdtsが作られていた。

今回やってるのは

bcm2835-i2s.c(alsaドライバ)→rpi-dac.c(dacドライバ)

の形式で、sampling_rateとかがbcm2835-i2s.cで簡単に拾えているので、そちらに改造を行っていた(よその改造記事でもそこに手を入れていたので)…

これが、失敗だった…

実際修正していたdtsファイルはrpi-dac-overlay.dtsだったので、rpi-dac.c側にgpioの制御を持たせないといけなかった。
#もしくはbcm2835-i2sに対応したdtsファイルを作らないといけなかった(これが正しいやり方かは、微妙な気がするが)

というわけで、bcm2835-i2s.cに乗せていた修正を、全部rpi-dac.c側にうつしたら、あっさり動きました。
(1) probe で、dtsファイルのgpioポートを探して、静的変数に保持する。
(2) hw_paramsで、sampling_rateを識別し、それに合わせて gpioポートの値を変える。

ようやく、linuxのデバイスツリー周りの初歩が理解できました。長かった…日本語のWeb上の解説がほとんど無くて苦戦しました。

何かが違った…

arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
とか
arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts
を参考に

fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "rpi,rpi-dac";
i2s-controller = <&i2s>;
status = "okay";
};
};


reset-gpio = <&gpio 16 0> ;
とかを記述追加

で、
sound/soc/bcm/iqaudio-dac.c

sound/soc/bcm/hifiberry_digi.c
を参考に

probe関数の中で
devm_gpiod_get(&pdev->dev, "reset", GPIOD_OUT_LOW);
を使って、resetのgpioの情報を読みだそうとするが、-2でエラー。

なぜ引っ張れないんだろう、と思案中。

エラー値は、 -ENOENT (=-2) つまり、「ファイルまたはディレクトリが存在しません。」

要するに、"reset" で、dtsの中の情報を引っ張ろうとしてるが、引っ張れません、というところか…

ソースをみていくと
http://lxr.free-electrons.com/source/drivers/gpio/gpiolib.c#L3194
このあたり、__must_check gpiod_get_indexの中で

デバイスツリーか、ACPIでの検索をして、なかったら、gpiod_findして、それでもなかったら、上記エラーを返している、と。

dtsに書いている時点でデバイスツリーを使っているはずだが…

んー、よく見比べると

if (pdev->dev.of_node) {

の内側、

i2s_node = of_parse_phandle(pdev->dev.of_node, "i2s-controller", 0);

のコールがすんでからのみ、呼んでるようにみえるな…ちょっとそっちの方向で試してみるか…

2017-01-07

浦安海釣

12月に入って、カレイをもう1匹ゲット。場所は、高洲公園前。
今年はフッコが渋いですね、あんまり釣れません。

1月2日に検見川浜の突堤で、他の人とは違い中に向けて投げていて、カレイをゲット。これで今シーズン3枚。

1月7日に高洲公園前で40cmのフッコ。なんか、原付で来た方に「お!釣れてる人を初めてみた」とか言われた。んー、一応それなりに釣ってるんだけどなぁ…
帰りに常連のおっちゃんに遭ったら「を、やっぱり魚いるぢゃん」って…年始以降で初めてみた魚だったらしい。んー、えー…

この時期、バチ抜けなので、高洲公園前なら適切なところに適切な時間に投げ込んでいれば、たいてい釣れます。岸から80mくらいのところを狙って…

検見川浜の突堤で、ヒイカが釣れているのをみて、浦安でも釣れんかなぁ、と思案中。そのうちいろいろやってみる予定です。寒いからくじけるかもしれませんが…

作業メモ

Raspberry Pi を使い、外部クロック同期で、SPDIFを出す基板に対応するために、いろいろとカーネルに手を入れたのでそのメモ残し。

・環境
 Raspberry Pi 3
 Raspbian OS
 mpd

Volumioでやろうかとも思ったのですが、エディタすら入ってなかったのであきらめました。
Raspbian OS を GitHub から持ってきて、カーネルを一度ビルドかけておきます。
放熱しないと、時々熱で処理速度が落ちるので、その際は息を吹きかけて、とかやってると1時間ちょっとくらいでビルドが終わります。
ビルドが終わったら、カーネル差し替えて、動くよね、と確認しておきます。
#ここらの手順は、Raspberry Pi のサイトにあります。

・ドライバの組み込み。
bcm2835-i2s と、Rpi-dac およびpcm1794a-hifiの組み合わせで利用。
/boot/config.txt にどいつを組み込むかが書いてあるので、そこに rpi-dac を記述。
参考
rebootかけて、lsmodすると、rpi-dac周りが入ってるはず。入ってなければ rmmod とかで不要なドライバを抜いて、insmod でrpi-dacとかを入れておく。

・ドライバの改造
GPIOでいろいろ情報を渡す(サンプルレートとか)ので、それができるように設定する必要がある。
カーネルビルドを行った環境で、以下を参照。
linux/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "rpi,rpi-dac";
i2s-controller = <&i2s>;
status = "okay";
};
};
この _overlay_ の内側に、gpioの識別名-gpio = <&gpio ポート番号 値> ; とかいう形で記述しておくと、後ほどドライバからこの設定を読み込んで、指定のgpioの値の書き換えが可能となる。これが最初どこにあるかさっぱりわからなかった…

ここにgpioの設定を書き込んだ後に、linux/sound/soc/bcm/bcm2835-i2s.cを書き換える。

bcm2835_i2s_probeの中で、devm_gpiod_get を使って、上記の「gpioの識別名」に対応する情報が得られる。この情報を使って、gpiod_set_value_cansleepで値をセットすると、きちんと反映されるようになった。

後はスレーブモードになるように設定値を変えれば、大体終了。

カーネルをビルドしなおして、差し替えをしてrebootすれば、これらの設定が生きるようになるはず。

あとは、mpd入れて、適当なファイルを再生すれば、きちんと鳴ることが確認できました。

gpioの設定を理解するまでが長かった…判りやすく解説している情報がなかったので、clock44 という文字列で、カーネル中をすべて検索してよーやく…