Raspberry Pi3B用のOpenWrt Linux v19.07.3をクロスコンパイルして構築する手順を記載します。
以下は、OpenWrt公式サイトの「The Build System」 [https://openwrt.org/docs/guide-developer/build-system/start] の
・Build system – Setup Linux
・Build system – Usage
などを読み解き実施して記載しています。詳細は参照してみてください。
※ 単にラズパイ上でOpenWrt Linuxを動かしたい場合は、イメージファイル(.img.gz)がOpenWrtサイトに展開されているので、それをbalenaEtcherなどのアプリでSDカードに書き込めば良いだけです。
必要なパッケージをインストールする
ubuntuの場合、以下のパッケージをインストールします。
sudo apt-get update
sudo apt-get install -y subversion git g++ flex patch libncurses5-dev zlib1g-dev libssl-dev gawk xz-utils unzip libp11-kit-dev libmbedtls-dev
sudo apt-get install -y gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libmbedtls-dev libev-dev libudns-dev libsodium-dev
OpenWrt v19.07.3ソース一式をGitHubから取得する
cd ~/
git clone https://git.openwrt.org/openwrt/openwrt.git pi_OpenWrt
cd pi_OpenWrt
git fetch --tags
git tag -l
git checkout v19.07.3
最新のパッケージ定義をすべて取得してインストールする
luci等の最新パッケージ定義をすべて取得でき、menuconfigで選択可能になります。
1.「./scripts/feeds update -a」を実行して、feeds.conf/feeds.conf.default で定義されている最新のパッケージ定義をすべて取得します。
./scripts/feeds update -a
2.「./scripts/feeds install -a」を実行して、取得したすべてのパッケージのシンボリックリンクをpackage/feeds/ にインストールします。
./scripts/feeds install -a
「make menuconfig」を実行する
ツールチェーン、ターゲットシステム、およびファームウェアパッケージの好みの構成を選択します。
make menuconfig
-
Raspberry Pi3B用をビルドにするには、以下を選択する
Target System --> Broadcom BCM27xx Subtarget --> BCM2710 boards (64 bit) Target Profile --> Raspberry Pi 2B-1.2/3B/3B+/3CM または Subtarget --> BCM2709/BCM2710/BCM2711 boards (32 bit) Target Profile --> Raspberry Pi 2B/3B/3B+/3CM/4B
-
デフォルトのままビルドすると途轍もなく(6時間くらい)掛かるのでシェイプアップする
Target Images ---> [*] ext4 ---> [ ] squashfs [*] GZip images Firmware ---> <*> cypress-firmware-43430-sdio < > cypress-firmware-43455-sdio <*> cypress-nvram-43430-sdio-rpi-3b < > cypress-nvram-43430-sdio-rpi-zero-w < > cypress-nvram-43455-sdio-rpi-3b-plus < > cypress-nvram-43455-sdio-rpi-4b Network < > ppp Utilities <*> dmesg
-
Web管理画面はとても便利なので選択する
LuCI ---> 1. Collections ---> <*> luci 2. Modules ---> Translations ---> <*> Japanese (ja)
-
お好みでクロスコンパイラをgccに変更する
[*] Advanced configuration options (for developers) ---> [*] Toolchain Options ---> Binutils Version (Binutils 2.34) GCC compiler Version (gcc 10.x) C Library implementation (Use glibc)
※因みに生成されたクロスコンパイラの在り処は。
"\~/pi_OpenWrt/staging_dir/toolchain-aarch64_cortex-a53_gcc-10.1.0_glibc/bin/aarch64-openwrt-linux-gcc"
"\~/pi_OpenWrt/staging_dir/toolchain-aarch64_cortex-a53_gcc-10.1.0_glibc/bin/aarch64-openwrt-linux-g++" -
GoogleTest実行時に必要なlibstdc++.soを追加する
GoogleTestを使わない場合なくてもよい。Base system ---> <*> libstdcpp
「make」を実行する
ファームウェアをビルドします。 これにより、すべてのソースがダウンロードされ、クロスコンパイルツールチェーンが構築され、ターゲットシステム用にLinuxカーネルと選択されたすべてのアプリケーションがクロスコンパイルされます。
make または make V=s
エラー内容やビルドログを確認するには"make V=s"で実行します。
※ もし、エラー内容がPackege installerで重複的なエラーの場合、
"make clean"では、クリーンされない場合があるので最初からやり直した方が良いでしょう。(最初のgit clone openwrtからやり直す)
※ 理由:cleanは、/bin と /build_dirがクリーンされるだけなので、/staging_dir にエラー原因が残ったままですと、同じエラーが起きますよ。生成されたイメージファイルをSDカードに書き込む
ビルドが完了して、生成されたイメージファイルをbalenaEtcherなどのアプリでSDカードに書き込みます。
(balenaEtcherは、以下のファイルを単に選択して書き込みできます。極楽インタフェースです)
イメージファイルの在り処は。~/pi_OpenWrt/bin/targets/bcm27xx/bcm2710-glibc/openwrt-bcm27xx-bcm2710-rpi-3-ext4-factory.img.gz