NanoPi/NanoPC用カーネルコンパイル環境をWindows 10 PCで構築してみました

シングルボードコンピュータのメーカの1つ。FRIENDLY ELECさん。

NanoPCシリーズ、NanoPiシリーズを度々購入して楽しませて頂いております。

NanoPC-T6でAndroid 12を起動してみました 実用性は過去最強
Nano-PC T6のeMMCに、Android 12をインストールしてみました。 Androidのインストールはすごく簡単。メニュー...
NanoPi M4V2にシリアルコンソールを接続するには
ずばり。 2つのUSB端子の間、UART端子に接続します。 NanoPi M4V2 3V、1500000bps...

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にてアクセスできるようです。

Raspberry PiのデスクトップにWebブラウザからアクセス noVNC
このような感じで、PCのWebブラウザからRaspberry Piのデスクトップにアクセスしてみました。 図ではデスクトップの解像度は...

vncクライアントは不要で、Webブラウザからvncの画面にアクセスできる仕組みのようです。

次のURLへアクセスしました。

http://localhost:6080/

こちらはvnc用のパスワードになります。前述のスクリプトではpasswordになります。

画面サイズは、コンテナ起動時に指定した1280×720になっています。

ログインユーザは、ubuntu / ubuntuになります。

以上でカーネルのコンパイル環境を構築し、ubuntuユーザにてアクセスできるようになりました。


workディレクトリが永続化された作業領域(重要

カーネルコンパイルということで、そこそこのストレージ容量(20GBほど)が必要になります。

ルートファイルシステムは250GB確保されています。

workという永続化ボリュームが作成されています。

つまり。

次のディレクトリに移動して

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シリーズをお持ちでしたら、カーネルのコンパイルに挑戦してみるのはいかがでしょうか。

スポンサーリンク

フォローする

スポンサーリンク