編集中
Japanese notation
はじめに
PowerShellでSSHアクセス
-
PowerShellの開始 (キー入力):
Win
+x
>a
>はい
※Windows7以降標準搭載
ssh root@192.168.1.1
ssh root@192.168.1.1のショートカット作成(デスクトップ)
$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ログイン出来ない場合
known_hostsクリア
-
C:\Users\yourusername\.ssh\known_hosts
※Windows隠しファイル
Clear-Content .ssh\known_hosts -Force
OpenSSHのインストール
※Windows 10 Fall Creators Update(1709)以降標準搭載
- 機能の確認
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
- 機能のインストール
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
ファームウェアについて
デバイスについて
NCP-HG100/Cellular
ハードウェア仕様
- 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(変換アダプター)
テストワイヤー
クライアント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、クロス接続
※デバイスはまだ通電させない
- デバイスとクライアントPCにシリアル接続
※テストワイヤーは先にデバイスへ挿す事
シリアル設定
- TeraTerm起動
- COMポート:ポート(COMとLPT)
確認した値
- スピード:
115200
- COMポート:ポート(COMとLPT)
シリアル通信
- デバイス通電(アダプター接続)
- 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を格納したディレクトリ
- TFTPサーバ
- TFTPタブ
U-Boot
tftpboot && bootm
- 自動でリブート
- Serva64終了
TCP/IP通信
- デバイスをインターネット接続しているルーター等へ接続(WANポート)
- クライアントPCのIPアドレス変更
DHCP
- TeraTermをIP接続で新たに起動
- TCP/IP ホスト
192.168.1.1
- ユーザー名
root
- ユーザー名
- TCP/IP ホスト
スナップショット
wget --no-check-certificate -O /tmp/openwrt-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin https://taiha.net/jenkins/job/OpenWrt-master-Sony-NCP-HG100/lastBuild/artifact/bin/targets/ipq40xx/generic/openwrt-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin
sysupgrade /tmp/openwrt-ipq40xx-generic-sony_ncp-hg100-cellular-squashfs-sysupgrade.bin
- 自動でリブート
※SNAPSHOTはLuCiが入っていない
リリースビルド
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 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と入力 > 該当キャリア選択
設定
モデムモジュール設定
- HP LT4220のSetmode0スタックの解決
- LN940A9シリーズマニュアル
- Telit LN940シリーズセルラーモジュールの初期診断データを収集するにはどうすればよいですか?
- collectd-Telit-LN940-wwan
- Linux で libmbim とドライバー cdc_mbim を使用して、MBIM インターフェイス経由で簡単なデータ接続をセットアップするにはどうすればよいですか?
インストール
※カスタムフィードに関し、配布元の構成変更が頻繁にある為、インストール出来ない事場合、適弁コマンドを修正下さい
また依頼あれば対応します
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
mkdir -p /etc/config-software
# custom feed (log viewer, cpu status, cpu perf, temp status, Internet detector, disk info)
wget --no-check-certificate -O /etc/config-software/pacage_list https://github.com/gSpotx2f/packages-openwrt/raw/master/current/
PACAGE_LIST=`cat /etc/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_1") ,39)}'`
wget --no-check-certificate -O /tmp/internet-detector_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/${INTERNET_DETECTOR}
opkg install /tmp/internet-detector_all.ipk
rm /tmp/internet-detector_all.ipk
/etc/init.d/internet-detector enable
LUCI_APP_INTERNET_DETECTER_V=`echo ${PACAGE_LIST} | awk '{print substr($0,index($0,"current/luci-app-internet-detector") ,48)}'`
wget --no-check-certificate -O /tmp/luci-app-internet-detector_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/${LUCI_APP_INTERNET_DETECTER_V}
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") ,49)}'`
wget --no-check-certificate -O /tmp/internet-detector-mod-modem-restart_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/${INTERNET_DETECTOR_MODEM}
opkg install /tmp/internet-detector-mod-modem-restart_all.ipk
rm /tmp/internet-detector-mod-modem-restart_all.ipk
/etc/init.d/internet-detector restart
reboot
※luci-app-sms-toolがうまく入らない時はリムーブし再起動後入れなおす
デバイス
- 検出
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
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コマンド
- 開始
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
- エコーバック有効化
※大文字入力
ATE1
- 各情報取得
ATI
- バージョン確認
AT^VERSION?
- USBタイプ確認
AT^USBTYPE?
モード
- 確認
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^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
トラブル
- 要LTE/ 4G専用アンテナ (強度が低いと認証せず)
- wwanインターフェイスを再作成
- スタートアップモデムリセット
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
デバイス更新
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
opkg install auc
純正ファームウェアリカバリ
以下参考
#!/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
setenv bootargs
saveenv
トラブル
デバイスは OpenWRT を USB から起動しますが、eMMC からは起動しません / ネットワーク インターフェイスが起動しません
dd if=/dev/zero bs=512 seek=7552991 of=/dev/mmcblk0 count=33
dd if=/dev/zero bs=1M of=/dev/mmcblk0
参考
URoad-Home2+にLTEモジュール(T77W676)を搭載してみた
T77W676の流用でこんな面白い事をしている方が居ました
あとがき
先輩方の記事で十分事足りるので、正直だいぶ手抜きな備忘録となった
未使用品も格安で手に入る
シリアル接続は初心者の方には少し敷居が高いと感じるかもしれませんが、
初めてチャレンジしたが、一度やってみると思った程難しくは無かった
安定稼働中