Select Your Language

免責事項

  • 本サイトの情報の利用、内容、サービスによって、利用者にいかなる損害、被害が生じても、著者は一切の責任を負いません。ユーザーご自身の責任においてご利用いただきますようお願いいたします。

    本サイトで頒布している基板およびキットは、技術者、またはそれに準ずる電気的知識をお持ちの電子工作ファンの方のためのものです。 一般のオーディオファンの方のためのものではありません。
    また、頒布基板およびキットは、いかなる条件でも動作を保証するものではございませんので、あらかじめご了承ください。

    電子工作では、火傷、感電、火災などの可能性があります。 十分に注意をして作業して下さい。

    営利目的のご使用は認めておりません。  記事の転載や、基板・キットの商用利用の方は、ご連絡ください。
    学生やサークルの学習目的でまとめてご購入する場合は特別なコースをご用意させていただきます。

スポンサー

« Moode Audio 4.0 正式版をスクリプト一発で導入 | トップページ | AACを最高の音質で聴くためのMPDコンパイル FDK-AAC-0.1.5 »

2018年2月10日 (土)

RaspberryPiに最新のRT-Linuxを入れる方法

RT-Linuxとは、リアルタイム性を重視したlinuxのことで、以前にも導入方法を書いていました。 ところが、その方法だけだと、今のバージョンでは起動しないことがわかったので忘備録として書いておこうと思います。

現在、最新のRT-linuxは下記から入手できます。

https://www.kernel.org/pub/linux/kernel/projects/rt/

Rt000_2

4.9 のページに入って最新のバージョンを探します。

とりあえず使うのは「patch-4.9.76-rt61.patch.gz 」にしてみます。

これは、カーネルソース一式ではなく、パッチといわれる差分だけを収録したファイルです。つまり、このバージョンに合わせたカーネルソースも必要です。 

 

実は、ここがクセモノなのです。

特定のバージョンのソース一式をラスベリーパイ公式のhttps://github.com/raspberrypi/linuxから持ってくるときに、一番簡単なのはlinux/Makefileを開いてHistoryをみることなのですが。。。

Rt001

Historyを見ると過去のバージョンが見え、その commit 番号もわかります。

Rt002

4.9.76 はこれだ!

赤丸の部分をクリックすると、ファイルの差分が表示され、commit番号もでてきます。 (ファイルアイコンのような部分をクリックするとダイレクトにcommit番号がクリップボードにコピーされます。)

Rt003

この赤丸の” 7bbc6ca4887794cc44b41412a35bdfbe0cbd1c50 ”という長い文字列がコミット番号です。

コミット番号がわかれば、下記の方法でソース一式をgetできます。gitでクローンするより断然速い。

  wget https://github.com/raspberrypi/linux/archive/コミット番号.tar.gz

 

 ところが

 

このcommit番号で持ってきたソースの中にはDevice Tree Overlayのソースが入っていなかったのです。

カーネルとデバイスモジュールをビルドした後、dtbsをビルドするときに気が付きました。

忘れないように備忘録として書くのはこの部分です。

 

カーネルバージョンが分かっても、次にバージョンがUPされるまでの間に沢山のcommitがあります。 Kernelのバージョンだけ分かってもダメな可能性があるんですね。

Rt004  

先ほどの「linux/Makefile」と「linux/arch/arm/boot/dts/overlays/Makefile」 のHistoryを比較してみます。

そうすると、linux/Makefileの 4.9.764.9.77の日付けの間に、overlays/Makefileも運よく更新されていました。 今度は、こちらのcommit番号で持ってきます。

 

wget https://github.com/raspberrypi/linux/archive/aae807a781807e95c761fe0a5babbc9bd5adaed6.tar.gz

今度は、Device Tree Overlayのcommit番号なので、Overlayのソース一式が抜けてるなんてことはありません。

 

 これにて万事解決!

 

とはいかないのが linux の世界です。

頻繁に必要な手順(やコマンド)が変わっていくのです。

 

今回成功した手順を以下に書いておきます。

 

 

ビルド環境の準備

事前にSDカードの空き容量が1GB以上あることを確認しておきます。

sudo apt-get update

sudo apt-get -y install ncurses-dev device-tree-compiler bc

 

 

RT-linuxのソースコード準備

以下は patch-4.9.76-rt61に合わせたcommit番号での説明です。

wget https://github.com/raspberrypi/linux/archive/aae807a781807e95c761fe0a5babbc9bd5adaed6.tar.gz

改行せずに1行のコマンドです。(webブラウザ表示で勝手に改行されたり後ろが切れたりしますが。)

tar xvzf aae807a781807e95c761fe0a5babbc9bd5adaed6.tar.gz

ln -s /home/pi/linux-aae807a781807e95c761fe0a5babbc9bd5adaed6 ./linux

cd linux

sudo su

wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.9/patch-4.9.76-rt61.patch.gz

gunzip patch-4.9.76-rt61.patch.gz

cat patch-4.9.76-rt61.patch | patch -p1

沢山の文字がでます。これでパッチがあたりRTカーネルのソース一式ができました。

念のため、パッチ時にエラーメッセージが出ていないか確認した方が良いです。 エラーが出ているときは正しくパッチ当てができていない可能性があり、その後に進んでも結果はNGになります。 

 

 

RT-linuxのconfig設定

今、起動しているconfigを持ってきます。

modprobe configs

zcat /proc/config.gz > .config

make oldconfig

沢山の文字がでますが、下記の部分でプリエンプションを選択します。

Preemption Model
  1. No Forced Preemption (Server) (PREEMPT_NONE)
> 2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY)
  3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL)
  4. Preemptible Kernel (Basic RT) (PREEMPT_RTB) (NEW)
  5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL) (NEW)
choice[1-5]:

今回は 「5」のFully Preemtible Kernel を選択しました。 その他は、デフォルト値にしました。(エンターを押すだけ)

終わったら念のため menuconfigでプリエンプションの周波数を確認しておきましょう。 

make menuconfig  と打って、Kernel Future -> Timer Frequency をみます。

Rt005

タスク切り替えがこの周波数で強制的におきます。 あまり速くしすぎると実行効率が落ちてしまうので気をつけます。 タスクを切り替える時間がゼロではないからです。

 

 

RT-linuxのビルド

いよいよビルドです。

====== zImge =======

make -j6 zImage 2>&1 | tee make1.log

====== modules =======

make -j6 modules 2>&1 | tee make2.log

====== dtbs =======

make dtbs 2>&1 | tee make3.log

 

sshを切断すると、ビルドしているプロセスも落ちてしまいます。 ビルド中ずっとssh接続を維持するためにPCの電源を入れっぱなしが嫌な人は、nohup コマンドでバックグラウンド処理にすればOKです。

nohup make -j6 zImage modules dtbs 2>&1 | tee make.log &

あとは、じっくり待ちます。 ビルド時間はSDカードの速度に大きく影響されます。速いSDカードだと90分程度で終わります。 ごはんを食べてくるなり、別の仕事をするなりして時間をつぶしましょう。

 

 

RT-linux Kernelの導入と起動

ここでもハマりました。

まずは、モジュールのインストール

make modules_install

カーネルのインストール(念のため現在のカーネルをバックアップ)

mv /boot/kernel7.img /boot/kernel7-bakup.img

cp arch/arm/boot/zImage /boot/kernel7.img

デバイスツリーオーバーレイのインストール

cp arch/arm/boot/dts/overlays/*.dtbo /boot/overlays/

cp arch/arm/boot/dts/overlays/README /boot/overlays/

ここまでは従来通りですね。

RaspberryPiのSDカードの/bootフォルダには下記のデバイスツリーも入っています。

bcm2708-rpi-0-w.dtb
bcm2708-rpi-b.dtb
bcm2708-rpi-b-plus.dtb
bcm2708-rpi-cm.dtb
bcm2709-rpi-2-b.dtb
bcm2710-rpi-3-b.dtb
bcm2710-rpi-cm3.dtb

なんだろうなーーー とは思っていたのですが、特に気にしないことにしてました。

今回、これも新しくビルドしたものに差し替えないと起動しませんでした。下記のコマンドで転送します。(おそらくrpi-2 と rpi-3 のみでOKですが)

cp arch/arm/boot/dts/bcm27*.dtb /boot/

あとは再起動すればOK。

reboot 

再起動したら、確認してみます。

Rt006

こんな感じです。 4.9.76-rt61  と出てますね。 起動は成功です。

 

ただ、今回、moode audioで試したのですが、phpが動作不安定で、まともに動きません。 

というオチでした。

 

rtパッチはRaspberryPi専用に作られているモノではないため、どのバージョンでもRaspberryPiで問題なく動作するという訳ではありません。安定して動作するバージョンを探して導入するのがお約束です。

誰かが検証して大丈夫そうというバージョンを使うというのもアリですね。

Fully Preemptible Kernel (RT)  ではなく Preemptible Kernel (Basic RT) にするというのも1つの手段です。

 

ではでは、良き RT-Linux ライフを!

 

追記=========

この辺をみると良いかもしれません。安定して動くバージョンなど検証報告が上がっています。

https://github.com/raspberrypi/linux/issues/2244

 

 

にほんブログ村 PC家電ブログ PCオーディオへ にほんブログ村
ブログランキングに参加中です。 めざせ1位! 
もしよろしければ「ぽちっと」お願いします。 

« Moode Audio 4.0 正式版をスクリプト一発で導入 | トップページ | AACを最高の音質で聴くためのMPDコンパイル FDK-AAC-0.1.5 »

Raspberry Pi」カテゴリの記事

コメント

こんにちは。

RT-kernelはどのような環境でお使いになられるのですか。例えば、Moode Audioへの転用を考えられておられますか?

AYOR さん

RT-linuxの活躍の場はオーディオだけではないですね。 ここでの説明はあくまでもビルド方法についての備忘録です。

moodeのkernel入れ替えを試みられたのですね。
phpの不具合は、想定外でした。やはり、何かあるのでしょうか。

AYOR さん

phpによるwebアプリの挙動がおかしいのは、別の要因の可能性がありますね。 たくさんのアプリケーションをバックグラウンドで動かしていて、その応答を取得しているっぽいので、何かの応答待ちになっているのでは、と思います。

moodeで使うなら別のバージョンでビルドするのが良いでしょうね。 phpをデバッグして問題解決するのは骨が折れるでしょうから。

たかじんさん、

 話題が飛びますが、tinker boardの新型 tinker board Sを手に入れました。Sでは、スレーブになれるようです。以前のマスターモードのドライバが使えるかもしれません。電源にクセがありそうですが。

AYOR さん

素早いですね。 Sは、まだ情報が少ないので様子見してます。

情報ありがとうございます。
色々なcommit番号が反映されたカーネルをダウンロードしてビルドし楽しめるようになりました。

takobozu さん

よかったです。 色々遊んでみてください。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/587107/66377477

この記事へのトラックバック一覧です: RaspberryPiに最新のRT-Linuxを入れる方法:

« Moode Audio 4.0 正式版をスクリプト一発で導入 | トップページ | AACを最高の音質で聴くためのMPDコンパイル FDK-AAC-0.1.5 »

サイト内検索

Sponsors link

2018年4月
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          

最近のトラックバック

無料ブログはココログ