mieroさんが、4.9.Xのソースを作ってくれるのを待っていても
よいわけですが、カーネルいじりの好きな私はついついこういう
遊びをやってしまいます。
できてしまえばコロンブスの卵のようなことなんで、私自身
拍子抜けしてしまいました。
kernelのmenuconfigにどうやってbotic関連の表示をさせるかが
わかった瞬間ひらめいたんですが、細かいことは私の趣味なの
で興味がある方のために手っ取り早い方法を説明します。
まず、kernel.orgの最新カーネル4.9.7とmieroさんの4.8.13
をダウンロードし各々展開してください。
私は先に4.9.7にrtパッチをあて、lightmpdbbbのconfig.gzに
入れ替えました。
そして、4.9.7の以下のディレクトリを4.8.13のそれと入れ替え
てください。
arch/arm/boot/dts
include/sound
sound/soc/codecs
sound/soc/davinci
sound/soc/generic
こうしてkernelのmenuconfigを立ち上げて見てください。
device driversのところにboticの選択項目が表示されている
はずです。それを選択してビルドしてください。
(firmwareディレクトリにam335x-pm-firmware.binをコピー
しておくことをお忘れなく)
buildrootを使うなら、am335x-boneblack-botic.dtbを作る
指示をお忘れなく。
ca2さん、やってみてください。
inthedark
inthedarkさん
さっそく試して、うまく行きました。ちゃんと音も出ています。
kernelの中でboticの機能にあたる部分を入れ替えてるのでしょうか?このへんの勘は私にはないので、簡単な手順で最新kernelでBotic対応できるのは驚きです。
ちなみに、buildrootの中でmakeしましたが、TopDirにlocal.mkを置く方法を試しました(manualのhttps://buildroot.org/downloads/manual/manual.html#_advanced_usage" target="_blank">https://buildroot.org/downloads/manual/manual.html#_advanced_usageの8.12.6にある方法です)。そのlocal.mkに、
LINUX_OVERRIDE_SRCDIR = botic-kernelの場所
のように書いておくと、make linux-menuconfig時にダウンロード設定は無視して(パッチも自動では当たらない)、OVERRIDE_SRCDIRから丸々コピーすると言うものです。linux-kernelに限らず、どのパッケージについても使えるとのこと。
ただ、普通はbuildrootに任せたほうが良いので、使い道がわからなかったんですが、今回のケースだとちょうど良さそうなので試してみた次第です。
ca2さん
ちゃんと音がでましたか。嬉しいもんですね、やっぱり。
ご報告ありがとうございます。
>kernelの中でboticの機能にあたる部分を入れ替えてるのでしょうか?
最初にyoさんに話を持っていったときのやり方よりは、私の
最終目的はこれでした。ドライバーを組み込むこと。
これをgithub.com/mieroのbotic-devをみて考えていました。
ドライバーを組み込んでも、menuconfigに表示されない、
これでは使えないなあと思っていたのですが、その仕組みが
わかったもんですから道が開けた感じです。
(4.8.x系列はEOLですし、4.9.Xはlongtermなんでしばらく
お付き合いできそうですしね。)
local.mkの件、ありがとうございます。勉強になります。
ca2さんがお気づきになられたことや、便利だなあと思われた
ことなど、buildrootのスレでもこのスレでも結構ですので
書き残して行っていただけると、これからbuildrootを使いたい
人(どれくらいいるかわかりませんが)に役立ててもらえるん
ではないかと思います。
inthedark
inthedarkさん
すいませんが >私は先に4.9.7にrtパッチをあて
この部分が良く分かりません。
何処に4.9.7のrtパッチがあるのか?教えていただけないでしょうか?パッチが綺麗に当たるlinux-4.9.7元ソースもお願いします。
ちなみに
https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/" target="_blank">https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/
ここにはpatch-4.9.6-rt4.patch.gz しか見当たりません?
初心者さん
4.9.7のパッチはまだありません。
4.9.6のパッチをあてています。エラーも出ませんので。
これでやってみてください。(気になるなら4.9.6にカーネル
ソースも合わせられたらよろしいかと思います。)
今確認しましたら、4.9.8が最新になってますね。
本当に更新が激しいですね。
inthedark
>4.9.6のパッチをあてています。エラーも出ませんので。
もう状況は変わっているようです。
上手く当たりません...
$ zcat patches-4.9.6-rt4.tar.gz | patch -p1
Hunk #1 FAILED at 135.
Hunk #2 succeeded at 1676 (offset -28 lines).
1 out of 2 hunks FAILED -- saving rejects to file kernel/locking/rtmutex.c.rej
patching file kernel/locking/rtmutex_common.h
Hunk #1 FAILED at 99.
1 out of 1 hunk FAILED -- saving rejects to file kernel/locking/rtmutex_common.h.rej
patching file kernel/irq/spurious.c
patching file drivers/scsi/qla2xxx/qla_isr.c
patching file include/linux/interrupt.h
Hunk #2 succeeded at 217 (offset -2 lines).
Hunk #3 succeeded at 229 (offset -2 lines).
patching file kernel/irq/manage.c
Hunk #1 succeeded at 233 (offset -2 lines).
Hunk #2 succeeded at 276 (offset -2 lines).
Hunk #3 succeeded at 299 (offset -2 lines).
Hunk #4 succeeded at 356 (offset -2 lines).
patching file include/linux/interrupt.h
Hunk #1 succeeded at 412 (offset 6 lines).
patching file kernel/irq/manage.c
patching file kernel/irq/manage.c
Hunk #1 succeeded at 2100 (offset -11 lines).
patching file drivers/gpu/drm/i915/i915_gem_shrinker.c
patching file drivers/gpu/drm/msm/msm_gem_shrinker.c
patching file kernel/cpu.c
Hunk #1 FAILED at 418.
1 out of 1 hunk FAILED -- saving rejects to file kernel/cpu.c.rej
patching file include/linux/cpu.h
Reversed (or previously applied) patch detected! Assume -R? [n]
初心者さん、こんばんは。横から失礼します。
とりあえず、ほとんど最新のlinux-4.9.7を使えばどうでしょうか?
あるいは、安全を考えるなら 4.9.6 でも良いかと…
https://www.kernel.org/pub/linux/kernel/v4.x/" target="_blank">https://www.kernel.org/pub/linux/kernel/v4.x/
以下に、
https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.7.tar.gz" target="_blank">https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.7.tar.gz
があります。
rtパッチは、そのうち新しいのが出ると思うので待つのが良いでしょう。
inthedarkさん。
buildrootについては、後ほどmanualから引いたtips的なものを書いてみようと思います。そんな多くはないですが…。
inthedark さん
そういう手があったのですか(@д@)。
正攻法は4.8.13の Botic Patch をかけるという方法ですが、試してみたら(パッチはgithubのアーカイブのlinux-dev-botic7-v48/patches/boticにあります)
yo@ubuntu:~/linux-4.9.7$ nano drivers/mfd/tps65217.c.rej
yo@ubuntu:~/linux-4.9.7$ nano drivers/rtc/rtc-omap.c.rej
yo@ubuntu:~/linux-4.9.7$ nano arch/arm/boot/dts/Makefile.rej
yo@ubuntu:~/linux-4.9.7$ nano sound/soc/generic/Kconfig.rej
と4箇所エラーになりますね。この内、rtc-omap.c、Makefile、Kconfig はレベルアップに伴う単純なエラーなので、修正は簡単です。しかし、tps65217.c のエラーはエラー箇所が多く、ちょっと修正は大変そうですね(できないというレベルではないですが)。
「tps65217 って何だろな」と調べたら、BBBの電源制御用チップのようですね。無視は出来ないようです。
このあたりは、多分、終了時の電源オフ対策のパッチだと思いますので、かかってないというのは、ちょっと不味いかもしれません。
初心者さん
私のところでlinux-4.9.7にpatch-4.9.6-rt4.patchをあてましたが
rejもなくちゃんと当たりますよ。
ca2さん
援護射撃は大歓迎ですので、バンバンお願いします。
ca2さんのtips楽しみにしております。
私も勉強しよう。
inthedark
yoさん
私はそのパッチの存在は知りませんでした。
4.8.X系列のpatchだから4.9.xにはうまく当たらないのは
当然なんでしょうね。
私は知り合いからboticっていうのはドライバだよ、と
聞かされてましたのでそのドライバさえ組み込めればどの
カーネルでも一応動くだろうと思ってやってみたら動いちゃった
ということです。ca2さんから音出しの報告もいただいており
ますので、まあやってみるもんだなあと。
inthedark
どこが間違っているのか わかりません?
$ wget ftp://ftp.kernel.org/pub/linux/kernel/v4.x/linux-4.9.7.tar.gz
$ wget ftp://ftp.kernel.org/pub/linux/kernel/projects/rt/4.9/patches-4.9.6-rt4.tar.gz
$ tar xvzf linux-4.9.7.tar.gz
$ cp patches-4.9.6-rt4.tar.gz linux-4.9.7/
$ cd linux-4.9.7
$ zcat patches-4.9.6-rt4.tar.gz | patch -p1
patching file kernel/locking/rtmutex_common.h
Hunk #1 FAILED at 99.
1 out of 1 hunk FAILED -- saving rejects to file kernel/locking/rtmutex_common.h.rej
patching file kernel/irq/spurious.c
patching file drivers/scsi/qla2xxx/qla_isr.c
patching file include/linux/interrupt.h
Hunk #2 succeeded at 217 (offset -2 lines).
Hunk #3 succeeded at 229 (offset -2 lines).
patching file kernel/irq/manage.c
Hunk #1 succeeded at 233 (offset -2 lines).
Hunk #2 succeeded at 276 (offset -2 lines).
Hunk #3 succeeded at 299 (offset -2 lines).
Hunk #4 succeeded at 356 (offset -2 lines).
patching file include/linux/interrupt.h
Hunk #1 succeeded at 412 (offset 6 lines).
patching file kernel/irq/manage.c
patching file kernel/irq/manage.c
Hunk #1 succeeded at 2100 (offset -11 lines).
patching file drivers/gpu/drm/i915/i915_gem_shrinker.c
patching file drivers/gpu/drm/msm/msm_gem_shrinker.c
patching file kernel/cpu.c
Hunk #1 FAILED at 418.
1 out of 1 hunk FAILED -- saving rejects to file kernel/cpu.c.rej
patching file include/linux/cpu.h
Reversed (or previously applied) patch detected! Assume -R? [n]
だめですね...
ca2 さん
> buildrootについては、後ほどmanualから引いたtips的なものを書いてみようと思います。そんな多くはないですが…。
楽しみにしています。
僕は digififan さんの雛型を使って、どうにか make は通ったという段階で、まだマニュアルを読み込むまでに到っていません。
只今、熱中しているのは、uInitrdの軽量化と反対の重量化(^^;;;です。
mpd まわりのライブラリ構成を arch linuxと同じ構造にして音がどうなるか試しているところです。一人でやっていても限界があるので、耳の良い皆様の意見を聞くため、仮に公開してみるかなと思っています。
inthedark さん
確かに、ドライバ機能に関連するパッチ0001...からパッチ0010...までは問題なくかかっていますので、ソース入れ換えてやれば、ドライバとしては正常に動くということだと思います。
エラーになった(パッチのかかっていない)部分は、多分、ちゃんと電源オフしない時の対策などでしょうから、普通に使っている分には動くということでしょう。
初心者さん
僕も直前に書いたメッセージにあるパッチかけは同じ手順でやりました。つい一時間位前です。
rejはBotic側だけでした(findで確認してあります)。もう一度最新版で試してみたらどうでしょう。
すみません。訂正します。
wget ftp://ftp.kernel.org/pub/linux/kernel/projects/rt/4.9/patches-4.9.6-rt4.tar.gz
ではなく
wget ftp://ftp.kernel.org/pub/linux/kernel/projects/rt/4.9/patch-4.9.6-rt4.patch.gz
でした。
これでやってみてください。
yoさん
私の軽量化の話はまあ趣味の様なものです。lightMPDは元々十分に小さいですし。
buildrootの更新にあわせて個人でビルドするとなると、ミニマムがわかってると管理も簡単でDLもmakeも早いというのが、強いていえばメリットでしょうか。
カーネルの話が出てるので、便乗でみなさんに、以前から少々気になっていたcpufreqのことで質問させてください。
まず、Moctさんのdebian版の話なんですが、botic7-rc1とbotic7-rc3のカーネルがついていて、botic7-rc1ではcpufreqが有効で、たとえば
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
とすればCPUの最大設定が見れて、手順をふめば設定変更もできました。一方でbotic7-rc3だと
/sys/devices/system/cpu/cpu0/cpufreq が見れなくなって、cpufreqの設定もできなくなりました。これは、今回のbotic化4.9カーネルも、config時にcpufreqを選ぶようにしても同様の状態です。なお、
/sys/devices/system/cpu/cpufreq
はあります。そもそもカーネルが対応してないのか、あるいは設定が足りてないのでしょうか?
可能なら、音楽再生にパワーは特別必要ないので、最小の300MHzに設定したいと思っています。非常にささいなことなので、無理なら無理でもかまわないんですけれども。
ca2 さん
軽量化して音がどうなるのかに大いに興味があります。
lightmpdの場合、オリジナルの状態で十分に軽量化されているでしょうから、それ以上やったらどうなるか、試してみたいと思っています。よい設定が見つかったら是非教えてください。
あと別件ですが、cpufreqを僕の環境(自作のbotilized debian jessie と 自作のbotilized arch linux、どちらもカーネルは4.8.13)で確認してみました。
/sys/devices/system/cpu/cpufreqはあるが、/sys/devices/system/cpu/cpu0/cpufreqはありません。
しかし、/sys/devices/system/cpu/cpufreqは空のディレクトリです。
linux-dev-botic7-v48/KERNELで menuconfig(configはbotic v7のものを使用)を確認したら
CPU Power Management --->
CPU Frequency scaling --->
[*] CPU Frequency scaling
となっていました。
ということで、あまり参考になりませんが、無くなったのですかね。
yoさん。cpufreqの件、調査ありがとうございます。
あまりカーネル周りのことが分かってないんですが、boticカーネル側の対応次第なんでしょうかね。またmieroさんが新しいカーネルを出した時には、状況も変わるかもしれないので待つのが良さそうです。
いまさらですが、mieroさんの4.8.13 はAlsaドライバが768kHzまで拡張されているんですね。
このスレの手順でビルドしたカーネルを使って2Lのサイトにある352.8kHzのサンプルファイルを再生して
cat /proc/asound/Botic/pcm0p/sub0/hw_params
を実行したときの表示は
access: RW_INTERLEAVED
format: S24_LE
subformat: STD
channels: 2
rate: 352800 (352800/1)
period_size: 2940
buffer_size: 52920
となりましたが、念のために /sound/core/pcm_native.c の拡張が反映されるようにパッチをあてた方が良さそうです。
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -1981,12 +1981,13 @@
return snd_interval_refine(hw_param_interval(params, rule->var), &t);
}
-#if SNDRV_PCM_RATE_5512 != 1 << 0 || SNDRV_PCM_RATE_192000 != 1 << 12
+#if SNDRV_PCM_RATE_5512 != 1 << 0 || SNDRV_PCM_RATE_768000 != 1 << 16
#error "Change this table"
#endif
static unsigned int rates[] = { 5512, 8000, 11025, 16000, 22050, 32000, 44100,
- 48000, 64000, 88200, 96000, 176400, 192000 };
+ 48000, 64000, 88200, 96000, 176400, 192000,
+ 352800, 384000, 705600, 768000 };
const struct snd_pcm_hw_constraint_list snd_pcm_known_rates = {
.count = ARRAY_SIZE(rates),
参考
https://patchwork.kernel.org/patch/9160203/" target="_blank">https://patchwork.kernel.org/patch/9160203/
kens さん、情報ありがとうございました。
僕の公開しているカーネル(linux-upstream)もパッチをかけておくかなと思い、調べたら、パッチはかかっていますね。
#if SNDRV_PCM_RATE_5512 != 1 << 0 || SNDRV_PCM_RATE_768000 != 1 << 16
#error "Change this table"
#endif
static unsigned int rates[] = { 5512, 8000, 11025, 16000, 22050, 32000, 44100,
48000, 64000, 88200, 96000, 176400, 192000,
352800, 384000, 705600, 768000 };
考えてみたら、boticの作者(mieroさん)が管理しているカーネルソースですから、当たり前ですね(^^;;;。