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 NCP-HG100

Last updated at Posted at 2024-02-22

編集中
:warning:Japanese notation

はじめに

初心者対応構成

  • スクリプトでの自動設定
  • UCIとLuCi及びWinSCPにて比較しながら作業がおススメ

PowerShellSSHアクセス

ssh root@192.168.1.1
ssh root@192.168.1.1のショートカット作成(デスクトップ)
powershell
$DESKTOP = ([Environment]::GetFolderPath("Desktop") + "\192.168.1.1.lnk")
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$DESKTOP")
$Shortcut.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$Shortcut.Arguments = '-windowstyle hidden -ExecutionPolicy RemoteSigned "Start-Process ssh root@192.168.1.1"'
$Shortcut.IconLocation = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,0"
$Shortcut.WorkingDirectory = "."
$Shortcut.Save()

  • 強制的に貼り付け
  • yes

SSHログイン出来ない場合:exclamation:

known_hostsクリア

  • C:\Users\yourusername\.ssh\known_hosts ※Windows隠しファイル
powershell
Clear-Content .ssh\known_hosts -Force


OpenSSHのインストール
※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


前提条件

  • 接続方法: シリアル接続

ファームウェアについて

デバイスについて

NCP-HG100/Cellular

ncp-hg100.png

ハードウェア仕様
  • SoC : Qualcomm IPQ4019
  • RAM : DDR3 512 MiB (H5TC4G63EFR)
  • Flash : eMMC 4 GiB (THGBMNG5D1LBAIT)
  • WLAN : 2.4/5 GHz 2T2R (IPQ4019)
  • Ethernet : 10/100/1000 Mbps x2
    • Transceiver : Qualcomm QCA8072
  • WWAN : Telit LN940A9
  • Z-Wave : Silicon Labs ZM5101
  • Bluetooth : Qualcomm CSR8811
  • Audio DAC : Realtek ALC5629
  • Audio Amp. : Realtek ALC1304
  • Voice Input Processor : Conexant CX20924
  • Micro Controller Unit : Nuvoton MINI54FDE
    • RGB LED, Fan, Temp. sensors
  • Touch Sensor : Cypress CY8C4014LQI
  • RGB LED driver : TI LP55231 (2x)
  • LEDs/Keys : 11x, 6x
  • UART : through-hole on PCB
    • J1: 3.3V, TX, RX, GND from tri-angle marking
    • 115200n8
  • Power : 12 VDC, 2.5 A

OpenWrt化手順

事前準備

シリアルコンバータモジュール USB to TTL(変換アダプター)

CH340モジュール

ch340.png


テストワイヤー

スルーホール用

pin.png


クライアントPC用(Windows)ダウンロード

デバイス用ダウンロード

  • KERNEL
    リネーム:openwrt-ipq40xx-generic-sony_ncp-hg100-cellular-initramfs-fit-uImage.itb > C0A88401.img
    ※TFTP用ディレクトリに格納

シリアル通信

設定

クライアントPC(Windows)設定

  • デバイスマネージャー > ポート(COMとLPT) 確認
  • 有線LAN設定 > 192.168.132.100
  • デバイスとクライアントPCに有線LAN接続

テストワイヤー接続

電圧:3.3V
GND <- GND
TX <- RX
RX <- TX
※RX、TX、クロス接続
※デバイスはまだ通電させない

pin1.png

  • デバイスとクライアントPCにシリアル接続
    ※テストワイヤーは先にデバイスへ挿す事

シリアル設定

  • TeraTerm起動
    • COMポート:ポート(COMとLPT) 確認した値
    • スピード:115200

シリアル通信

  • デバイス通電(アダプター接続)
  • TeraTermでシリアル接続
    Hit any key to stop autoboot: 何かキーを押しブートを停止させる
  • ブート変更
setenv bootcmd "mmc read 0x84000000 0x2e22 0x4000 && bootm 0x84000000"
saveenv

TFTP接続

  • Serva64起動 ※7秒待つ
  • Serva64設定 ※左上のアイコンをダブルクリック
    • TFTPタブ
      • TFTPサーバ チェック
      • TFTP Server IP address 192.168.132.100
      • TFTP Server root directory C0A88401.imgを格納したディレクトリ

U-Boot

tftpboot && bootm

boot11.png

  • 自動でリブート
  • Serva64終了
SFTPサーバーにファイルを取りに行かない場合
set ipaddr 192.168.132.1
set serverip 192.168.132.100
set bootfile C0A88401.img
printenv
saveenv

TCP/IP通信

  • デバイスをインターネット接続しているルーター等へ接続(WANポート)
  • クライアントPCのIPアドレス変更 DHCP
  • TeraTermをIP接続で新たに起動
    • TCP/IP ホスト 192.168.1.1
      • ユーザー名 root

OpenWrtインストール

リリースビルド
デバイス用のOpenWrtファームウェアをダウンロード

23.05.3
wget --no-check-certificate -O /tmp/openwrt-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin https://downloads.openwrt.org/releases/23.05.3/targets/ipq40xx/generic/openwrt-23.05.3-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin
sysupgrade -n /tmp/openwrt-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin

  • 自動でリブート

LuCi:http://openwrt.lan/

ストレージの拡張

opkg update && opkg install cfdisk resize2fs
cfdisk /dev/mmcblk0

/dev/mmcblk0p17

Rsize
New size: 3.4G

Write
Are you sure you want to write the partition table to disk?

yes

Quit

reboot

resize2fs /dev/mmcblk0p17

ベンチマーク

CPUパフォーマンス

time sh -c 'dd if=/dev/zero bs=1M count=100 | md5sum'

100+0 records in
100+0 records out
2f282b84e7e608d5852449ed940bfc51 -
real 0m 0.58s
user 0m 0.50s
sys 0m 0.20s

hdparm

opkg update && opkg install hdparm
hdparm -t --direct /dev/mmcblk0p17

新規設定用 オールインワンスクリプト 初心者対応

固有設定

レジスタ

opkg update
opkg install i2c-tools

i2cdetect -l
# i2c-1   i2c             QUP I2C adapter                         I2C adapter

i2cdetect -y 1
# Warning: Can't use SMBus Quick Write command, will skip some addresses
#      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
# 00:                                                 
# 10:                                                 
# 20:                                                 
# 30: -- -- UU UU -- -- -- --                         
# 40:                                                 
# 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
# 60:                                                 
# 70:

タッチセンサー

i2cset -y 1 0x14 0xf 1

外周LED

# (nop?, 分岐引っ掛かっても無さげ)
i2cset -y 1 0x15 0x00 0x00
# 波: blue+lightblue
i2cset -y 1 0x15 0x00 0x10
# 特殊ワイプ (中): blue->lightblue
i2cset -y 1 0x15 0x00 0x20
# ワイプ (速): blue->lightblue
i2cset -y 1 0x15 0x00 0x30
# 交互 (速): blue->lightblue
i2cset -y 1 0x15 0x00 0x40
# 点灯: yellow->blue
i2cset -y 1 0x15 0x00 0x50 
# 点滅: yellow
i2cset -y 1 0x15 0x00 0x60
# 点灯: red
i2cset -y 1 0x15 0x00 0x70
# 点灯: yellow
i2cset -y 1 0x15 0x00 0x80
# 点滅 (遅): blue 
i2cset -y 1 0x15 0x00 0x90
# 点灯:blue
i2cset -y 1 0x15 0x00 0xa0
# 消灯
i2cset -y 1 0x15 0x00 0xB0
# 点滅 (速): white 
i2cset -y 1 0x15 0x00 0xC0
# 点滅 (速): red 
i2cset -y 1 0x15 0x00 0xD0
# 交互: white->lightblue
i2cset -y 1 0x15 0x00 0xE0
# (nop?, 分岐引っ掛かっても無さげ)
i2cset -y 1 0x15 0x00 0xF0

参考設定

LED色確認ツール
#! /bin/sh
{
while :
do
    echo -e " \033[1;37mi2cset -y 1 0x15 0x00\033[0;39m"
    echo -e " \033[1;37mLED Register Value --------------------------\033[0;39m"
    echo -e " \033[0;37m[0]\033[0;39m 0xb0 Off"
    echo -e " \033[7;40m[l]\033[0;39m 0xc0 Flash: white"
    echo -e " \033[0;44m[2]\033[0;39m 0xa0 Light:blue"
    echo -e " \033[5;44m[3]\033[0;39m 0x90 Flash: blue"
    echo -e " \033[0;44m[4]\033[0;39m 0x50 Light: yellow->blue"
    echo -e " \033[0;43m[5]\033[0;39m 0x80 Light:yellow"
    echo -e " \033[5;43m[6]\033[0;39m 0x60 Flash: yellow"
    echo -e " \033[0;41m[7]\033[0;39m 0x70 Light: red"
    echo -e " \033[5;41m[8]\033[0;39m 0xd0 Flash: red"
    echo -e " \033[4;46m[9]\033[0;39m 0x20 Special Wipe: blue->lightblue"
    echo -e " \033[7;40m[a]\033[0;39m 0xe0 Alternate: white<>lightblue"
    echo -e " \033[4;46m[b]\033[0;39m 0x10 Wave: lightblue<>blue"
    echo -e " \033[4;46m[c]\033[0;39m 0x30 Wipe: blue<>lightblue"
    echo -e " \033[4;46m[d]\033[0;39m 0x40 Alternate: blue<>lightblue"
    echo -e " \033[7;36m[q]\033[0;39m Quit"
    echo -e " \033[1;37m-----------------------------------------------------\033[0;39m"
  read -p " Please select key: " num
  case "${num}" in
    "0" ) i2cset -y 1 0x15 0x00 0xb0 ;;
    "1" ) i2cset -y 1 0x15 0x00 0xc0 ;;
    "2" ) i2cset -y 1 0x15 0x00 0xa0 ;;
    "3" ) i2cset -y 1 0x15 0x00 0x90 ;;
    "4" ) i2cset -y 1 0x15 0x00 0x50 ;;
    "5" ) i2cset -y 1 0x15 0x00 0x80 ;;
    "6" ) i2cset -y 1 0x15 0x00 0x60 ;;
    "7" ) i2cset -y 1 0x15 0x00 0x70 ;;
    "8" ) i2cset -y 1 0x15 0x00 0xd0 ;;
    "9" ) i2cset -y 1 0x15 0x00 0x20 ;;
    "a" ) i2cset -y 1 0x15 0x00 0xe0 ;;
    "b" ) i2cset -y 1 0x15 0x00 0x10 ;;
    "c" ) i2cset -y 1 0x15 0x00 0x30 ;;
    "d" ) i2cset -y 1 0x15 0x00 0x40 ;;
    "q" ) exit 0 ;;
  esac
 done
}

LED P

概要:
外周LEDをサービスと連動して時間で変更する

※ワンポイント:update不要なら最初に#を入力

opkg update
opkg install i2c-tools

#! /bin/sh

mkdir -p /etc/config-software/
cat << "EOF" > /etc/config-software/led_p_new.sh
#! /bin/sh

SWITCH="$1"
if [ -z $1 ]; then
    SWITCH="on"
fi

TIME1="00:00:00"
TIME2="08:00:00"
TIME3="12:00:00"
TIME4="16:00:00"
TIME5="20:00:00"
TIME6="23:59:59"

DATE=`date +%s`
DATE1=`date -d ${TIME1} +%s`
DATE2=`date -d ${TIME2} +%s`
DATE3=`date -d ${TIME3} +%s`
DATE4=`date -d ${TIME4} +%s`
DATE5=`date -d ${TIME5} +%s`
DATE6=`date -d ${TIME6} +%s`

ZOON1="late night"
ZOON2="morning"
ZOON3="day"
ZOON4="evening"
ZOON5="night"

LED1='i2cset -y 1 0x15 0x00 0xb0' # off
LED2='i2cset -y 1 0x15 0x00 0xa0' # blue
LED3='i2cset -y 1 0x15 0x00 0x20' # sky blue
LED4='i2cset -y 1 0x15 0x00 0x80' # yellow
LED5='i2cset -y 1 0x15 0x00 0x70' # red

CRON1=`echo ${TIME1} | sed 's/:/ /g' | awk '{ print $1,$2 }' | sed 's/\(.*\) \(.*\)/\2 \1/g'`
CRON2=`echo ${TIME2} | sed 's/:/ /g' | awk '{ print $1,$2 }' | sed 's/\(.*\) \(.*\)/\2 \1/g'`
CRON3=`echo ${TIME3} | sed 's/:/ /g' | awk '{ print $1,$2 }' | sed 's/\(.*\) \(.*\)/\2 \1/g'`
CRON4=`echo ${TIME4} | sed 's/:/ /g' | awk '{ print $1,$2 }' | sed 's/\(.*\) \(.*\)/\2 \1/g'`
CRON5=`echo ${TIME5} | sed 's/:/ /g' | awk '{ print $1,$2 }' | sed 's/\(.*\) \(.*\)/\2 \1/g'`

function _LEDTIME() {
    if [[ ${DATE} -ge ${DATE1} && ${DATE} -lt ${DATE2} ]]; then
    `${LED1}`
    elif [[ ${DATE} -ge ${DATE2} && ${DATE} -lt ${DATE3} ]]; then
    `${LED2}`
    elif [[ ${DATE} -ge ${DATE3} && ${DATE} -lt ${DATE4} ]]; then
    `${LED3}`
    elif [[ ${DATE} -ge ${DATE4} && ${DATE} -lt ${DATE5} ]]; then
    `${LED4}`
    elif [[ ${DATE} -ge ${DATE5} && ${DATE} -lt ${DATE6} ]]; then
    `${LED5}`
    fi
    return 0
}

function _ERASE() {
    sed -i "/${ZOON1}/d" /etc/crontabs/root
    sed -i "/${ZOON2}/d" /etc/crontabs/root
    sed -i "/${ZOON3}/d" /etc/crontabs/root
    sed -i "/${ZOON4}/d" /etc/crontabs/root
    sed -i "/${ZOON5}/d" /etc/crontabs/root
    /etc/init.d/cron restart
    return 0
}

function _WRITE() {
    echo "${CRON1} * * * ${LED1} # ${ZOON1}" >> /etc/crontabs/root
    echo "${CRON2} * * * ${LED2} # ${ZOON2}" >> /etc/crontabs/root
    echo "${CRON3} * * * ${LED3} # ${ZOON3}" >> /etc/crontabs/root
    echo "${CRON4} * * * ${LED4} # ${ZOON4}" >> /etc/crontabs/root
    echo "${CRON5} * * * ${LED5} # ${ZOON5}" >> /etc/crontabs/root
    /etc/init.d/cron restart
    return 0
}

if [ ${SWITCH} = on ]; then
    _LEDTIME
    _ERASE
    _WRITE
elif [ ${SWITCH} = re ]; then
    _LEDTIME
elif [ ${SWITCH} = of ]; then
    _ERASE
fi
EOF


cat << "EOF" > /etc/init.d/led_p_new
#!/bin/sh /etc/rc.common

i2cset -y 1 0x14 0xf 1

START=96
STOP=01

start() {
        i2cset -y 1 0x15 0x00 0xc0
        sleep 3s
		sh /etc/config-software/led_p_new.sh on
        logger "led:start"
        exit 0
}
restart() {
        i2cset -y 1 0x15 0x00 0xe0
        sleep 3s
		sh /etc/config-software/led_p_new.sh re
        logger "led:restart"
        exit 0
}
stop() {
		sh /etc/config-software/led_p_new.sh of
        logger "led:stop"
        exit 0
}
EOF
chmod +x /etc/init.d/led_p_new

service led_p_new enable
service led_p_new start

サービス開始及び停止

# 有効
service led_p_new enable
# 開始
service led_p_new start
# 停止
service led_p_new stop
# 無効
service led_p_new disable

スクリプト実行時間計測

time sh /etc/config-software/led_p_new.sh

削除

service led_p_new stop
service led_p_new disable
rm -rf /etc/config-software/led_p_new.sh
rm -rf /etc/init.d/led_p_new


ZZDFS
#! /bin/ash

cat << "EOF" > /etc/init.d/zzdfs
#! /bin/sh

cat << "EOF" > /etc/init.d/zzdfs
#!/bin/sh /etc/rc.common

INTERVAL=5    # check interval (min)
FB_BAND=40    # fallback band
FB_CHANNEL=36 # fallback channel

START=99
STOP=01
     
start() {
    sleep 1m 15s
    mkdir -p /tmp/config-software/
    RADIO=`uci show wireless | grep "band='5g'" | cut -d'.' -f2 | awk '{ print $1 }'`
    CHS=`echo ${RADIO} | wc -w`
    if [ ${CHS} = 2 ];then
        RADIO=`echo ${RADIO}| awk '{print $2}'`
    fi
    CH=`echo ${RADIO} | grep -o "[0-9]*"`
    echo $(iw dev | awk '/Interface/{print $2}' | grep ${CH}) > /tmp/config-software/dev
    echo ${INTERVAL} > /tmp/config-software/interval
    echo ${RADIO} > /tmp/config-software/radio
    echo ${FB_BAND} > /tmp/config-software/fb_band
    echo ${FB_CHANNEL} > /tmp/config-software/fb_channel
    logger "ZZDFS: Start"
    sed -i "/zzdfs.sh/d" /etc/crontabs/root
    echo "*/${INTERVAL} * * * * sh /etc/config-software/zzdfs.sh # ZZDFS" >> /etc/crontabs/root
    service cron restart
    exit 0
}
restart() {
    exit 0
}
stop() {
    logger "ZZDFS: Stop"
    sed -i "/zzdfs.sh/d" /etc/crontabs/root
    service cron restart
    rm -rf /tmp/config-software
    exit 0
}
EOF
chmod +x /etc/init.d/zzdfs


mkdir -p /etc/config-software/
cat << "EOF" > /etc/config-software/zzdfs.sh
#! /bin/sh

read DEV < /tmp/config-software/dev
iwinfo ${DEV} info 2>&1 | grep -q 'No such wireless device'
if [ $? = 0 ]; then
    read RADIO < /tmp/config-software/radio
    WIFI=`uci get wireless.${RADIO}.disabled`
    if [ "${WIFI}" != 1 ]; then 
        logger "ZZDFS: ZZDFS_On"
        sed -i "/zzdfs.sh/d" /etc/crontabs/root
        /etc/init.d/cron restart
        read INTERVAL < /tmp/config-software/interval
        read FB_CHANNEL < /tmp/config-software/fb_channel
        read FB_BAND < /tmp/config-software/fb_band
        CHANNEL=$(uci get wireless.${RADIO}.channel | tee /tmp/config-software/channel)
        HTMODE=$(uci get wireless.${RADIO}.htmode | tee /tmp/config-software/htmode)
        MODE=`echo ${HTMODE} | grep -o "[A-Z]*"`
        uci set wireless.${RADIO}.channel=${FB_CHANNEL}
        uci set wireless.${RADIO}.htmode=${MODE}${FB_BAND}
        uci commit wireless
        wifi reload ${RADIO}
        i2cset -y 1 0x15 0x00 0xe0
        sleep 30m
        logger "ZZDFS: ZZDFS_Off"
        uci set wireless.${RADIO}.channel=${CHANNEL}
        uci set wireless.${RADIO}.htmode=${HTMODE}
        uci commit wireless
        wifi reload  ${RADIO}
        sleep 1m 10s
        echo "*/${INTERVAL} * * * * sh /etc/config-software/zzdfs.sh # ZZDFS" >> /etc/crontabs/root
        service cron restart
        service led_p_new start
    else
        logger "ZZDFS: ${RADIO}_Disable"
    fi
fi    
EOF


cat <<"EOF" > /usr/bin/zzdfst
#! /bin/sh
read INTERVAL < /tmp/config-software/interval
if [ -n "$1" ]; then
    logger "ZZDFS: Interval_Change"
	description_INTERVAL="$1"
	sed -i -e "s/INTERVAL=${INTERVAL}/INTERVAL=${description_INTERVAL}/g" /etc/init.d/zzdfs
    echo ${description_INTERVAL} > /tmp/config-software/interval
    sed -i "/zzdfs.sh/d" /etc/crontabs/root
    echo "*/${description_INTERVAL} * * * * sh /etc/config-software/zzdfs.sh # DFS ZZDFS" >> /etc/crontabs/root
    service cron restart
    echo " Set time: ${description_INTERVAL} min"
	exit 0
else
	while :
	do
        logger "ZZDFS: Interval_Change"
		echo -e " \033[1;37mInterval time setting\033[0;39m"
        echo -e " \033[1;37mNow Interval: ${INTERVAL} min\033[0;39m"
        read -p " Interval time change (y or q): " input_CHANGE
        if [ "${input_CHANGE}" = "q" ]; then
            exit 0
        fi
		read -p " Interval time (min): " input_INTERVAL
		read -p " Please select key [y or q]: " num
		case "${num}" in
		"y" ) sed -i -e "s/INTERVAL=${INTERVAL}/INTERVAL=${input_INTERVAL}/g" /etc/init.d/zzdfs
              echo ${input_INTERVAL} > /tmp/config-software/interval
              sed -i "/zzdfs.sh/d" /etc/crontabs/root
              echo "*/${input_INTERVAL} * * * * sh /etc/config-software/zzdfs.sh # ZZDFS" >> /etc/crontabs/root
              service cron restart
			  echo " Set time: ${input_INTERVAL} min"
		      exit 0 ;;
	    "q" ) exit 0 ;;
	    esac
    done
fi
EOF
chmod +x /usr/bin/zzdfst


cat <<"EOF" > /usr/bin/zzdfsl
#!/bin/sh
echo -e "\033[1;36mZZDFS\033[0;39m"
echo -e "\033[1;36mLOG ------------------------------------\033[0;39m"
echo -e "\033[1;37mLOG:\033[0;39m"
exec logread | grep "ZZDFS" | awk '{ print $1,$2,$3,$4,$5,$9 }' | tail -n 10
echo -e "\033[1;37mDISABLED:\033[0;39m"
exec logread | grep "DFS->disabled" | awk '{ print $1,$2,$3,$4,$5,$11 }' | tail -n 1
echo -e "\033[1;37mENABLED:\033[0;39m"
exec logread | grep "DFS->ENABLED" | awk '{ print $1,$2,$3,$4,$5,$11 }' | tail -n 1
echo -e "\033[1;36mINFORMATION ----------------------------\033[0;39m"
read INTERVAL < /tmp/config-software/interval
echo -e "\033[1;37mInterval: ${INTERVAL}min\033[0;39m"
read FB_BAND < /tmp/config-software/fb_band
read FB_CHANNEL < /tmp/config-software/fb_channel
read RADIO < /tmp/config-software/radio
HTMODE=$(uci get wireless.${RADIO}.htmode)
MODE=`echo ${HTMODE} | grep -o "[A-Z]*"`
read RADIO < /tmp/config-software/radio
CHANNEL=$(uci get wireless.${RADIO}.channel)
HTMODE=$(uci get wireless.${RADIO}.htmode)
WIFI=`uci get wireless.${RADIO}.disabled` 2>/dev/null
if [ "${WIFI}" != 1 ]; then
    echo -e "\033[1;37mWi-Fi 5G ${RADIO} ENABLE\033[0;39m"   
else
    echo -e "\033[1;37mWi-Fi 5G ${RADIO} DISABLE\033[0;39m"
fi
echo -e "\033[1;37mWi-Fi 5G Channel/ Htmode: ${CHANNEL}Ch/ ${HTMODE}\033[0;39m"
echo -e "\033[1;37mFALLBACK Channel/ Htmode: ${FB_CHANNEL}Ch/ ${MODE}${FB_BAND}\033[0;39m"
echo -e "\033[1;36m----------------------------------------\033[0;39m"
EOF
chmod +x /usr/bin/zzdfsl


service zzdfs enable
service zzdfs start

zzdfsl




モデムモジュール

モデム用LuCi

luci-app-3ginfo-lite
luci-app-modemband
uci-app-sms-tool-js
internet-detector-mod-modem-restart

キャリア基地局

キャリアバンド

  • NTTドコモ: 1,3,19,21,28
  • au (沖縄セルラー、UQ WiMAX含む): 1,11,18,26,28,41
  • ソフトバンク (旧ワイモバイル、WCP含む): 1,3,8,41 (※WCP)

キャリア基地局

  • cellmapper
    • 左サイドバーを展開 > Providerにjapanと入力 > 該当キャリア選択

設定

モデムモジュール設定

インストール

#! /bin/sh
grep -q IceG_repo /etc/opkg/customfeeds.conf || echo 'src/gz IceG_repo https://github.com/4IceG/Modem-extras/raw/main/myrepo' >> /etc/opkg/customfeeds.conf
wget https://github.com/4IceG/Modem-extras/raw/main/myrepo/IceG-repo.pub -O /tmp/IceG-repo.pub
opkg-key add /tmp/IceG-repo.pub
opkg update
opkg install kmod-usb-serial
opkg install kmod-usb-serial-option
opkg install kmod-usb-net-cdc-ether
opkg install kmod-usb-net-qmi-wwan
# opkg install kmod-usb-net-cdc-mbim # 排他利用
opkg install usbutils
opkg install qmi-utils
# opkg install mbim-utils
opkg install uqmi
# opkg install umbim
opkg install screen
# opkg install minicom
# opkg install picocom 
opkg install modemmanager
opkg install luci-proto-modemmanager
# opkg install luci-proto-qmi
# opkg install luci-proto-mbim
# opkg install usb-modeswitch
opkg install luci-app-3ginfo-lite
opkg install luci-app-modemband
opkg install sms-tool
opkg install luci-app-sms-tool	
opkg install luci-app-sms-tool-js
reboot

※luci-app-sms-toolがうまく入らない時はリムーブし再起動後入れなおす

  • カスタムフィード
    ※カスタムフィードに関し、配布元の構成変更が頻繁にある為、インストール出来ない事場合、適弁コマンドを修正下さい
    また依頼あれば対応します
#! /bin/sh
opkg update
mkdir -p /tmp/config-software
wget --no-check-certificate -O /tmp/config-software/pacage_list https://github.com/gSpotx2f/packages-openwrt/raw/master/current/
PACAGE_LIST=`cat  /tmp/config-software/pacage_list |sed -ne '/ <script type/,/<\/script>/p' |sed -e 's/<[^>]*>//g'`
INTERNET_DETECTOR=`echo ${PACAGE_LIST} | awk '{print substr($0,index($0,"current/internet-detector_") ,60)}' | awk '{ sub(".ipk.*$",""); print $0; }'`
wget --no-check-certificate -O /tmp/internet-detector_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/${INTERNET_DETECTOR}.ipk
opkg install /tmp/internet-detector_all.ipk
rm /tmp/internet-detector_all.ipk
INTERNET_DETECTER_A=`echo ${PACAGE_LIST} | awk '{print substr($0,index($0,"current/luci-app-internet-detector") ,60)}' | awk '{ sub(".ipk.*$",""); print $0; }'`
wget --no-check-certificate -O /tmp/luci-app-internet-detector_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/${INTERNET_DETECTER_A}.ipk
opkg install /tmp/luci-app-internet-detector_all.ipk
rm /tmp/luci-app-internet-detector_all.ipk
INTERNET_DETECTOR_MODEM=`echo ${PACAGE_LIST} | awk '{print substr($0,index($0,"current/internet-detector-mod-modem") ,65)}' | awk '{ sub(".ipk.*$",""); print $0; }'`
wget --no-check-certificate -O /tmp/internet-detector-mod-modem-restart_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/${INTERNET_DETECTOR_MODEM}.ipk
opkg install /tmp/internet-detector-mod-modem-restart_all.ipk
rm /tmp/internet-detector-mod-modem-restart_all.ipk
INTERNET_DETECTOR_EMAIL=`echo ${PACAGE_LIST} | awk '{print substr($0,index($0,"current/internet-detector-mod-email") ,60)}' | awk '{ sub(".ipk.*$",""); print $0; }'`
wget --no-check-certificate -O /tmp/internet-detector-mod-email_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/${INTERNET_DETECTOR_EMAIL}.ipk
opkg install /tmp/internet-detector-mod-email_all.ipk
rm /tmp/internet-detector-mod-email_all.ipk
/etc/init.d/internet-detector restart
/etc/init.d/internet-detector enable

デバイス

  • 検出
grep 1bc7 /sys/bus/usb/devices/*/idVendor
echo 1 > /sys/bus/usb/devices/2-1/bConfigurationValue
# echo "1bc7 1901" > /sys/bus/usb-serial/drivers/option1/new_id

  • 確認
lsusb && lsusb -t

lsusb.png

ls -l /dev/cdc-wdm0

  • リリース
    ※デバイス検出に失敗した時はリリースしてやり直す
echo -n "2-1" > /sys/bus/usb/drivers/usb/unbind

  • ネットワークインターフェイス制御チャンネル確認
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format

IPタイプ

  • 確認
qmicli --device=/dev/cdc-wdm0 --get-expected-data-format

  • IPタイプがRaw-IPではない場合
    ※Raw-IP を使用するように qmi_wwan ドライバーを変更
# ネットワーク インターフェイスを無効
ip link set dev wwan0 down
sleep 2
# Raw-IP サポートをトリガー
echo Y > /sys/class/net/wwan0/qmi/raw_ip
sleep 2
# ネットワーク インターフェイスを再度有効
ip link set dev wwan0 up

ATコマンド

  • 開始
AT
screen /dev/ttyUSB2 115200

screen :
開始: screen /dev/ttyUSB2 115200
終了: Ctrl+a k y
minicom:
開始: minicom -D /dev/ttyUSB2
終了: Ctrl+a q
picocom:
開始: picocom -b 115200 /dev/ttyUSB2
終了: Ctrl+a Ctrl+x

  • エコーバック有効化
    ※大文字入力
AT
ATE1

  • 各情報取得
AT
ATI

  • バージョン確認
AT
AT^VERSION?

  • USBタイプ確認
AT^USBTYPE?

モード

  • 確認
AT
AT^SETMODE?

Telit Ln940 (Foxconn T77W676):
 Normal Mode=0 (1bc7:1900) MBIM
 Extension Mode=1 (1bc7:1901) MBIM + Serial port
 Legacy Mode=2 (1bc7:1900) QMI + Serial port
HP Lt4220:
 Normal Mode=0 (03f0:0857) MBIM
 Extension Mode=1 (03f0:0a57) MBIM + Serial port
 Legacy Mode=2 (03f0:0857) QMI + Serial port

  • モード2変更 QMI + Serial port
AT
AT^SETMODE= 2

※モード変更した場合、デバイスの電源を入れなおす

  • キャリアデータ確認
    ※10秒以上かかる
AT+COPS=?

  • キャリアデータ設定 (docomo)
AT+COPS=0,2,"44010",7

au: AT+COPS=0,2,"44051",7
SoftBank: AT+COPS=0,2,"44020",7
Rakuten: AT+COPS=0,2,"44110",7
UQ: AT+COPS=0,2,"44110",7

  • 自局電話番号確認
AT+CNUM

  • ATコマンド終了
    Ctrl+a k y

プロファイル

  • 登録キャリアデータ確認
qmicli -d /dev/cdc-wdm0 --pdc-list-configs=software

  • 登録キャリアデータ変更 (docomo)
CARRIERDATA='F3D782~'
qmicli -p -d /dev/cdc-wdm0 --pdc-activate-config="software,${CARRIERDATA}"

  • 登録プロファイル確認
qmicli -d /dev/cdc-wdm0 --wds-get-profile-list=3gpp

  • プロファイル登録 (docomo)
qmicli -d /dev/cdc-wdm0 --wds-modify-profile=3gpp,1,apn=spmode.ne.jp,pdp-type=IPV4V6,auth=CHAP,username=spmode,password=spmode,no-roaming=yes

Rakuten: qmicli -d /dev/cdc-wdm0 --wds-modify-profile=3gpp,1,apn=rakuten.jp,pdp-type=IPV4V6,auth=CHAP,username=,password=,no-roaming=yes

UQ: qmicli -d /dev/cdc-wdm0 --wds-modify-profile=3gpp,1,apn=uqmobile.jp,pdp-type=IP,auth=CHAP,username=uq@uqmobile.jp,password=uq

削除 (リスト1): qmicli -d /dev/cdc-wdm0 --wds-delete-profile=3gpp,1
削除 (リスト2): qmicli -d /dev/cdc-wdm0 --wds-delete-profile=3gpp,2

reboot

インターフェース

参考:docomo

WWAN="lte"
ZOON_NO='1'
uci set network.lte=interface
uci set network.lte.proto='modemmanager'
uci set network.lte.device='/sys/devices/platform/soc/8af8800.usb3/8a00000.dwc3/xhci-uci set hcd.0.auto/usb2/2-1'
uci set network.${wwan}.apn='spmode.ne.jp'
uci set network.${wwan}.auth='chap'
uci set network.${wwan}.allowedmode='4g'
uci set network.${wwan}.username='spmode'
uci set network.${wwan}.password='spmode'
uci set network.${wwan}.iptype='ipv4v6'
uci set network.${wwan}.loglevel='ERR'
uci set network.${wwan}.auto='0' #ブート時に開始されていません
uci set network.lte.defaultroute='0'
uci del_list firewall.@zone[${ZOON_NO}].network='wwan'
uci add_list firewall.@zone[${ZOON_NO}].network='wwan'
uci commit network
uci commit firewall

# 3ginfo
uci set 3ginfo.@3ginfo[0]=3ginfo
uci set 3ginfo.@3ginfo[0].network='wwan'
uci set 3ginfo.@3ginfo[0].device='/dev/ttyUSB2'
uci commit 3ginfo

# modemband
MODEM_ID="1bc7:1900" #モード1の場合: 1bc71901
uci set modemband.@modemband[0]=modemband
uci set modemband.@modemband[0].iface='wwan'
uci set modemband.@modemband[0].modemid=${MODEM_ID} #モデムID
uci set modemband.@modemband[0].set_port='/dev/ttyUSB2'
uci commit modemband

# sms_tool
PNUMBER='81'
uci set sms_tool_js.@sms_tool_js[0]=sms_tool_js
uci set sms_tool_js.@sms_tool_js[0].pnumber=${PNUMBER}
uci set sms_tool_js.@sms_tool_js[0].readport='/dev/ttyUSB2'
uci set sms_tool_js.@sms_tool_js[0].sendport='/dev/ttyUSB2'
uci set sms_tool_js.@sms_tool_js[0].ussdport='/dev/ttyUSB2'
uci set sms_tool_js.@sms_tool_js[0].atport='/dev/ttyUSB2'
uci commit sms_tool_js

 reboot
 
  • 接続確認
ifconfig wwan0

QMI

  • Device IDs retrieved
qmicli -d /dev/cdc-wdm0 -p --dms-get-ids

qmicli -d /dev/cdc-wdm0 --nas-get-system-selection-preference

  • card status
qmicli -d /dev/cdc-wdm0 --device-open-proxy --uim-get-card-status

qmicli -d /dev/cdc-wdm0 --nas-get-rf-band-info

qmicli -d /dev/cdc-wdm0 --wds-get-current-settings

qmicli -d /dev/cdc-wdm0 --wds-get-packet-statistics

MBIM

  • 使用可能なすべてのオプション
mbimcli --help-all

  • バージョン確認
mbimcli --version

  • デバイスの機能と情報 (ファームウェアと IMEI コードなど)
mbimcli --device=/dev/cdc-wdm0 --device-open-proxy --query-device-caps

  • SIM カード情報
mbimcli -d /dev/cdc-wdm0 -p --query-subscriber-ready-status

  • ネットワーク登録状態
mbimcli -d /dev/cdc-wdm0 -p --query-registration-state

  • 接続 IP 情報
mbimcli -d /dev/cdc-wdm0 -p --query-ip-configuration=0

確認

  • SMS
sms_tool -d /dev/ttyUSB2 -j recv

  • PING IPV4
ping -4 -I wwan0 one.one.one.one

  • PING IPV6
ping -6 -I wwan0 one.one.one.one

トラブル

sed -i "/exit 0/d" /etc/rc.local
echo "/sbin/uqmi -d /dev/cdc-wdm0 --set-device-operating-mode offline" >> /etc/rc.local 
echo "/sbin/uqmi -d /dev/cdc-wdm0 --set-device-operating-mode reset" >> /etc/rc.local 
echo "/bin/sleep 20" >> /etc/rc.local 
echo "/sbin/uqmi -d /dev/cdc-wdm0 --set-device-operating-mode online" >> /etc/rc.local 
echo "/sbin/uqmi -d /dev/cdc-wdm0 --set-autoconnect enabled" >> /etc/rc.local 
echo "/sbin/uqmi -d /dev/cdc-wdm0 --network-register" >> /etc/rc.local 
echo "exit 0" >> /etc/rc.local 

  • opkg updateエラー対策
# wget-nossl削除
opkg remove wget-nossl


Interface
 MODEMMANAGER
modemmanager.png

3ginfo-lite
3ginfo1.png
LTE Bands Configuration
band.png
ブロードバンドスピードテスト
wwan3.png

デバイス更新

ダウンロードサイト

SSH
wget /tmp/openwrt-23.05.2-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin https://downloads.openwrt.org/releases/23.05.2/targets/ipq40xx/generic/openwrt-23.05.2-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin
sysupgrade -v /tmp/openwrt-23.05.2-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin

Attended Sysupgrade

opkg update
luci-app-attendedsysupgrade

リカバリ

OW_sony_ncp-hg100_helios

#!/bin/sh
echo -en '\x00' | dd of=/dev/mmcblk0p2 bs=1 count=1 seek=28 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p2 bs=1 count=1 seek=48 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p2 bs=1 count=1 seek=68 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p2 bs=1 count=1 seek=88 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p2 bs=1 count=1 seek=108 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p7 bs=1 count=1 seek=28 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p7 bs=1 count=1 seek=48 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p7 bs=1 count=1 seek=68 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p7 bs=1 count=1 seek=88 conv=notrunc
echo -en '\x00' | dd of=/dev/mmcblk0p7 bs=1 count=1 seek=108 conv=notrunc

参考

USB2.0化

NCP-HG100 LTEモデムクラッシュのソフト的な対処

echo -n "2-1" > /sys/bus/usb/drivers/usb/unbind
devmem 0x08a0c2c0 32 0x830E0002

URoad-Home2+にLTEモジュール(T77W676)を搭載してみた

T77W676の流用でこんな面白い事をしている方が居ました

U-BOOT

U-BOOT確認

printenv

初期値

set bootcmd bootipq
set ipaddr 192.168.132.1
set serverip 192.168.132.100
saveenv

消去

setenv bootargs 
setenv bootcmd
setenv ipaddr
setenv serverip
setenv bootfile
saveenv

ブートローダー (U-Boot) 仕様
U-BOOTユーザーズマニュアル
U-Boot コマンドの使用
NCP-HG100 調査中

あとがき

先輩方の記事で十分事足りるので、正直だいぶ手抜きな備忘録となった
未使用品も格安で手に入る
シリアル接続は初心者の方には少し敷居が高いと感じるかもしれませんが、
初めてチャレンジしたが、一度やってみると思った程難しくは無かった

安定稼働中

参考資料(感謝:relaxed:

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?