0

投稿日

NanoPi R5S カーネルのみの入れ替え

※R5S以外にもrockchip系のSoCを搭載したNanoPiはおそらく同じだと思います。

以前書いた記事NanoPi R5Sのカーネル調整のようにNanoPiのカーネルを調整したり、利用したいオプションを有効にしたい場合があります。カーネルを作るのは様々ツールが提供されているので、いくつかのパッケージをインストールすれば作れるのですが、カーネルのインストール方法が見当たりません。

カーネルは何処?

SBCでも起動方法によって異なるようですが、NanoPi R5Sの/bootにはカーネルがありません。インストールされていても起動しているカーネルとは異なるものがインストールされているだけですからパッケージを削除しても大丈夫です。

ではどこに?

lsblk
$ lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk2      179:0    0  14.6G  0 disk
├─mmcblk2p1  179:1    0     4M  0 part
├─mmcblk2p2  179:2    0     4M  0 part
├─mmcblk2p3  179:3    0     4M  0 part
├─mmcblk2p4  179:4    0    16M  0 part
├─mmcblk2p5  179:5    0    40M  0 part
├─mmcblk2p6  179:6    0    32M  0 part
├─mmcblk2p7  179:7    0    32M  0 part
└─mmcblk2p8  179:8    0  14.4G  0 part /
mmcblk2boot0 179:32   0     4M  1 disk
mmcblk2boot1 179:64   0     4M  1 disk
nvme0n1      259:0    0 119.2G  0 disk /home

lsblkで確認するとeMMCが沢山のパーティションに分割されています。
この中のmmcblk2p5にカーネルが入っています。sd-fuse_rk3568 でカーネルを作ると out/kernel-rk3568/kernel.img というファイルが生成され、そのまま格納されています。

eMMCへのインストールをおさらい

eMMCへインストールにはEFlasherというツールが提供されています。eMMC書き込みイメージについているあれです。FriendlyELECはこのツールについてもドキュメントを用意してくれています。
https://wiki.friendlyelec.com/wiki/index.php/EFlasher

ダウンロードしたイメージはSDカードから起動するといきなりeMMCへのインストールが始まるのでそういうものだと思っていましたが、バックアップなどいくつかの機能があるようです。どこに???

実は、オフィシャルイメージはautostartが有効にされていてインストールが自動で走ります。これを止めておくとメニューが開きます。インストール中にキャンセルしてもメニューに戻れます。(eMMCは破壊されてますが。。)
そして、このメニューにたどり着ければ overlayをキャンセルしてext4を直に使うことも出来ます。(この場合、mmcblk2p9は作られず、mmcblk2p8だけを利用する形になります)

このUIを見ると、rootfsは変更を加えずにkernelやu-bootだけを入れ替えたりできるのかな?と思うのですが、残念ながらそういう構造になはっていないようです。

つまるところ、eMMCへのインストールはファームウェアとしてセットになったものを初期状態として書き込むことになるのでカーネルだけを入れ替える手段は見当たりません。

格納場所がわかるならそこに書き込めば?

まず、注意事項です。カーネルを上書きした場合最悪起動しなくなりますから事前にバックアップ等を行ってください。
起動しなくなった場合にはSDカードで起動できるイメージを用意してデータを抜き出せば修復後データを復元できます。

$ mount /dev/mmcblk2p9 /mnt                データ領域をマウントして
$ sudo tar cvzf backup.tgz -C /mnt .       アーカイブに吸い上げ

必要なデータが抜き出せていることを確認したら eMMCにインストールして、吸い上げたデータを書き戻せばよいでしょう。

万全の準備をしたうえで、最悪再インストールして修復する覚悟の上で書き込んでみましょう。

dd if=kernel.img of=/dev/mmcblk2p5

うまくいけば、新しくビルドしたカーネルが起動してくれるはずです。

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
記事投稿キャンペーン開催中
ChatGPTなどの活用方法を発信しよう!
~
0