Select Your Language

免責事項

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

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

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

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

« 秋の夜長の Raspberry Pi 3 カーネル・セルフ・ビルド | トップページ | 一番やってはいけない? スピーカー工作で安易な方法をとってしまいました »

2016年9月25日 (日)

秋の夜長は Raspberry Pi 3 で RT-Linux ビルドに挑戦

先日は、RaspberryPi 3でKernel のセルフビルドする方法を紹介いたしました。 

その続きで、本日は同様にセルフビルドで「 RT-Linux 」、 つまり、Real-Time Kernelを作る方法をご紹介いたします。 

本格的に開発するならクロスコンパイルの方が時間的な効率もよいです。 しかし、セルフビルドだとLinuxマシンを別途用意しなくても済むというメリットがあります。 お遊び程度ならセルフもありではないでしょうか。 

Fullrt 

<<図-1 RT patch をあてたときのconfig画面>>

 

※) ここではリアルタイム性の評価は一切行なっていません。 

機械制御など、本当にリアルタイム性が欲しいときは、ちゃんと評価してからご使用ください。 リアルタイム性を保証する記事でもございません。 

 

下の画面は、RT patchをあてる前のconfig画面です。 

Kernel Features  --->
    Preemption Model (Voluntary Kernel Preemption (Desktop))  --->

で該当する項目が表示できます。

Preemtible  

<<図-2 通常のconfig画面>>

RT patchがあたると、2項目ほど増えているのが分かると思います。(図-1) 

Kernelソース一式の取得方法などは、先日の記事をご覧下さい。 ここでは、既にビルドできる環境とソース一式がある状態から始めます。 

ベースは、Moode Audio R2.7 です。 

 

 

RT patch をあてる

Kernelソースと同じバージョンのRT patchを探して持ってきます。 

最新版はこちら

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

少し古いものはolderから探します。

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

 

以下は、4.4.19で進めます。 違うバージョンのときは適時読み替えてください。 

持ってくるのは patch-4.4.19-rt27.patch.gz というものです。 

patches-4.4.19-rt27.tar.gzではありません。 同じサイトにあるので間違えないようにします。 

スーパーユーザになってから作業します。 

sudo su

cd linux

wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/older/patch-4.4.19-rt27.patch.gz

gunzip patch-4.4.19-rt27.patch.gz

cat patch-4.4.19-rt27.patch | patch -p1

沢山の文字がでますが、これで、リアルタイムパッチがあたりました。 

 

 

Kernelの設定

現在のconfig設定を元に、RT patch版のKernel 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 を選択しました。 
その他の問い合わせにはデフォルトで答えます(エンターだけを押す) 

以上でoldconfigは完了です。 

 

No Force Preemption (Server)
  CPUの横取りをしない。

Voluntary Kernel Preemption (Desktop)
  特定ポイントだけCPUの横取りを可能にする。

Preemptible Kernel (Low-Latency Desktop)
  すべての処理でCPUの横取りを可能にする。

Preemptible Kernel (Basic RT)
  RTカーネル(基本)

Fully Preemptible Kernel (RT)
  RTカーネル(完全)

 

私もあまり詳しくはないのですが、Low-LatencyとBasic RTは似ているようにみえても、RTpatch版はタスク切換えが速くなっているらしいです。 Fully Preemtible Kernel で問題が起こる場合は Basic RT を使ってみるというくらいに考えてます。 

 

 

次に、プリエンプションの周波数を指定します。 この設定は実動作に関わるので重要です。 

make menuconfig 

とコマンドを打って開いたメニューから 

Kernel Features  --->
    Timer frequency (100 Hz)  --->

Frequency  

プリエンプションの周波数は、高ければそれだけタスク切換え(Task dispatch)が頻繁に行なわれるようになります。 その分、オーバーヘッドがかさんできますので無駄にCPU負荷が増えますし、各タスク(プログラム)の実行速度が落ちます。 タスク・ディスパッチ時間がゼロではないことを考えると当たり前ですね。 

なので、1000Hz設定は特殊な事情がなければやり過ぎです。 

必要な応答速度と実用性を考慮して、100(10ms)~500(2ms)くらいがよい選択肢だと思います。

ここでは、実験的な意味もあるので、とりあえず 500Hzを選択してみます。

 

 

 

ここから先は、先日のビルドと同じ方法です。

カーネルビルド

 

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

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

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

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

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

time make dtbs 2>&1 | tee make3.log

全部で2時間程度かかります。  高速なSDカードなら90分くらいで完了するらしいです。 

終わるまで待てない場合は

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

として、sshを切ってもビルドを継続させると良いです。

 

 

インストールと起動

ビルドしたカーネルをインストールして起動してみます。 

モジュールのインストール

make modules_install

 

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

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

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

 

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

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

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

 

再起動します

reboot

 

再起動後、カーネルを確かめてみましょう。 

pi@moode:~ $ uname -a

Linux moode 4.4.19-rt27-v7+ #1 SMP PREEMPT RT Sat Sep 24 08:50:48 EDT 2016 armv7l GNU/Linux

pi@moode:~ $ cat /proc/version

Linux version 4.4.19-rt27-v7+ (root@moode) (gcc version 4.9.2 (Raspbian 4.9.2-10) ) #1 SMP PREEMPT RT Sat Sep 24 08:50:48 EDT 2016

 

rt27と出ていますね。 無事にRT-Linuxが起動しているようです。 

 

 

SabreBerry32用のドライバを入れて音楽を聴いてみる

とりあえず、Moode R2.7用でRT-Linux版のドライバを用意いたしました。

 

wget http://nw-electric.way-nifty.com/blog/files/moode27_RT-linux.zip

unzip -d sabreberry32 moode27_RT-linux.zip

ドライバのインストール

cd sabreberry32

sudo chmod +x sabre32_install.sh

sudo ./sabre32_install.sh

 
すでにSabreBerry32ドライバを入れている場合は、「sudo ./sabre32_install.sh」 せずに、

sudo cp sabre9018q2c.ko /lib/modules/4.4.19-rt27-v7+/kernel/sound/soc/codecs/sabre9018q2c.ko

sudo cp sabreberry32.ko /lib/modules/4.4.19-rt27-v7+/kernel/sound/soc/bcm/sabreberry32.ko

depmod -a

sudo cp sabreberry32.dtbo /boot/overlays/

 

とコマンドを打って組み込みます。 再起動したあと有効になります。 

 

まだ長い時間検証していないですが、ちゃんと音は出ているようです。

音質的にも少し変化があるように感じますが、リアルタイムカーネルがよいのかどうかは、ご自身の耳で確認されるのがよいと思います。 マスターモードI2SがないDACの場合の方が効果が大きくでるかもしれません。 

 

 

 

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



« 秋の夜長の Raspberry Pi 3 カーネル・セルフ・ビルド | トップページ | 一番やってはいけない? スピーカー工作で安易な方法をとってしまいました »

Raspberry Pi」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: 秋の夜長は Raspberry Pi 3 で RT-Linux ビルドに挑戦:

« 秋の夜長の Raspberry Pi 3 カーネル・セルフ・ビルド | トップページ | 一番やってはいけない? スピーカー工作で安易な方法をとってしまいました »

サイト内検索

Sponsors link

2017年6月
        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  

最近のトラックバック

無料ブログはココログ