目次: ROCK64/ROCKPro64
昨日(2018年11月10日の日記参照)の続きです。残る問題は3つありました。
2番目の「認識しなくなる問題」の原因が判明しました。
I2S2を有効にするとSPDIFが使えなくなる問題は、DMAの資源が枯渇していたせいでした。
RK3328はARMのPL330(or互換)のDMAを持っています。SPI, UART, I2S, SPDIF, PWM, PDMなど16のハードウェアがこのDMAを使えますが、実は同時に使えるのは8つまでという制約があります。知るかそんなこと……。
オーディオ系のハードを全てdisableにしたときのDMA資源の割り当ては、
このようになっていて、残りは4つです。
I2S0, 1, 2はそれぞれDMA資源を2つ使い(TX, RXがあるため)、SPDIFは資源を1つ使います(TXしかないため)。
Rockchip Linux(Rockchipが独自にメンテナンスしているLinuxのツリーのこと)の設定ではI2S0, I2S1のみを有効にしてSPDIFを切り捨てています。ちょうど資源を8つ使いきる設定ですね。ROCK64はピンヘッダにしかSPDIF信号が出せませんし、捨てるのも妥当かなとは思います。
私が前にエラーになってできないと言っていたパターンはI2S0, I2S1, I2S2, SPDIFを有効にするパターンです。この場合、
以上のようにDMA資源が足りなくなり、エラーになってしまいます。
ちなみにI2S0, I2S1, SPDIFを有効に(11/16: I2S2 → I2S1に訂正)すると、一応動くのですが、割り当てを調べると、
このようにUARTが犠牲になってしまうようです。Audioが動いても、UARTが死んじゃうのはダメな気がします。
(11/16加筆)UARTはDMAが無効になっても動作はしますので、死んでしまうという言い方は間違いでした。正しくは、Audioのために勝手にUARTのDMAを無効にしてしまうのはダメな気がします。デバイスツリー上は有効になっているように見えるので。
せっかく鳴るようになったSPDIFを活かすか、Rockchip Linuxに合わせるか、さて、どうしたもんかなあ。
メモ: 技術系の話はFacebookから転記しておくことにした。少し加筆。
目次: ROCK64/ROCKPro64
先日(2018年7月22日の日記参照)買ったRockchip RK3328搭載ボードROCK64で遊んでいます。
RockchipのSoCで動くLinuxはRockchipがメンテナンスしているLinux(以降Rockchip Linux)ですが、実はLinuxの本流開発ツリー(以降linux-next)も動作します。
しかしlinux-nextの方は全く音が出ません(speaker-testで叩くとxrun_recovery faild: -5, Input/output errorが出ます)。
以前S/PDIFも全く動かなかったのですが、原因が分かったのでパッチを送って直しました。今は出音までできているはずです。しかしI2Sは原因が違うらしく、なぜ動かないのかさっぱりです。
I2Sのレジスタ情報はTRM(Technical Reference Manual)に載っていたので、それを見つつRockchip Linuxとレジスタ値を同じに揃えましたが、I2Sは微塵も動きませんでした……。
I2S以外のドライバのバグを疑い、Rockchip LinuxのI2Sドライバを丸ごとコピーしたら、動いてしまいました。疑いはハズレ、つまりI2Sドライバに何らかのバグがあることは確定です。一体何が違うんでしょう。diffを見ましたが差分の意味がわかりません。
差分は多くないので、力技でRockchip Linuxからlinux-nextに1つずつ差分を移植していって、動作するかどうか確かめました。原因はdevm_snd_dmaengine_pcm_register() の第2引数(config)にNULLを渡すかどうか、でした。
私には、その違いの意味するところも、現在のlinux-nextのコードの何が悪いのかも、さっぱりわかりません。
動作とコードを追ってみると、現在のlinux-nextのコードはstruct snd_dmaengine_pcm_configのprepare_slave_configを設定し忘れているため、全くDMA転送設定がされていないことがわかりました。
要は、音声データを全くI2Sハードに送っていなかったんです。そりゃ動くわけないわ。
Rockchip Linuxはどうしていたかというとdevm_snd_dmaengine_pcm_register() の第2引数にNULLを指定していました。何も指定していないのに、どうして動くのでしょう?同じバグを踏まないのでしょうか?
実は第二引数にNULLを指定するとALSAのフレームワーク側でprepare_slave_configにsnd_dmaengine_pcm_prepare_slave_config() を指定した状態と同等に扱われます。この働きにより、無事動作していたのでした。わかるかそんなの。
知っていれば秒殺系のバグでしょうけど、私はぱっと見ではわかりませんでした。
バグの修正としてはたった1行なんですが、理解するまで2日掛かりました。Linux詳しい人はもっと早く解析できると思います……。Linuxを触っているとこういうの多いので、もっとLinuxパワーが欲しいです。
せっかく判明したバグなのでALSA MLにパッチをぶん投げておきました。
ちなみに、これで万事解決ではなく、アナログ音声端子から音を出すにはI2S1とACODECというハードを叩かないといけないです(今回動いたのはI2S0)。今わかっているだけで、
これだけの問題があります。Rockchip Linuxは何らかの方法で問題を解決しているはずなのですが、今のところ私にはさっぱりわかりません。
私のような門外漢が四苦八苦するより、Rockchipの中の人がlinux-nextに修正パッチを投げてくれる方が断然早いんですけどねえ。あまりlinux-nextにはご興味がないのでしょうか。
LANケーブルでHDMI伝送できる世界初の "GPU搭載" HDBaseTカード - PCWatch を読んで。
面白い製品だな〜と思いつつ、今一つこの製品の価値が理解できていませんので、少し調べてみました。
私の予想するこの製品の魅力は、
のどちらかです。まず価格を見てみると、
HDMIケーブルは確かに高いけど、実はCAT7 LANケーブルもかなり高いため、大きな違いがありません。
次に距離を見てみると、HDMIも50mくらいならイコライザ付きのケーブルを使えば、引き回せるみたいです。さすがにケーブル1本で100mは無理そうでした。商品が見当たりません。HDMIで100mに挑むとすると、
このような選択肢があるようです。HDMIで50mを超えることは不可能ではないですが、一気に価格が跳ね上がります。
従って、この製品が輝くシーンは
「50m〜100mのディスプレイ配線をケーブル1本で安く繋ぎたいとき」
だと思われます。たぶん。
メモ: 技術系の話はFacebookから転記しておくことにした。少し加筆。
引っ越し荷物を開梱していると、たくさんのマウスとキーボードが出てきました。いつのまにこんなに買っていたのか。
写真には6つのマウス、6つのキーボードが映っていますが、他にもマウス3つ(Logicool V450、Microsoft Wireless Mouse 1000が2つ)と、キーボード1つ(Topre REALFORCE)がありました。
マウスの一覧です。
キーボードの一覧です。
マウスは9個も買ったにも関わらず、一番手に合うと思ったのは、会社のPCに付属している有線タイプのマウスでした。サイズが絶妙で、とても軽くて良いです。
ワイヤレスマウスは妙に小さいか、妙に重たいので、手が疲れてしまいます。今のところ唯一気に入ったのはLogicoolのM705だけです。
キーボードは7個も買いましたが、キーの配置がスタンダードであることだけが重要で、構造や他の要素はあまり気にならないことがわかりました。PCに付属しているキーボードはキー配置に捻りがなくて使いやすいものが多いですが、最近のPCは変なキー配置のキーボードが増えていて困ります。普通の配置が良いです。要らんことしないで欲しい。
前の会社(ソシオ)で使っていた富士通PCに付いてたキーボード(FKB-1424と配置が似ているやつ)はキーが若干頼りなかったですけど、キー配置が普通で良かったです。
今の会社のDELL KB216はイマイチです。左下のFnキーが邪魔ですし、左Altのところ(Zキーの一段下)にWinキーが来ていて、メチャクチャ押し間違えます。あまりに誤打するので撤去して、REALFORCEに置き換えたほどです。昔使っていたDELLマシンのキーボード(DELL SK8115?スペースキーが正方形のもの)はスタンダードな配置で良かったのにな〜。なんでノートPCもどきの配置にしたんでしょうね。
Logicoolのマウスは良いものが多いんですけど、キーボードはイマイチなキー配置が多いです。K275以外は誤打連発で手に合いません。
REALFORCEは価格は高いのを除けば、キー配置がスタンダードで非常に良いキーボードです。我が家では活躍の場がないため、会社に持って行って活躍してもらっています。
メモ: 技術系の話はFacebookから転記しておくことにした。10月13日の投稿が元だが、大幅に加筆した。
先日(2018年10月15日の日記参照)気づいたことですが、FacebookやLinkedInの職歴では、現職として2社以上に所属することができるようになっています。
エグゼクティブクラスなら複数の会社の取締役を兼任するだろうけど、正直言って自分には縁が無い機能だと思っていました。
しかしエグゼクティブでなくとも、この世には「出向」という2足の草鞋を履ける制度がある訳で。自分でこの機能を使うことになるとは思いませんでした……。
メモ: 技術系の話はFacebookから転記しておくことにした。
< | 2018 | > | ||||
<< | < | 11 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | - |
合計:
本日: