0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenWrt Banana Pi BPI-R4

Last updated at Posted at 2025-06-29

:flag_jp: Japanese notation

OpenWrt_icon.png

はじめに

おススメ管理インターフェース

検証環境

  • Windows11 バージョン24H2

トピック

Wi-Fi 7

OpenWrt搭載Wi-Fi7デバイス比較

Wi-Fi7デバイス
  • SinoVoip Banana Pi BPI-R4
    価格: 4~6万円程度
    用途: オープンソースルーター開発向け
    CPU: MediaTek MT7988A (Filogic 880)
    メモリ: 4GB or 8GB DDR4
    ストレージ: MicroSD(TF) card or 8GB eMMC
    WAN: 1G ×1
    LAN: 1G ×3
    SFP: 10G ×2
    USB: USB 3.2 Type-A
    OS: OpenWrt

  • Linksys Velop WRT Pro 7
    価格: 5万5千~6万円程度
    用途: ホーム&ビジネス向け
    CPU: Qualcomm IPQ9554
    メモリ: 1GB DDR4
    ストレージ: 8GB eMMC
    WAN: 2.5G ×1
    LAN: 1G ×4
    OS: QSDK 19.07/カーネル 5.4.213(公式OpenWrtインストール不可)
    MLO: サポート

  • GL.iNet Flint 3 GL-BE9300
    https://www.gl-inet.com/campaign/gl-be9300-jp/
    価格: 1万5千~3万円程度
    用途: 家庭や小規模オフィス向け
    CPU: Qualcomm IPQ9554?
    メモリ: 1GB DDR4
    ストレージ: 8GB eMMC
    WAN: 2.5G ×1
    WAN/LAN: 2.5G ×1
    LAN: 2.5G ×4
    USB: USB 3.0 Type-A
    OS: QSDK 23.05/カーネル 5.4.213 (公式OpenWrtインストール可?)
    MLO: サポート

wiki-qsdk


OpenWrt

OpenWrt Project へようこそ

320.logo.png

仕様
The UCI system
LuCI web interface

デバイス

インストール

ファームウェア

MTK-SDK
ファームウェアセレクター

リリースビルド

base-files ca-bundle dnsmasq dropbear firewall4 fitblk fstools kmod-crypto-hw-safexcel kmod-gpio-button-hotplug kmod-leds-gpio kmod-nft-offload kmod-phy-aquantia libc libgcc libustream-mbedtls logd mtd netifd nftables odhcp6c odhcpd-ipv6only opkg ppp ppp-mod-pppoe procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd wpad-basic-mbedtls kmod-hwmon-pwmfan kmod-i2c-mux-pca954x kmod-eeprom-at24 kmod-mt7996-firmware kmod-mt7996-233-firmware kmod-rtc-pcf8563 kmod-sfp kmod-usb3 e2fsprogs f2fsck mkf2fs mt7988-wo-firmware luci ttyd luci-app-ttyd openssh-sftp-server i2c-tools ethtool-full kmod-mtk-t7xx modemmanager-rpcd luci-proto-modemmanager pciutils mbim-utils ubus

"snapshot" ビルド

apk-mbedtls base-files ca-bundle dnsmasq dropbear firewall4 fitblk fstools kmod-crypto-hw-safexcel kmod-gpio-button-hotplug kmod-leds-gpio kmod-nft-offload kmod-phy-aquantia libc libgcc libustream-mbedtls logd mtd netifd nftables odhcp6c odhcpd-ipv6only ppp ppp-mod-pppoe procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd wpad-basic-mbedtls kmod-hwmon-pwmfan kmod-i2c-mux-pca954x kmod-eeprom-at24 kmod-mt7996-firmware kmod-mt7996-233-firmware kmod-rtc-pcf8563 kmod-sfp kmod-usb3 e2fsprogs f2fsck mkf2fs mt7988-wo-firmware luci ttyd luci-app-ttyd openssh-sftp-server i2c-tools ethtool-full kmod-mtk-t7xx modemmanager-rpcd luci-proto-modemmanager pciutils mbim-utils ubus

初回起動時に実行されるスクリプト (uci-defaults)
※右下設定アイコンクリック

# Beware! This script will be in /rom/etc/uci-defaults/ as part of the image.
# Uncomment lines to apply:
#
# Wi-Fi有効化
wlan_name="OpenWrt"
wlan_password="12345678"
#
# root_password=""
# lan_ip_address="192.168.1.1"
#
# pppoe_username=""
# pppoe_password=""

# log potential errors
exec >/tmp/setup.log 2>&1

if [ -n "$root_password" ]; then
  (echo "$root_password"; sleep 1; echo "$root_password") | passwd > /dev/null
fi

# Configure LAN
# More options: https://openwrt.org/docs/guide-user/base-system/basic-networking
if [ -n "$lan_ip_address" ]; then
  uci set network.lan.ipaddr="$lan_ip_address"
  uci commit network
fi

# Configure WLAN
# More options: https://openwrt.org/docs/guide-user/network/wifi/basic#wi-fi_interfaces
if [ -n "$wlan_name" -a -n "$wlan_password" -a ${#wlan_password} -ge 8 ]; then
  uci set wireless.@wifi-device[0].disabled='0'
  uci set wireless.@wifi-iface[0].disabled='0'
  uci set wireless.@wifi-iface[0].encryption='psk2'
  uci set wireless.@wifi-iface[0].ssid="$wlan_name"
  uci set wireless.@wifi-iface[0].key="$wlan_password"
  # Enable background radar
  uci set wireless.default_radio1.background_radar=1
  uci set wireless.default_radio2.background_radar=1
  uci commit wireless
fi

# Configure PPPoE
# More options: https://openwrt.org/docs/guide-user/network/wan/wan_interface_protocols#protocol_pppoe_ppp_over_ethernet
if [ -n "$pppoe_username" -a "$pppoe_password" ]; then
  uci set network.wan.proto=pppoe
  uci set network.wan.username="$pppoe_username"
  uci set network.wan.password="$pppoe_password"
  uci commit network
fi

echo "All done!"

SDカード初期化
diskpart

list disk

select disk *

# clean all (時間掛かる)
clean

SD カードイメージ書き込み

Wi-Fi 7

パフォーマンス向上

BPI-R4-MT76-OPENWRT-V21.02


wget -O /tmp/mt7996_eeprom_233_2i5i6i.bin 'https://github.com/openwrt/mt76/raw/refs/heads/master/firmware/mt7996/mt7996_eeprom_233_2i5i6i.bin'
FW_DIR="/lib/firmware/mediatek/mt7996"
if [ -f "$FW_DIR/mt7996_eeprom_233_2i5i6i.bin" ]; then
  mv "$FW_DIR/mt7996_eeprom_233_2i5i6i.bin" "$FW_DIR/mt7996_eeprom_233_2i5i6i.bin.bak"
fi
mv /tmp/mt7996_eeprom_233_2i5i6i.bin "$FW_DIR/"

wget -O /tmp/mt7996_eeprom_233.bin 'https://github.com/openwrt/mt76/raw/refs/heads/master/firmware/mt7996/mt7996_eeprom_233.bin'
FW_DIR="/lib/firmware/mediatek/mt7996"
if [ -f "$FW_DIR/mt7996_eeprom_233.bin" ]; then
  mv "$FW_DIR/mt7996_eeprom_233.bin" "$FW_DIR/mt7996_eeprom_233.bin.bak"
fi
mv /tmp/mt7996_eeprom_233.bin "$FW_DIR/"

ワイヤレスオフロード有効化 (スナップショット)
  • SDカード用設定(RAMを2GB以下に制限)
if ! fw_printenv -n bootargs | grep -q 'mem=2048M'; then
  new_bootargs="$(fw_printenv -n bootargs) mem=2048M"
  fw_setenv bootargs "$new_bootargs"
fi
grep -q '^options mt7996e wed_enable=Y sr_scene_detect=Y' /etc/modules.conf || echo 'options mt7996e wed_enable=Y sr_scene_detect=Y' >> /etc/modules.conf
echo "再起動してください"
# reboot
  • 復元
new_bootargs=$(fw_printenv -n bootargs | sed 's/mem=2048M//g') 
fw_setenv bootargs $new_bootargs
sed -i '/^options mt7915e wed_enable=Y$/d' /etc/modules.conf
sed -i '/^options mt7996e wed_enable=Y sr_scene_detect=Y$/d' /etc/modules.conf
echo "再起動してください"
# reboot

バックグラウンドレーダー
uci set wireless.default_radio1.background_radar=1
uci set wireless.default_radio2.background_radar=1
uci commit wireless

MLO

MAC80211_MT76_Programming_Guide_V4.10.pdf

#!/bin/sh

SSID='ばなな'
WPA_KEY='password'
COUNTRY='JP'
MLD_ID='42'

# cp /etc/config/wireless /etc/config/wireless.mlo.bak
# rm  /etc/config/wireless
# wifi config

uci set wireless.radio0.disabled='0'
uci set wireless.radio1.disabled='0'
uci set wireless.radio2.disabled='0'

uci set wireless.default_radio0.disabled='0'
uci set wireless.default_radio1.disabled='0'
uci set wireless.default_radio2.disabled='0'

# 2.4GHz (radio0)
uci set wireless.radio0.band='2g'
uci set wireless.radio0.channel='11'
uci set wireless.radio0.htmode='HE40'
uci set wireless.radio0.country="$COUNTRY"
uci set wireless.radio0.mlo='1'
uci set wireless.radio0.mld_id="$MLD_ID"

uci set wireless.default_radio0.device='radio0'
uci set wireless.default_radio0.network='lan'
uci set wireless.default_radio0.mode='ap'
uci set wireless.default_radio0.ssid="$SSID"
uci set wireless.default_radio0.encryption='sae'
uci set wireless.default_radio0.key="$WPA_KEY"
uci set wireless.default_radio0.mlo_link_id='0'

# 5GHz (radio1)
uci set wireless.radio1.band='5g'
uci set wireless.radio1.channel='auto'
uci set wireless.radio1.htmode='HE80'
uci set wireless.radio1.country="$COUNTRY"
uci set wireless.radio1.background_radar='1'
uci set wireless.radio1.mlo='1'
uci set wireless.radio1.mld_id="$MLD_ID"

uci set wireless.default_radio1.device='radio1'
uci set wireless.default_radio1.network='lan'
uci set wireless.default_radio1.mode='ap'
uci set wireless.default_radio1.ssid="$SSID"
uci set wireless.default_radio1.encryption='sae'
uci set wireless.default_radio1.key="$WPA_KEY"
uci set wireless.default_radio1.mlo_link_id='1'

# 6GHz (radio2)
uci set wireless.radio2.band='6g'
uci set wireless.radio2.channel='auto'
uci set wireless.radio2.htmode='HE160'
uci set wireless.radio2.country="$COUNTRY"
uci set wireless.radio2.background_radar='1'
uci set wireless.radio2.mlo='1'
uci set wireless.radio2.mld_id="$MLD_ID"

uci set wireless.default_radio2.device='radio2'
uci set wireless.default_radio2.network='lan'
uci set wireless.default_radio2.mode='ap'
uci set wireless.default_radio2.ssid="$SSID"
uci set wireless.default_radio2.encryption='sae'
uci set wireless.default_radio2.key="$WPA_KEY"
uci set wireless.default_radio2.mlo_link_id='2'

uci commit wireless
wifi reload

パーツ

ACアダプター

UCB Type-C PD 20V
  • 純正ACアダプター: 12V/5.2A or 19V 3.2A

  • USB-C回路図
    CH224Kは20V/3.25A(65W)プロファイルを固定で要求する
    9d71e1f22c5df37ed962d51aa307a6b95d715893.jpeg

  • PD 20V: 65Wアダプター
    PC-VP-BP143: 20V/3.25A,15V/3A,9V/3A,5V/3A
    EC-AC8565BK: 20V/3.25A,15V/3A,12V/3A,9V/3A,5V/3A


ファン

BPI-R4用ファン確認

汎用Thermal Sysfsドライバの使い方

  • ハードウェアモニタ(hwmon)デバイス一覧
ls -l /sys/class/hwmon/
  • ファンPWM値の現在値確認
cat /sys/class/hwmon/hwmon1/pwm1
  • ファンPWM制御の状態確認
cat /sys/class/hwmon/hwmon1/pwm1_enable
  • サーマルゾーン(温度トリップポイント)の種類確認
cat /sys/class/thermal/thermal_zone0/trip_point_0_type # クリティカル: 100%
cat /sys/class/thermal/thermal_zone0/trip_point_1_type # ホット
cat /sys/class/thermal/thermal_zone0/trip_point_2_type # アクティブ: 50%
cat /sys/class/thermal/thermal_zone0/trip_point_3_type # アクティブ: 30%
cat /sys/class/thermal/thermal_zone0/trip_point_4_type # アクティブ: 0%
  • サーマルゾーン(温度トリップポイント)の温度設定確認
cat /sys/class/thermal/thermal_zone0/trip_point_0_temp # 臨界: 125℃
cat /sys/class/thermal/thermal_zone0/trip_point_1_temp # 高: 120℃
cat /sys/class/thermal/thermal_zone0/trip_point_2_temp # 高: 115℃
cat /sys/class/thermal/thermal_zone0/trip_point_3_temp # 中: 85℃
cat /sys/class/thermal/thermal_zone0/trip_point_4_temp # 低: 40℃

BPI-R4用ファンスクリプト
  • pwmfan
# /etc/init.d/pwmfan
cat <<'EOF' > /etc/init.d/pwmfan
#!/bin/sh /etc/rc.common

START=99
PIDFILE=/var/run/pwmfan.pid

start() {
    if [ -f $PIDFILE ]; then
        PID=$(cat $PIDFILE 2>/dev/null)
        if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
            echo "Already running"
            return 1
        else
            rm -f $PIDFILE
        fi
    fi
    /usr/bin/pwmfan-loop &
    echo $! > $PIDFILE
}

stop() {
    if [ -f $PIDFILE ]; then
        PID=$(cat $PIDFILE 2>/dev/null)
        if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
            kill $PID
        fi
        rm -f $PIDFILE
    fi
}

restart() {
    stop
    sleep 1
    start
}
EOF

chmod 755 /etc/init.d/pwmfan

# /usr/bin/pwmfan-loop
cat <<'EOF' > /usr/bin/pwmfan-loop
#!/bin/sh

CONFIG=pwmfan
SECTION="pwmfan"

get_temp() {
    local temp
    temp=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null)
    [ -z "$temp" ] && temp=0
    echo $((temp / 1000))
}

set_pwm() {
    local pwm="$1"
    echo 1 > /sys/class/hwmon/hwmon1/pwm1_enable
    echo $pwm > /sys/class/hwmon/hwmon1/pwm1
}

read_config() {
    INTERVAL=$(uci get ${CONFIG}.@${SECTION}[0].interval 2>/dev/null)
    [ -z "$INTERVAL" ] && INTERVAL=30
    TRIP_TEMP=$(uci get ${CONFIG}.@${SECTION}[0].trip_temp 2>/dev/null)
    TRIP_PWM=$(uci get ${CONFIG}.@${SECTION}[0].trip_pwm 2>/dev/null)
    MINPWM=$(uci get ${CONFIG}.@${SECTION}[0].minpwm 2>/dev/null)
    [ -z "$MINPWM" ] && MINPWM=100
    MAXPWM=$(uci get ${CONFIG}.@${SECTION}[0].maxpwm 2>/dev/null)
    [ -z "$MAXPWM" ] && MAXPWM=255

    if [ -z "$TRIP_TEMP" ] || [ -z "$TRIP_PWM" ]; then
        exit 1
    fi
    case "$INTERVAL" in
        ''|*[!0-9]*) INTERVAL=30 ;;
    esac
}

main_loop() {
    read_config
    local temp pwm i t p last_pwm=0
    set -- $TRIP_TEMP
    local trip_count=$#
    while true; do
        temp=$(get_temp)
        pwm=$MINPWM
        set -- $TRIP_TEMP
        local j=1
        for t in $@; do
            set -- $TRIP_PWM
            p=$(eval "echo \$$j")
            [ -z "$p" ] && p=$MINPWM
            [ "$temp" -ge "$t" ] && pwm=$p
            j=$((j+1))
        done
        [ "$pwm" -lt "$MINPWM" ] && pwm=$MINPWM
        [ "$pwm" -gt "$MAXPWM" ] && pwm=$MAXPWM
        if [ "$pwm" != "$last_pwm" ]; then
            set_pwm "$pwm"
            last_pwm=$pwm
        fi
        sleep "$INTERVAL"
    done
}

main_loop
EOF

chmod 755 /usr/bin/pwmfan-loop

touch /etc/config/pwmfan
uci -q delete pwmfan.@pwmfan[0]
uci -q commit pwmfan
uci -q add pwmfan pwmfan
uci -q set pwmfan.@pwmfan[-1].interval='20'
uci -q set pwmfan.@pwmfan[-1].minpwm='80'
uci -q set pwmfan.@pwmfan[-1].maxpwm='255'
uci -q set pwmfan.@pwmfan[-1].trip_temp='60 70'
uci -q set pwmfan.@pwmfan[-1].trip_pwm='128 255'
uci -q commit pwmfan
/etc/init.d/pwmfan enable
/etc/init.d/pwmfan restart

# /usr/bin/fan-status
cat <<'EOF' > /usr/bin/fan-status
#!/bin/sh

TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null)
TEMP_C=$(awk "BEGIN {printf \"%.1f\", $TEMP_RAW/1000}")
PWM=$(cat /sys/class/hwmon/hwmon1/pwm1 2>/dev/null)
PWM_PERCENT=$((PWM * 100 / 255))
echo "========================="
echo " Fan & Temperature Status"
echo "-------------------------"
echo " Temperature : ${TEMP_C} °C"
echo " Fan PWM     : ${PWM} (${PWM_PERCENT} %)"
echo "========================="
EOF

chmod 755 /usr/bin/fan-status
fan-status
  • 監視
while true; do
    fan-status
    sleep 20
done
  • リムーブ
/etc/init.d/pwmfan stop
/etc/init.d/pwmfan disable

rm -f /etc/init.d/pwmfan
rm -f /usr/bin/pwmfan-loop
rm -f /usr/bin/fan-status

uci -q delete pwmfan.@pwmfan[0]
uci -q commit pwmfan

[ ! -s /etc/config/pwmfan ] && rm -f /etc/config/pwmfan

モデム

SIMカードトレイ
  • SIMサイズ: nanoSIM
  • SIMカードトレイ: iPhone5/5S用

Fibocom FM350-GL (14c3:4d75)

FM350 AT Commands User Manual

  • 動作環境
    OpenWrt: 24.10.2
    ModemManager: 1.22.0
    kmod-mtk-t7xx: 6.6.93-r1
    14C3:4D75: 81600.0000.00.29.18.16_DO
    モード: PCIe
    SIM: SIM1に挿入
    キャリア: docomo

  • MHF4コネクタ (アンテナ端子)
    FM350.png
    M: プライマリ/送信 (全利用)
    M1: 4×4 MIMO
    M2: 4×4 MIMO
    D/G: ダイバーシティ/受信 (全利用)

  • 既知の問題
    モデムデバイスは、完全に断電してから通電させないと、認識しない
    ※M.2スロットの3.3 V電源ラインはカーネルから制御できず、PCIeリセットピンも露出していない
    PCIeモードでは、ATコマンドは送信出来ない
    SIM1の青色LEDは、通信が確立しないと点灯しない

  • 必要パッケージ

opkg update && opkg install kmod-mtk-t7xx modemmanager-rpcd luci-proto-modemmanager pciutils mbim-utils ubus
  • モデムインターフェース作成
# ISP/APN設定変数
WWAN="wwan"
APN="spmode.ne.jp"
ALLOWEDAUTH="chap"
USERNAME="spmode"
PASSWORD="spmode"
ALLOWEDMODE="5G" # SPモードの場合必須
METRIC="100"
IPTYPE="ipv4v6"
LOGLEVEL="ERR"
IP6ASSIGN="64"
MTU="1500"
SIGNALRATE="120"
INIT_EPSBEARER="custom"
AUTO="0"

uci set network.${WWAN}=interface
uci set network.${WWAN}.proto='modemmanager'
uci set network.${WWAN}.apn="${APN}"
uci set network.${WWAN}.allowedauth="${ALLOWEDAUTH}"
uci set network.${WWAN}.allowedmode="${ALLOWEDMODE}"
uci set network.${WWAN}.iptype="${IPTYPE}"
uci set network.${WWAN}.loglevel="${LOGLEVEL}"
uci set network.${WWAN}.metric="${METRIC}"
uci set network.${WWAN}.force_link='1'
uci set network.${WWAN}.ip6assign="${IP6ASSIGN}"
[ -n "$MTU" ] && uci set network.${WWAN}.mtu="${MTU}"
[ -n "$SIGNALRATE" ] && uci set network.${WWAN}.signalrate="${SIGNALRATE}"
uci set network.${WWAN}.auto="${AUTO}"

uci set network.${WWAN}.init_epsbearer="${INIT_EPSBEARER}"
if [ "$INIT_EPSBEARER" = "custom" ]; then
  uci set network.${WWAN}.init_apn="${APN}"
  uci set network.${WWAN}.init_allowedauth="${ALLOWEDAUTH}"
  [ -n "$USERNAME" ] && uci set network.${WWAN}.init_username="${USERNAME}"
  [ -n "$PASSWORD" ] && uci set network.${WWAN}.init_password="${PASSWORD}"
  uci set network.${WWAN}.init_iptype="${IPTYPE}"
fi

WWAN_IDX=$(uci show network | grep "name='wwan0'" | sed -n "s/network.@device\[\([0-9]\+\)\].*/\1/p")
if [ -n "$WWAN_IDX" ]; then
  uci set network.@device[$WWAN_IDX].ipv6='1'
  [ -n "$MTU" ] && uci set network.@device[$WWAN_IDX].mtu="${MTU}"
  [ -n "$MTU" ] && uci set network.@device[$WWAN_IDX].mtu6="${MTU}"
else
  uci add network device
  uci set network.@device[-1].name='wwan0'
  uci set network.@device[-1].ipv6='1'
  [ -n "$MTU" ] && uci set network.@device[-1].mtu="${MTU}"
  [ -n "$MTU" ] && uci set network.@device[-1].mtu6="${MTU}"
fi

uci commit network
sync
mount -o remount,ro
echo "Power cycle"
  • デバイス確認
lspci

ls -la /dev/ | grep -E "(cdc|wwan)"
  • ネットワークインターフェース確認
ip link show
  • ベンダーID、プロダクトID確認
ls /sys/class/net/wwan0/device/
cat /sys/class/net/wwan0/device/../../../modalias
cat /sys/class/net/wwan0/device/../../../uevent
  • モデム確認
ubus call modemmanager info
ubus call modemmanager dump
mmcli -L
mmcli -m 0
  • 使用可能なすべてのオプション
mbimcli --help-all
  • バージョン確認
mbimcli --version
  • FCCロック確認
mbimcli -d /dev/wwan0mbim0 --intel-query-fcc-lock
mbimcli -d /dev/wwan0mbim0 --set-radio-state=on
  • FCCロック解除(必要な場合)
mbimcli -d /dev/wwan0mbim0 --intel-set-fcc-unlock

/etc/ModemManager/fcc.unlock/
dispatcher-fcc-unlock

MODEM="14c3" # 例
mkdir -p /etc/ModemManager/fcc.unlock/
chmod 644 /etc/ModemManager/fcc.unlock/$MODEM

cat <<'EOF' > /etc/ModemManager/fcc.unlock/$MODEM
# <ここにdispatcher-fcc-unlockの該当ソースを貼る>
EOF

/etc/init.d/modemmanager restart
  • モデム有効化(enable)
mmcli -m 0 -e
  • ラジオ有効化
mbimcli -d /dev/wwan0mbim0 --set-radio-state=on
  • ラジオ状態確認
mbimcli -d /dev/wwan0mbim0 --query-radio-state
  • デバイス機能確認
mbimcli -d /dev/wwan0mbim0 --query-device-caps
  • SIM状態確認
mbimcli -d /dev/wwan0mbim0 --query-subscriber-ready-status
  • ネットワーク登録状態確認
mbimcli -d /dev/wwan0mbim0 --query-registration-state
  • 信号強度確認
mmcli -m 0 --signal-get

mbimcli -d /dev/wwan0mbim0 --query-signal-state
  • APN設定確認
mbimcli -d /dev/wwan0mbim0 --query-provisioned-contexts
  • 接続IP情報
mbimcli -d /dev/wwan0mbim0  -p --query-ip-configuration=0
  • モデムの詳細情報
root@bpi-r4:~# mmcli -m 0
  -----------------------------------
  General   |                   path: /org/freedesktop/ModemManager1/Modem/0
            |              device id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  -----------------------------------
  Hardware  |           manufacturer: generic
            |                  model: MBIM [14C3:4D75]
            |      firmware revision: 81600.0000.00.29.18.16_DO
            |                         C43
            |           h/w revision: V1.0.6
            |              supported: gsm-umts, lte, 5gnr
            |                current: gsm-umts, lte, 5gnr
            |           equipment id: XXXXXXXXXXXXXXXX
  -----------------------------------
  System    |                 device: /sys/devices/platform/soc/11280000.pcie/pci0003:00/0003:00:00.0/0003:01:00.0
            |                physdev: /sys/devices/platform/soc/11280000.pcie/pci0003:00/0003:00:00.0/0003:01:00.0
            |                drivers: mtk_t7xx
            |                 plugin: generic
            |           primary port: wwan0mbim0
            |                  ports: wwan0 (net), wwan0at0 (at), wwan0mbim0 (mbim)
  -----------------------------------
  Numbers   |                    own: XXXXXXXXXXXX
  -----------------------------------
  Status    |                   lock: sim-pin2
            |         unlock retries: sim-pin2 (3)
            |                  state: connected
            |            power state: on
            |            access tech: lte, 5gnr
            |         signal quality: 48% (cached)
  -----------------------------------
  Modes     |              supported: allowed: 3g; preferred: none
            |                         allowed: 4g; preferred: none
            |                         allowed: 3g, 4g; preferred: none
            |                         allowed: 5g; preferred: none
            |                         allowed: 3g, 5g; preferred: none
            |                         allowed: 4g, 5g; preferred: none
            |                         allowed: 3g, 4g, 5g; preferred: none
            |                current: allowed: 5g; preferred: none
  -----------------------------------
  IP        |              supported: ipv4, ipv6, ipv4v6
  -----------------------------------
  3GPP      |                   imei: XXXXXXXXXXXXXXXX
            |          enabled locks: fixed-dialing
            |            operator id: 44010
            |          operator name: NTT DOCOMO
            |           registration: home
            |   packet service state: attached
  -----------------------------------
  3GPP EPS  |   ue mode of operation: csps-2
            |    initial bearer path: /org/freedesktop/ModemManager1/Bearer/4
            |     initial bearer apn: spmode.ne.jp
            | initial bearer ip type: ipv4v6
  -----------------------------------
  3GPP 5GNR |              mico mode: disabled
  -----------------------------------
  SIM       |       primary sim path: /org/freedesktop/ModemManager1/SIM/0
            |         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
            |                         slot 2: /org/freedesktop/ModemManager1/SIM/1
  -----------------------------------
  Bearer    |                  paths: /org/freedesktop/ModemManager1/Bearer/5
root@bpi-r4:~# 

スクリーンショット 2025-07-03 002228.jpg
Telit LN940 よりは速いが、5Gの速度にしては遅すぎる

docomo.png
iPhoneよりは速かった(笑)


SFP

SFP 10G
opkg update
opkg install ethtool-full

RTC

RTC有効化
opkg install i2c-tools
fw_setenv bootconf_extra mt7988a-bananapi-bpi-r4-rtc

初期設定ツール

all in one scripts

aios.png

デバイスアクセス

デバイスアクセス(UCI)

パワーシェルでアクセス

PowerShellの開始

  • キー入力:Win+x > a > はい

UCI(SSH)アクセス

powershell:初期設定用
ssh -o StrictHostKeyChecking=no -oHostKeyAlgorithms=+ssh-rsa root@192.168.1.1
  • root@192.168.1.1's password:初期値:パスワード無し
SSHログイン出来ない場合:exclamation:
  • %USERPROFILE%\.ssh\known_hosts ※Windows隠しファイル
powershell
Clear-Content .ssh\known_hosts -Force 

OpenSSHのインストールが無い場合:exclamation:
  • 機能の確認
    ※Windows 10 Fall Creators Update(1709)以降標準搭載
powershell
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
  • 機能のインストール
powershell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

LuCi

ブラウザーでアクセス

初期設定

パスワード

初期値から変更
passwd

Changing password for root
New password:

passwd:入力モード
任意のパスワード

Retype password:

passwd:入力モード
再入力

passwd: password for root changed by root

exit

ホストネーム

ホストネーム(openwrt)を変更
#!/bin/sh
HOSTNAME='openwrt' # デバイス名
uci set system.@system[0].hostname=${HOSTNAME}
uci commit system
/etc/init.d/sysntpd restart

タイムゾーン

タイムゾーンを変更
#!/bin/sh
TIMEZONE='JST-9'
ZONENAME='Asia/Tokyo'
uci set system.@system[0].timezone=${TIMEZONE}
uci set system.@system[0].zonename=${ZONENAME}
uci commit system
/etc/init.d/sysntpd restart

NTP

NTPサーバーを変更
#!/bin/sh
POOL='jp'
uci delete system.ntp.server
uci add_list system.ntp.server=0.${POOL}.pool.ntp.org
uci add_list system.ntp.server=1.${POOL}.ppl.ntp.org
uci add_list system.ntp.server=2.${POOL}.pool.ntp.org 
uci add_list system.ntp.server=3.${POOL}.pool.ntp.org
uci commit system
/etc/init.d/sysntpd restart

NTPサーバーを有効
#!/bin/sh
uci set system.ntp.enable_server='1' # NTPサーバー有効
uci set system.ntp.use_dhcp='0'
uci set system.ntp.interface='lan'
uci commit system
/etc/init.d/sysntpd restart

SSH

WANからのアクセスを遮断
uci set dropbear.@dropbear[0].Interface='lan'
uci commit dropbear

パッケージ

母国語サポート

LuCiの言語パッケージをインストール
  • 対応言語検索
#! /bin/sh
opkg update
opkg list luci-i18n-base\*
  • 設定
#! /bin/sh
I18N='ja'
opkg update
opkg install luci-i18n-base-${I18N}
opkg install luci-i18n-firewall-${I18N}

UCI(TTYD)

ブラウザーでUCIにアクセス
#! /bin/sh
I18N='ja'
opkg update
opkg install luci-i18n-ttyd-${I18N}
uci set ttyd.@ttyd[0].ipv6='1'
uci set ttyd.@ttyd[0].command='/bin/login -f root' #自動ログイン
uci commit ttyd
/etc/init.d/rpcd restart

ファイラー(SFTP)

WinSCPでファイルにアクセス
#! /bin/sh
opkg update
opkg install openssh-sftp-server

クライアント設定(Windows)

  • 手動インストール
  • 自動インストール
    • キー入力:Win+x > a > はい
    • 最新版ソフトウェアのインストール
powershell:クライアントPC
$psVersion = $PSVersionTable.PSVersion.Major
$LINKS = Invoke-WebRequest "https://winscp.net/eng/download.php"
$LINKS_VERSION = $LINKS.Links | Where-Object {$_.href -like "*WinSCP-*-Setup.exe*"} | Select-Object -ExpandProperty href
$VERSION = ($LINKS_VERSION -split '/')[-2] -replace "WinSCP-([0-9]+\.[0-9]+\.[0-9]+).*", '$1'
Write-Host "Version to install: $VERSION"
$downloadUrl = "https://jaist.dl.sourceforge.net/project/winscp/WinSCP/$VERSION/WinSCP-$VERSION-Setup.exe?viasf=1"
Write-Host "Downloading from: $downloadUrl"
$ONAMAE = (whoami).Split('\')[1]
$destinationPath = "C:\Users\$ONAMAE\Downloads\WinSCP-$VERSION-Setup.exe"
Invoke-WebRequest -Uri $downloadUrl -OutFile $destinationPath
Write-Host "Installing WinSCP..."
Start-Process -FilePath $destinationPath -ArgumentList "/VERYSILENT /NORESTART" -Wait
Invoke-Expression "C:\Users\$ONAMAE\AppData\Local\Programs\WinSCP\WinSCP.exe"
  • 警告 > 強制的に貼り付け

  • WinSCP設定

    • セッション
      • ホスト名:192.168.1.1
      • ユーザー名:root
      • パスワード:設定したパスワード
      • ログインをクリック

BusyBoxフルバージョン

インストール

OpenWrtバージョン

#!/bin/sh
opkg update
opkg install coreutils

CPU負荷分散

インストール
#! /bin/sh
opkg update
opkg install irqbalance
uci set irqbalance.irqbalance=irqbalance
uci set irqbalance.irqbalance.enabled='1'
uci commit irqbalance
/etc/init.d/irqbalance start

ネットワーク統計インターフェイス

インストール
#! /bin/sh
I18N='ja'
opkg update
opkg install luci-i18n-statistics-${I18N}
/etc/init.d/collectd enable
/etc/init.d/rpcd restart
  • プラグイン検索
#! /bin/sh
opkg update
opkg list collectd-mod\*

追加テーマ

インストール
#! /bin/sh
opkg update
opkg install luci-theme-openwrt
opkg install luci-theme-material

AdGuard Home

インストール
#!/bin/ash

# Check version
TMP_DIR="/tmp/aios"
ADGUARD_URL="https://github.com/AdguardTeam/AdGuardHome"
mkdir -p "$TMP_DIR"
echo -e "\033[1;34m[INFO]\033[0;39m Downloading AdGuardHome list"
if wget --no-check-certificate -O "$TMP_DIR/AdGuardHome_list" "$ADGUARD_URL"; then
    latest_ver=$(grep -o -E "AdGuard Home v[0-9]+\.[0-9]+(\.[0-9]+)?" "$TMP_DIR/AdGuardHome_list" | head -n1 | grep -o -E "v[0-9]+\.[0-9]+(\.[0-9]+)?")   
    if [ -n "$latest_ver" ]; then
        cp /etc/config/network /etc/config/network.AG.bak
        cp /etc/config/dhcp /etc/config/dhcp.AG.bak
        cp /etc/config/firewall /etc/config/firewall.AG.bak
        echo -e "\033[1;33mInstall Version: ${latest_ver}\033[0-39m"
        read -p "Press any key to continue..."
    else
        echo -e "\033[1;31m[ERROR]\033[0;39m Failed to parse version information from AdGuardHome list."
    fi
else
    echo -e "\033[1;31m[ERROR]\033[0;39m Failed to download AdGuardHome list from $ADGUARD_URL."
fi
rm -rf "$TMP_DIR"

# Install
opkg update
opkg install ca-bundle
mkdir -p /etc/AdGuardHome

# Automatic architecture determination
ARCH=$(uname -m)
case "$ARCH" in
  aarch64|arm64)   AGH_BIN="AdGuardHome_linux_arm64";;
  armv7l)          AGH_BIN="AdGuardHome_linux_armv7";;
  armv6l)          AGH_BIN="AdGuardHome_linux_armv6";;
  armv5l)          AGH_BIN="AdGuardHome_linux_armv5";;
  x86_64|amd64)    AGH_BIN="AdGuardHome_linux_amd64";;
  i386|i686)       AGH_BIN="AdGuardHome_linux_386";;
  mips)            AGH_BIN="AdGuardHome_linux_mipsle";;
  mips64)          AGH_BIN="AdGuardHome_linux_mips64le";;
  *) echo "[ERROR] Unsupported architecture: $ARCH"; exit 1;;
esac
AGH_TAR="${AGH_BIN}.tar.gz"
AGH_URL="https://github.com/AdguardTeam/AdGuardHome/releases/download/${latest_ver}/${AGH_TAR}"

wget --no-check-certificate -O "/etc/AdGuardHome/${AGH_TAR}" "$AGH_URL"
tar -xzvf "/etc/AdGuardHome/${AGH_TAR}" -C /etc/
rm -rf "/etc/AdGuardHome/${AGH_TAR}"
chmod +x /etc/AdGuardHome/AdGuardHome
/etc/AdGuardHome/AdGuardHome -s install
/etc/init.d/AdGuardHome enable
/etc/init.d/AdGuardHome start
NET_ADDR=$(/sbin/ip -o -4 addr list br-lan | awk 'NR==1{ split($4, ip_addr, "/"); print ip_addr[1] }')
NET_ADDR6=$(/sbin/ip -o -6 addr list br-lan scope global | awk 'NR==1{ split($4, ip_addr, "/"); print ip_addr[1] }')
echo "Router IPv4 : ""${NET_ADDR}"
echo "Router IPv6 : ""${NET_ADDR6}"
uci set dhcp.@dnsmasq[0].noresolv="0"
uci set dhcp.@dnsmasq[0].cachesize="1000"
uci set dhcp.@dnsmasq[0].rebind_protection='0'
uci set dhcp.@dnsmasq[0].port="54"
uci -q delete dhcp.@dnsmasq[0].server
uci add_list dhcp.@dnsmasq[0].server="${NET_ADDR}"
uci -q delete dhcp.lan.dhcp_option
uci -q delete dhcp.lan.dns
uci add_list dhcp.lan.dhcp_option='6,'"${NET_ADDR}" 
uci add_list dhcp.lan.dhcp_option='3,'"${NET_ADDR}"
for OUTPUT in $(ip -o -6 addr list br-lan scope global | awk '{ split($4, ip_addr, "/"); print ip_addr[1] }')
do
	echo "Adding $OUTPUT to IPV6 DNS"
	uci add_list dhcp.lan.dns=$OUTPUT
done
uci commit dhcp
/etc/init.d/dnsmasq restart
uci set firewall.adguardhome_dns_53='redirect'
uci set firewall.adguardhome_dns_53.src='lan'
uci set firewall.adguardhome_dns_53.proto='tcp udp'
uci set firewall.adguardhome_dns_53.src_dport='53'
uci set firewall.adguardhome_dns_53.target='DNAT'
uci set firewall.adguardhome_dns_53.name='Adguard Home'
uci set firewall.adguardhome_dns_53.dest='lan'
uci set firewall.adguardhome_dns_53.dest_port='53'
uci set firewall.adguardhome_dns_53.family="any"
uci commit firewall
/etc/init.d/firewall restart

BEがまともに動くまで暫定

Wi-Fi 6: usteer + 802.11r/k/v による高速ローミング構成

設定

usteerとバンドステアリングの設置

SSID='ばなな'
WIFI_KEY='password'
COUNTRY='JP'
LANGUAGE='ja'
MOBILITY_DOMAIN='1234'

opkg update && opkg install "luci-i18n-usteer-$LANGUAGE"

# 2.4GHz
uci set wireless.radio0.band='2g'
uci set wireless.radio0.channel='auto'
uci set wireless.radio0.htmode='HE40'
uci set wireless.radio0.country="$COUNTRY"
uci set wireless.radio0.txpower='10'

uci set wireless.radio0_ap=wifi-iface
uci set wireless.radio0_ap.device='radio0'
uci set wireless.radio0_ap.network='lan'
uci set wireless.radio0_ap.mode='ap'
uci set wireless.radio0_ap.ssid="$SSID"
uci set wireless.radio0_ap.encryption='sae'
uci set wireless.radio0_ap.key="$WIFI_KEY"
uci set wireless.radio0_ap.isolate='1'
uci set wireless.radio0_ap.ocv='1'
uci set wireless.radio0_ap.ieee80211r='1'
uci set wireless.radio0_ap.mobility_domain="$MOBILITY_DOMAIN"
uci set wireless.radio0_ap.ft_over_ds='1'
uci set wireless.radio0_ap.nasid='ap1-2g'
uci set wireless.radio0_ap.usteer_min_snr='30'
uci set wireless.radio0_ap.ieee80211k='1'
uci set wireless.radio0_ap.ieee80211v='1'

# 5GHz
uci set wireless.radio1.band='5g'
uci set wireless.radio1.channel='auto'
uci set wireless.radio1.htmode='HE80'
uci set wireless.radio1.country="$COUNTRY"

uci set wireless.radio1_ap=wifi-iface
uci set wireless.radio1_ap.device='radio1'
uci set wireless.radio1_ap.network='lan'
uci set wireless.radio1_ap.mode='ap'
uci set wireless.radio1_ap.ssid="$SSID"
uci set wireless.radio1_ap.encryption='sae'
uci set wireless.radio1_ap.key="$WIFI_KEY"
uci set wireless.radio1_ap.isolate='1'
uci set wireless.radio1_ap.background_radar='1'
uci set wireless.radio1_ap.ocv='1'
uci set wireless.radio1_ap.ieee80211r='1'
uci set wireless.radio1_ap.mobility_domain="$MOBILITY_DOMAIN"
uci set wireless.radio1_ap.ft_over_ds='1'
uci set wireless.radio1_ap.ft_psk_generate_local='1'
uci set wireless.radio1_ap.nasid='ap1-5g'
uci set wireless.radio1_ap.usteer_min_snr='20'
uci set wireless.radio1_ap.ieee80211k='1'
uci set wireless.radio1_ap.ieee80211v='1'

# 6GHz
uci set wireless.radio2.band='6g'
uci set wireless.radio2.channel='auto'
uci set wireless.radio2.htmode='HE160'
uci set wireless.radio2.country="$COUNTRY"

uci set wireless.radio2_ap=wifi-iface
uci set wireless.radio2_ap.device='radio2'
uci set wireless.radio2_ap.network='lan'
uci set wireless.radio2_ap.mode='ap'
uci set wireless.radio2_ap.ssid="$SSID"
uci set wireless.radio2_ap.encryption='sae'
uci set wireless.radio2_ap.key="$WIFI_KEY"
uci set wireless.radio2_ap.isolate='1'
uci set wireless.radio2_ap.background_radar='1'
uci set wireless.radio2_ap.ocv='1'
uci set wireless.radio2_ap.ieee80211r='1'
uci set wireless.radio2_ap.mobility_domain="$MOBILITY_DOMAIN"
uci set wireless.radio2_ap.ft_over_ds='1'
uci set wireless.radio2_ap.ft_psk_generate_local='1'
uci set wireless.radio2_ap.nasid='ap1-6g'
uci set wireless.radio2_ap.usteer_min_snr='15'
uci set wireless.radio2_ap.ieee80211k='1'
uci set wireless.radio2_ap.ieee80211v='1'

# usteer
uci set usteer.@usteer[0].band_steering='1'
uci set usteer.@usteer[0].load_balancing='1'
uci set usteer.@usteer[0].sta_block_timeout='300'
uci set usteer.@usteer[0].min_snr='20'
uci set usteer.@usteer[0].max_snr='80'
uci set usteer.@usteer[0].signal_diff_threshold='10'

uci commit
wifi reload

トラブル

既知の問題


初期化

ファクトリーリセット(初期化)

リセット
# 要注意
firstboot && reboot now

This will erase all settings and remove any installed packages. Are you sure? [N/y]

初期化:入力モード
y

デバイスリセットボタン
デバイスのリセットボタンを10秒押し続ける


あとがき

  • BPI-R3より、色々進化している

  • ハードウェアアクセレーターは有効

  • Wi-Fi7はまだまだ成熟していないが、逆にどんどん良くなるのが面白いかな

  • 購入について、AliExpressが一番安いが、アフターサービスを考えると、Amazonやエレファインの方が安心かもしれない

  • モデム動かすのに、丸1日掛かった。。。

  • Wi-Fi BEはまだ不安定だが、AXの完成度は高い
    ※BPI-R3より早いね (アップロードはWANチューニングの問題)
    ocn.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?