シングルボードコンピュータのメーカの1つ。FRIENDLY ELECさん。
NanoPCシリーズ、NanoPiシリーズを度々購入して楽しませて頂いております。
NanoPC、NanoPiシリーズ共通のカーネルコンパイル環境を、Windows 10 PCで構築してみました。
手順を記録させて頂こうと思います。
目次
NanoPC・NanoPiカーネルのクロスコンパイル環境構築手順
FRIENDLY ELECさんのシングルボードコンピュータは、本体でカーネルのコンパイルは行えず。クロスコンパイル環境で行う必要があるようです。
具体的には、x86_64アーキテクチャPCのUbuntu 20.04 LTS(Focal Fossa)が必要になります。
カーネルコンパイル用に、PCを1台用意して、少し古めのUbuntu 20.04を用意して・・・ゼロから環境を作る場合はハードルが高めですが。
幸い、dockerイメージを提供頂いておりますので、手元のWindows 10環境で起動してみたいと思います。
コンテナ実行・Git環境構築
最初、podmanで起動を挑戦しましたがダメでした。その後、dockerでは起動できました。
今回はコンテナ実行環境としてdockerを使用させて頂きます。
dockerとgitをインストールするためのwingetのインストール
最新版のDocker Desktopを簡単にインストールするために、まずはMicrosoft Storeにてwingetの表の名称「アプリインストーラー」をインストールしました。
Docker Desktopのインストール
コマンドプロンプトを起動し、wingetでdockerをサーチしました。
次のコマンドで、Docker Desktopをインストールしました。
winget install Docker.Desktop
なぜ、わざわざwingetを使用してDocker Desktopをインストールするのかと申しますと。
Webブラウザの画面キャプチャが面倒だかr
Webブラウザなしで、最新版のパッケージをインストールできるところが利点でしょうか。
とはいえwinget必須ではありませんため、各自、お好みの手順で、最新版のDocker Desktopをインストール頂ければと思います。
Docker Desktop起動
Docker Desktopのインストールが完了しましたら、起動してdockerコマンドが使用できる状態にします。
Docker Engineが起動してdockerコマンドが使用できる状態になりましたら、コンテナ実行環境の準備は完了です。
Gitのインストール
wingetでgitをインストールしました。
winget install git.git
コマンドラインですが、Webブラウザでダウンロードして・・・という手間がない分、wingetによるインストールの効率は良いように思えます。
NanoPi/NanoPCカーネルコンパイル環境構築
ここからが環境構築の手順になります。
gitの改行コード設定の調整(重要
Dockerfileをダウンロードしてコンテナイメージをビルドしますが。LinuxとWindowsの改行コードの違いから、既定のgitの設定では、ビルドしたイメージの実行に失敗してエラーが表示されます。(ビルドはエラーなくできるので厄介
git config --global core.autocrlf input
その改行コードの問題を回避するため、gitのグローバル設定を変更しておきます。
カーネルクロスコンパイルdocker環境のダウンロード
こちらがFriendly Armさんのクロスコンパイル環境の公式ページになります。
基本的にこちらに記載の手順で進めますが、Windows 10で動かしたいということで、パラメータを少し変えておりますのでご注意下さい。
ビルド環境をクローンしました。
git clone https://github.com/friendlyarm/docker-ubuntu-lxde-novnc
コンテナのビルド
dockerコマンドでコンテナイメージをビルドします。
cd docker-ubuntu-lxde-novnc
docker build --no-cache -t docker-ubuntu-lxde-novnc .
クロスコンパイル用コンテナへのアクセス
コンテナ起動
こちらのコマンドを実行して、コンテナを起動しました。デーモン化オプションは付けていないため、起動後はコンテナのログが表示されます。
docker run --rm --privileged ^
--name docker-ubuntu-lxde-novnc ^
-p 6080:80 -p 5900:5900 ^
-e HTTP_PASSWORD=password ^
-e VNC_PASSWORD=password ^
-e PUID=1000 -e PGID=1000 ^
-e USER=ubuntu -e PASSWORD=ubuntu ^
-v ./work:/home/ubuntu/work ^
-e RESOLUTION=1280x720 ^
docker-ubuntu-lxde-novnc:latest
novncにてアクセス
イメージの名称にありますが、クロスコンパイル用のコンテンは、novncにてアクセスできるようです。
vncクライアントは不要で、Webブラウザからvncの画面にアクセスできる仕組みのようです。
次のURLへアクセスしました。
http://localhost:6080/
こちらはvnc用のパスワードになります。前述のスクリプトではpasswordになります。
画面サイズは、コンテナ起動時に指定した1280×720になっています。
ログインユーザは、ubuntu / ubuntuになります。
以上でカーネルのコンパイル環境を構築し、ubuntuユーザにてアクセスできるようになりました。
workディレクトリが永続化された作業領域(重要
カーネルコンパイルということで、そこそこのストレージ容量(20GBほど)が必要になります。
ルートファイルシステムは250GB確保されています。
つまり。
cd /home/ubuntu/work
こちらにファイルを格納すれば、データが永続化されるため、コンテナを終了・削除してもデータが残ります。
work以外のディレクトリに置いたファイルは、コンテナを消すと消えてしまうので注意が必要です。
タイムゾーン設定
timedatctlが動かないため、手動でシンボリックリンクを作りました。
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinto/Asia/Tokyo /etc/localtime
ビルドに必要なパッケージのインストール
menuconfigを使用する場合。
sudo apt install libncurses-dev
カーネルソースの取得・コンパイル
カーネルのソースは、使用するシングルボードコンピュータのWikiページを見て確認する感じかと思います。
今回、NanoPi M4V2のカーネルをコンパイルしたいと思います。
使用するディストリビューションは、debian-bullseye-desktop-arm64を選択しました。
この場合、該当するカーネルは、linux-v4.19.yになり、ビルドの手順はこのような感じになります。
手順通り、gitコマンドにてブランチnanopi4-4.19.yのソースをクローン。makeコマンドで設定・コンパイルを進める感じでしょうか。
上記のwikiページは、コンパイル環境のnovncにてWebブラウザを起動して、そちらからアクセスしたほうが良さそうです。
無事にモジュールディレクトリと、カーネルイメージ、リソースイメージがビルドできました。
ビルドしたカーネルのインストール
シングルボードコンピュータへの転送は、sftpコマンドで行なえます。
前述の機種ごとのWikiの内容に従い、ddコマンドでkernel.imgとresource.imgへの書き込みと、/lib/modulesへモジュールをコピーして再起動しました。
このような感じで、コンパイルしたカーネルでNanoPiが無事起動しました。
Tinker Board 2ではEPGStationが起動しなかったため、今度はNanoPi M4V2で挑戦してみます。USBチューナーが使用できるようになったはずです。
こちらのビルド環境は、Friendly ELECさんの多くの機種のシングルボードコンピュータに対応しているようです。
私の手元には、NanoPi neo4、NanoPi M4V2、NanoPC T6を所有しています。少し古めのNanoPiシリーズは、USBチューナを取り付けて遊びたいという動機があります。
一方、最新のNanoPC T6は最新版のカーネルに対応しており、こちらの環境でコンパイルが可能になりました。新しいファイルシステム等、新しい技術を試す目的にも使用できそうです。
もしもNanoPi/NanoPCシリーズをお持ちでしたら、カーネルのコンパイルに挑戦してみるのはいかがでしょうか。