realtime kernelの作り方メモ
に引き続き、mpd 0.19.19にnative DSDパッチとrealtimeパッチを入れた版を作るメモ。
Part 1
では、mpd 0.19系のコンパイルが旨く行かないので、mpd-0.18.23を採用したと書きました。
最新版じゃないですがmpd-0.19.19でなんとかなりました。
うまくmakeできなかったのは、ubuntu 16.10のコンパイラがgcc 6系なのが原因でした。
今回も自分向けのメモに過ぎないですが...
Webを探してみると、
yanさんのrealtimeパッチは以下の二つがあるようです。
mpd-0.19git-rtopt20140327.patch
mpd-0.19git-rtopt20150418.patch
そして
lintweakerさんのnative DSD support patchは、mpd0.19.19用が最新です。
従ってmpdは0.19.19を使う事にしました。
mpd-0.19.19単体でのmakeはオッケー。
lintweakerさんのpatch当ててもmakeオッケー。
realtimeパッチは2015年版はrejが出て失敗します。
2014年版はhunkはあるものの成功します。
しかしパッチ自体は当たりますが、Ubuntu 16.10でmakeすると、以下の様なエラーで終わります。
overloadedされたGetBlockValueがambiguousだそうです。なんじゃそりゃです。
原因は、Ubuntu 16.10で採用されているgccが6系だったことの様です。
4系なら問題無く通るようですが...。
調べてみるとgcc 6系への移植の際に問題になる点らしい。
C++は良く判らんのですが、引数の型が違う同じ名前の関数?を定義できるんですね。
そして、4つほどあるGetBlockValue関数のどれを使うか曖昧で判らん!!と怒ってるらしい。
じゃ、4系ではどれを採用してcompileしてたんでしょうか??暗黙の了解があるのかな。
あー。結論としてpatchのpatchでオッケー。
# diff mpd-0.19git-rtopt20140327.patch mpd-0.19git-rtopt20140327-mustang.patch
890,891c890,893
< +#define RTOPT_DEFAULT_STACK_RESERVE ((size_t)0)
< +#define RTOPT_DEFAULT_HEAP_RESERVE ((size_t)0)
---
> +//#define RTOPT_DEFAULT_STACK_RESERVE ((size_t)0)
> +//#define RTOPT_DEFAULT_HEAP_RESERVE ((size_t)0)
> +#define RTOPT_DEFAULT_STACK_RESERVE ((unsigned)0)
> +#define RTOPT_DEFAULT_HEAP_RESERVE ((unsigned)0)
結局2か所変えるだけ。そして...喜んでたら...2015年版patchには...既にこの変更が入っていた...orz
気を取り直して...この辺のパッケージも追加で入れたのでメモ。多分、次回も忘れるので...。
# apt install libav-tools libboost-all-dev