Build Openwrt 18.06 on Arch Linux

2022-09-12

Openwrtの21.02でも4MB以内のイメージは作成できたが、4/32MBデバイスのサポートは、19.07が最後となっているため、18.06-SNAPSHOTでコンパイル。
https://openwrt.org/supported_devices/432_warning
https://openwrt.org/supported_devices/openwrt_on_432_devices

Arch Linuxを2020年4月1日バージョンまでダウングレードすると、gccが9.3.0になるのでそのままコンパイルできる。
python2などの必要なパッケージを追加する。
pacman -S python2 unzip rsync

git clone https://git.openwrt.org/openwrt/openwrt.git openwrt-18
cd openwrt-18
git pull
git tag
git checkout v18.06.9
./scripts/feeds update -a
./scripts/feeds install -a
./scripts/feedsを忘れてもコンパイルできるが、LuCIなどのパッケージが欠損した不完全なイメージができる。

IO DATA WN-G300DGR用にdtsを追加し、その他を編集する。
./target/linux/ramips/dts/WN-G300DGR.dts
./target/linux/ramips/image/rt305x.mk
./target/linux/ramips/base-files/etc/diag.sh
./target/linux/ramips/base-files/etc/board.d/01_leds
./target/linux/ramips/base-files/etc/board.d/02_network
./target/linux/ramips/base-files/lib/ramips.sh
./target/linux/ramips/base-files/lib/upgrade/platform.sh

初期設定を編集する。
./package/kernel/mac80211/files/lib/wifi/mac80211.sh
; wireless encryption, sae is not supported until 19.07
./package/base-files/files/bin/config_generate

git diffで編集結果を確認する。
touch ./target/linux/ramips/image/*
make menuconfig

Global build settings, Enable IPv6 off
Base system, opkg off
Language, Lua, libiwinfo-lua on
LuCI, Modules, luci-mod-admin-full on
LuCI, Applications, luci-app-firewall on
LuCI, Themes, luci-theme-bootstrap on
Network, Firewall, iptables on
Network, Web Servers/Proxies, uhttpd on uhttpd-mod-ubus on
Network, ppp off, odhcpd off

下記を参考にfirmwareをコンパクトにするが、カーネルプリントを削除すると、150kほど減量できるが、LuCIのKernel.logが表示されないので、timestampのみ削除した。
https://openwrt.org/docs/guide-user/additional-software/saving_space

Target Images / squashfs / Block size, 1024
Global build settings / Kernel build options / Enable support for printk, on
Global build settings / Kernel build options / Crash logging, off
Global build settings / Kernel build options / Support for paging of anonymous memory (swap), off
Global build settings / Kernel build options / Compile the kernel with symbol table information, off
Global build settings / Kernel build options / Compile the kernel with debug information, off
Global build settings / Kernel build options / Enable process core dump support, off
Global build settings / Kernel build options / Compile the kernel with SysRq support, off
Global build settings / Kernel build options / Enable printk timestamps, off
Global build settings / Strip unnecessary exports from the kernel image, on
Global build settings / Strip unnecessary functions from libraries, on
Kernel modules / Wireless Drivers / kmod-mac80211 / Export mac80211 internals in DebugFS, off
Kernel modules / Wireless Drivers / kmod-mac80211 / Enable 802.11s mesh support, off

make download
make -j5
openwrt-ramips-rt305x-wn-g300dgr-initramfs-kernel.bin(3.2M)は、コンソールからTFTPで送り込む際に使用する。
openwrt-ramips-rt305x-wn-g300dgr-squashfs-sysupgrade.binは、WebUIからのsysupgradeに使用する。
cat /proc/mtd
mtd0: 00030000 00010000 “u-boot"
mtd1: 00010000 00010000 “u-boot-env"
mtd2: 00010000 00010000 “factory"
mtd3: 003b0000 00010000 “firmware"
mtd4: 0011b8b1 00010000 “kernel"
mtd5: 0029474f 00010000 “rootfs"
mtd6: 00070000 00010000 “rootfs_data"

LuCI接続もssh接続もLAN側からのみだが、Firewall, Traffic RulesでWAN側ポート(22, 80)を開けばWAN側からも接続できる。
/etc/config/networkを編集して不要なswitch(rt305x)を削除する。
base-filesのディレクトリにファイルを入れるとそのままROMに残る。
versionは、./include/version.mkに記載されている。
filesディレクトリを作成して、その下にファイルをおけば、ルーターのfirmwareにファイルを追加できる。

ルーター機能を使用せずにアクセスポイントとして利用したほうが高速であった。
元々IEEE802.11n(規格値300Mbps、実測値114Mbps)のルーターなので速度は期待できないが、Wifiルーターとしてハブとなり、Wifiクライアント機能でWifiポケット経由でインターネットに接続できるルーターができた。

dtsファイルを少し編集すれば、ほぼ同様の手順で、17.01.7のイメージも作成できる。
opkgを含めても、2.8M程度のイメージに納まる。
Global build settings, Enable IPv6 on
Base system, opkg on
Network, odhcpd on
Network, ppp on, ppp-mod-pppoe on
ds-liteを使うこともできたが、IP masqueradeがうまく行かなかったので中断。