はじめに
デフォルトのTinker Board 2 用Tinker OSはnftableのmasqueradeとnatに対応していない。
使えるようになるにはkernelの再コンパイルが必要となる。今回、コンパイル&稼働することができたので、公開する。
必要なもの:
- debian9
- ソース(https://github.com/TinkerBoard2/kernel)
- クロスコンパイラ(http://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz)
手順:
1. コンパイル環境の準備(OS)
debian9なのはgccのデフォルトがver6だからである。LinuxKernelはgcc10とかには対応していないので、debian9を用意しよう。個人的はdockerがおすすめ。
そしてaptコマンドでコンパイルに必要なアプリをどんどんインストールしよう。
2. Kernelソースの取得
TinkerBoard2のLinuxKernelソースをgithubから取得しよう。gitコマンドでも良いけど、
githubからのzipダウンロードもおすすめ。
3. クロスコンパイラのダウンロード
TinkerBoard2のフォーラムによると、linaroのクロスコンパイラを使うらしい。
おとなしくダウンロードして解凍しよう。
$ tar -Jxvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
4.コマンドを実行する。
# Kernelのオプションをtinker2固有の設定にしてくれる。
$ make ARCH=arm64 CROSS_COMPILE=/root/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- tinker2_defconfig
# ユーザーが設定する部分。
# CONFIG_NFT_MASQやCONFIG_NFT_CHAIN_ROUTE_IPV4を有効にしよう。
$ make ARCH=arm64 CROSS_COMPILE=/root/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- menuconfig
# Kernelのコンパイル
$ make ARCH=arm64 CROSS_COMPILE=/root/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- -j4 rk3399-tinker_board_2.img
※コンパイルのとき、コンパイルに必要なアプリがなく。エラーになるかもしれない。エラーを読んで必要なファイルをどんどんインストールしよう。
※うまくコンパイルができていれば、「boot.img」が作られる。
5.カーネルをSDカードへ書き込む。
「boot.img」をSDカードのパーティーション4番目に直接書き込む。
$ sudo dd if=boot.img of=/dev/mmcblk0p4
※TinkerBoard2が稼働中でも書き込み可能
6. TinkerBoard2をリブートする。
dmegや、zcat /proc/config.gz
などで想定通り設定(コンパイル)されていることを確認してみてください。
備考:
※ TinkerBoard2をルーター化してみたかった。なお、TinkerBoard2のルーター化は成功しました。
※ ここに書いてある内容を参考にした。
https://tinker-board.asus.com/forum/index.php?/topic/14991-kernel-build-error-wlan-wireless-and-net-modules/