• ポータブル版プロジェクト

    @デジタル さん

    できたバイナリをfileコマンドで調べるとなんと表示されますでしょうか

  • @パパリウス さん
    pi@leanmpd:/usr/bin $ file mpd
    mpd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=dbea7e9f4d686029edb1c7f66b870acd26b602db, stripped

    以上です。よろしくお願いいたします。

  • @デジタル さん

    fileコマンドの結果は問題ないようですね。
    mpdはバージョンによっては mpd.conf の書き方に問題がある場合に
    segmentation faultが発生することがありました。
    以下、お試しください。

    ①バージョン確認
     ※ファイル形式があっていれば、これは実行できるはずです。

    mpd -V
    

    ②デバッグ実行
     ※途中で落ちているのであれば何かしら情報を得られると思います。
      mpdはフルパス指定の方が確認の意味でもよいかと思います。
     ※もし動き続けるようでしたら Ctrl + C で止まります。

    sudo systemctl stop mpd
    sudo /usr/bin/mpd --no-daemon --stderr --verbose /etc/mpd.conf
    
  • @donuts-shop73 さん
    ご返信ありがとうございます。

    ①バージョン確認

     ※ファイル形式があっていれば、これは実行できるはずです。

    ビルド後に最初に実行したのですが、ここでエラーになりました。
    ですので、やはり大きな手落ちがあるのだと思います。
    デバッグ実行に関しては、この状況では手がかりになりにくいと思えまして、
    今のところ試していません。

  • @デジタル さん

    私はカーネル以外は実機でコンパイルしていますので、
    クロスコンパイラでそのまま使えるかどうかは分かりませんが、
    以前、Raspberry Pi Zeroでコンパイルした際に指定したオプション
    を以下に記載します。
    ご参考までに。

    CFLAGS="-s -O2 -march=armv6zk -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s -mcpu=arm1176jzf-s -ffast-math -ftree-vectorize -funsafe-math-optimizations"
    CXXFLAGS="-s -O2 -march=armv6zk -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s -mcpu=arm1176jzf-s -ffast-math -ftree-vectorize -funsafe-math-optimizations"
    
  • @donuts-shop73 さん

    情報のご連携ありがとうございます。
    CFLAGS、CXXFLAGSを教えて頂いた内容にしてビルドしてみましたが、
    やはりsegmentation faultが発生しました。
    クロスコンパイルで指定するべき項目に漏れがあるのだと思いますが、
    追及するには時間が必要だと思えますので環境を変更しました。

    Raspberry Pi のセルフビルド環境を QEMU で作る - Qiita
    ここを参考に疑似セルフビルド環境を作成してビルドしてみました。
    結果、作成したバイナリで正常に音出しする事ができました。
    mpdにはデジファイのおとさんのRTパッチのみを当て、CFLAGS、CXXFLAGSはdonuts-shop73さんのものを使わせて頂きました。

    次はsmpdのカーネルの導入により、smpdとLeanMPDの融合に1歩踏み出したいと思っています。
    mpdのビルドよりずっと大変でしょうが。

  • @デジタル さん

    クロスコンパイルはなかなか難しいですよね。

    クロス環境ではLTOあり(CFLAGS="-flto")でうまくビルドが通らなくて、断念したという経緯があります。
    リンカーの問題だとは思うのですが、いろいろ試したものの解決には至りませんでした。

    donutsさんと同じく、私もカーネルのビルドだけクロス環境で行っています。


    RTカーネル・Xenomaiカーネルに共通なのですが、USBのFIQが問題になって起動しないケースがあります。

    smpdのカーネルに差し替える際には、cmdline.txtに

    dwc_otg.fiq_enable=0
    dwc_otg.fiq_fsm_enable=0
    dwc_otg.lpm_enable=0
    

    を入れておいていただく必要があるかもしれません。

  • @パパリウス さん

    クロスコンパイルは、多数あるヘッダやライブラリが意図したように(ARM用として)使われているのか、確認が困難です。
    おそらくここに漏れがあると思いますが、これを特定するのはなかなか大変な作業です。
    それから、LeanMPDへのカーネルの移植ですが、今のところdepmod -aでエラーとなっていますので、
    コツコツ解決していく予定です。
    今は実験段階と思いますので、ここは時間がかかっても一歩一歩確認しながら進めていく予定です。

  • それから、LeanMPDのオリジナルですが、Raspberry Pi 3環境では起動しないようです。

  • @デジタル さん

    モジュールのパスが異なっている場合、depmodは失敗します。
    今回のようにmodules.depもセットで別のカーネルに差し替える場合は、depmodのエラーは気にしなくてよいと思います。

    depmodは、カーネルモジュールを修正して差し替えた時にmodules.depを更新したいときに使います。


    私も1000回以上、カーネルを差し替えてきました。
    「性能上がるかな、、、音質上がるかな、、、!?」とワクワクしながらカーネルを差し替え、測定と試聴を繰り返していました。うまく起動しないことも数百回あったはずです。
    デジタルさんもカーネルガチャを楽しんでください:flushed: