poweroff」等のコマンドを実行する必要がある。電源を抜くとSDカード上のファイルシステムが破損し、最悪起動できなくなる場合があるからだ。組込機器のように好きなタイミングで自由に電源を切りたい...という需要は当然ある。そこで、先人達の知恵に拝借すると...カーネルに「aufs」というファイルシステムを組み込む。「fsprotect」というソフトウェアを導入する。ことにより、SDカードに対するライトアクセスが抑止される...。言い換えればROM化が実現できるとのこと。ところで、ライトアクセス禁止でファイルの更新が出来なきゃOSがまともに動作しないんじゃね?...という疑問が湧くのは当然である。その答えは、リードオンリーであるSDカード上のファイルシステムに、RAMディスクをオーバーレイさせることによって、ファイルの更新はRAMディスクに記録される...何とも絶妙な仕組みである。今回は、ラズパイROM化のために、aufsを組み込んだカスタムカーネルのインストールに挑戦する。Building」について記載がある。このページを参考に、aufsを組み込んだカスタムカーネルをビルドする。カーネルのビルドには、ラズパイ上でビルドする「ローカルビルディング」と、別のLinux機でコンパイルする「クロスコンパイル」の2通りがあるが、ここでは、クロスコンパイルによるカーネルビルドの方法について紹介する。ツールチェーンのダウンロードこれからの作業はUbuntu等が動作しているラズパイとは別のLinux機での作業になる。このシリーズを順にセットアップを続けてきたなら、第10回にてツールチェーンをUbuntuが動作しているLinux機にインストール済ではあるが再掲。カーネルのソースソースの入手は次のとおり。Makefile先頭3行はカーネルのバージョン。この場合は、4.4.14。これからaufsを組み込んだカスタムバージョンをビルドする。後で違いを判別できるように「EXTRAVERSION」編集し、「-aufs」を加えた。aufsの導入gitから「aufs-standalone」を入手する。https://github.com/sfjro/aufs4-standalone.gitaufs-standaloneのブランチを確認する。origin/masterremotes/origin/aufs4.0remotes/origin/aufs4.1remotes/origin/aufs4.1.13+remotes/origin/aufs4.2remotes/origin/aufs4.3remotes/origin/aufs4.4remotes/origin/aufs4.5remotes/origin/aufs4.6remotes/origin/aufs4.x-rcNremotes/origin/masterカーネルのバージョン4.4.14に近い、aufs4.4をチェックアウトする。remotes/origin/aufs4.4aufs4.4のREADMEを参考に、カーネルのソースにパッチを当てる。「.config」ファイルの作成(失敗)4と5は、カーネルビルドに失敗するので、読むだけに留めて実行しないこと。環境変数「KERNEL」を定義する。カーネルビルドの設定ファイル「.config」をデフォルト設定で生成する。Pi1とPi2&3ではコマンドが異なるので注意Pi1用。bcmrpi_defconfigPi2&3用はこちら。bcm2709_defconfig「.config」にaufs関連の編集を加える。その為のユーティリティ「menuconfig」を起動する。filesystems」の順に辿って「Aufs」を見つけたら、スペースキーを押して*マークを付ける。<Save>を選択して「.Config」に設定を保存する。あとは、<Exit>を何度か選択してmenuconfigを終了する。カーネルのビルド(失敗)4と5は、カーネルビルドに失敗するので、読むだけに留めて実行しないこと。次のコマンドでカーネルをビルドする....。次から次へと質問攻めにあう。何かおかしいのでCTRL+Cで強制終了する。dtbsおそらくは、menuconfigで変更を加えた「.config」に不具合があるのだろう。失敗版「.config」の、aufsに関係する部分をgrepで抜き出した。これが後に成功に導く。set6.「.config」ファイルの作成(成功)試行錯誤の上、うまくいく方法を見つけたので紹介する。環境変数「KERNEL」を定義する。カーネルビルドの設定ファイル「.config」をデフォルト設定で生成する。Pi1とPi2&3ではコマンドが異なるので注意Pi1用。bcmrpi_defconfigPi2&3はこちら。bcm2709_defconfigmenuconfigを使うと失敗するのは学習済み。手動で「.config」を編集し、最後尾に次の内容を加える。これは、5でmenuconfigが生成した内容そのもの。menuconfigが生成したaufsに関する部分のみを流用し、デフォルトの「.config」に付け加える作戦。カーネルのビルド(成功)次のコマンドでビルドする。正しい「.config」のおかけで今度はビルドに成功する。カスタムカーネルのインストールRaspbianがインストールされているラズパイのSDカードを、カードリーダーを用いてUbuntuに接続する。インストールされているカーネルを、今回ビルドしたカスタムカーネルに更新する。UbuntuにマウントしたSDカードの名称を次のコマンドで調べる。rom「sdb」がRaspbianがインストールされているSDカードである。2つのパーティションがある。「sdb1」は「/boot」にマウントされる、「fat32」フォーマットのファイルシステムである。「sdb2」は「/」にマウントされる「ext4」フォーマットのファイルシステムである。NOOBSによりRaspbianをインストールした場合、更に多くのパーティションが見つかるらしい。SDカードをマウントするディレクトリを作成してマウントする。mnt/ext4モジュールをインストールする。blobsをインストールする。mnt/fat32/overlays/SDカードをアンマウントする。カスタムカーネルでラズパイ起動カスタムカーネルをインストールしたSDカードをラズパイに挿入し、いざ起動!!起動後、カーネルのバージョンを表示すると...カーネルのバージョンに「-aufs」が追加されている。確かにカスタムカーネルが動いているのが確認できた。GNU/Linux以上、カーネルへのaufsの組込が完了した。カーネルをアップデートするコマンド「rpi-update」を実行すると、せっかくのカスタムカーネルがデフォルトのカーネルで上書きされてしまう。カスタムカーネルのバージョンアップは、面倒でもソースからビルドする必要がある。次回は「fsprotect」を導入する。コメントをキャンセルメールアドレスが公開されることはありません。上に表示された文字を入力してください。コメントデータの処理方法の詳細はこちらをご覧ください。画像ファイルサイズを変更。Automatorでクイックアクション化。ファイル名をハッシュ値でリネーム。Automatorでクイックアクション化。DockerでHTTPS-PORTAL使うとHTTPSサイトの構築が超絶簡単DockerでWordPress+MySQL+phpMyAdmin+WSGIのプラクティスBB-8のプラモデルを作りました。プラモデル作りを再開。BottleでWebSocketを試す。fastenersで排他ロックを試す。Blue-black.ink。