OpenWrtのビルド

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