Changes between Version 51 and Version 52 of expansion/gw16167
- Timestamp:
- 07/29/2026 04:00:16 PM (3 hours ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
expansion/gw16167
v51 v52 8 8 The GW16170 M.2 E-Key Sub-1GHz 802.11ah High-Power radio uses the !MorseMicro MM8108-M20 chip which offers improvements in power (up to 28.5dBm). 9 9 10 '''* NOTE: The GW16167 has been tested and is supported in software when using a Gateworks Single Board Computer'''11 12 '''* NOTE: The GW16167 requires an M.2 E-Key socket with USB 2.0. This may require an adapter for the Venice SBCs such as the [https://trac.gateworks.com/wiki/expansion/gw1614xminipciem2adapter#GW16151E-Key-USB2.0PCIe GW16151]'''13 14 '''* NOTE: The GW16167 requires an updated driver and driver configuration present in the latest Gateworks pre-built Ubuntu and OpenWrt images - please update your firmware to ensure you have the proper support'''10 '''* NOTE: The GW16167/GW16170 has been tested and is supported in software when using a Gateworks Single Board Computer''' 11 12 '''* NOTE: The GW16167/GW16170 requires an M.2 E-Key socket with USB 2.0. This may require an adapter for the Venice SBCs such as the [https://trac.gateworks.com/wiki/expansion/gw1614xminipciem2adapter#GW16151E-Key-USB2.0PCIe GW16151]''' 13 14 '''* NOTE: The GW16167/GW16170 requires an updated driver and driver configuration present in the latest Gateworks pre-built Ubuntu and OpenWrt images - please update your firmware to ensure you have the proper support''' 15 15 16 16 IEEE 802.11ah is a wireless networking protocol published in 2017 called Wi-Fi !HaLow as an amendment of the IEEE 802.11-2007 wireless networking standard. It uses 900 MHz license-exempt bands to provide extended-range Wi-Fi networks, compared to conventional Wi-Fi networks operating in the 2.4 GHz, 5 GHz and 6 GHz bands. It also benefits from lower energy consumption, allowing the creation of large groups of stations or sensors that cooperate to share signals, supporting the concept of the Internet of things (IoT). The protocol's low power consumption competes with Bluetooth, !LoRa, and Zigbee, and has the added benefit of higher data rates and wider coverage range. … … 115 115 == Software 116 116 117 ''' Note: The GW16167 is designed to be used with a Gateworks Single Board Computer. ''' When using the device on other platforms, Gateworks has limited knowledge and the support offered is being able to point to the Gateworks driver github link here: https://github.com/Gateworks/morse_driver (use the 1.16.4-gateworks branch)117 ''' Note: The GW16167/GW16170 is designed to be used with a Gateworks Single Board Computer. ''' When using the device on other platforms, Gateworks has limited knowledge and you must visit the [https://community.morsemicro.com/ MorseMicro Community Forum] for support. 118 118 119 119 ==== What is s1g ? … … 127 127 128 128 === Driver 129 The MM8108 on the GW16167 is supported by the open-source out-of-tree Linux kernel driver from !MorseMicro. This driver is included in the Gateworks Ubuntu pre-built images and the below instructions are only for if building is needed. Note, this pulls from multiple repos, including the Gateworks Github where the 1.16.4-gateworks branch should be used. 130 129 The MM8108 on the GW16167/GW16170 is supported by the open-source out-of-tree Linux kernel driver from !MorseMicro. This driver is included in the Gateworks Ubuntu and OpenWrt pre-built images and the below instructions are only for if building is needed. Note, this pulls from multiple repos. 131 130 132 131 Building with the Gateworks Venice BSP: … … 134 133 1. Add a 'custom_kernel_morsemicro' script 135 134 {{{#!bash 136 cat <<\EOF > custom_kernel_m orsemicro135 cat <<\EOF > custom_kernel_mm8108 137 136 #!/bin/bash -e 138 137 139 DIR=$PWD/mm610x 138 # mm8108 driver for USB, morse_cli, hostapd_s1g, wpa_supplicant_s1g 139 MORSE_VER=mm8108-2.0.0 140 141 DIR=$PWD/morse/$MORSE_VER 140 142 OUTDIR=$DIR/out 141 143 DESTDIR=$2 142 144 143 MORSE_VER=1.16.4144 145 LIBNL_VER=libnl3_11_0 145 146 OPENSSL_VER=openssl-3.5.0 … … 147 148 COUNTRY=US 148 149 mkdir -p $DESTDIR/usr/sbin 149 mkdir -p $DESTDIR/etc/modprobe.d150 150 mkdir -p $DIR 151 151 cd $DIR 152 152 153 echo "Checking out code..." 153 154 # get repos of what we will build 154 [ -d morse_driver ] || git clone --recurse-submodules https://github.com/Gateworks/morse_driver.git -b 1.16.4-gateworks 155 [ -d morse-firmware ] || git clone https://github.com/MorseMicro/morse-firmware.git -b 1.16 155 [ -d morse_driver ] || git clone --recurse-submodules https://github.com/MorseMicro/morse_driver.git -b $MORSE_VER 156 #[ -d morse_driver ] || git clone --recurse-submodules http://http://softdev/cgit/cgit.cgi/morse_driver -b ${MORSE_VER}-gateworks 157 [ -d morse-firmware ] || git clone https://github.com/MorseMicro/morse-firmware.git -b $MORSE_VER 156 158 [ -d libnl ] || git clone https://github.com/thom311/libnl.git -b $LIBNL_VER 157 159 [ -d openssl ] || git clone https://github.com/openssl/openssl.git -b $OPENSSL_VER … … 162 164 echo "Building morse_driver..." 163 165 ARGS="KERNEL_SRC=$1 \ 164 CONFIG_MORSE_SDIO=y \ 165 CONFIG_MORSE_USB=y \166 MORSE_VERSION="${MORSE_VER}-gateworks-g$(git -C morse_driver rev-parse --verify HEAD 2>/dev/null | cut -c1-12)" 167 CONFIG_MORSE_USB=y \ 166 168 CONFIG_MORSE_USER_ACCESS=y \ 167 169 CONFIG_MORSE_VENDOR_COMMAND=y \ 168 CONFIG_MORSE_SDIO_ALIGNMENT=4 \169 170 CONFIG_MORSE_POWERSAVE_MODE=0 \ 170 171 CONFIG_MORSE_COUNTRY=$COUNTRY \ … … 172 173 CONFIG_MORSE_MONITOR=y \ 173 174 CONFIG_MORSE_DEBUGFS=y \ 174 CONFIG_WLAN_VENDOR_MORSE=m" 175 make -C morse_driver $ARGS 176 make -C morse_driver $ARGS INSTALL_MOD_PATH=$2 modules_install 175 CONFIG_WLAN_VENDOR_MORSE=m" \ 176 KCFLAGS="-Wno-error=implicit-function-declaration" 177 make -j$(nproc) -C morse_driver $ARGS clean 178 make -j$(nproc) -C morse_driver $ARGS 179 make -j$(nproc) -C morse_driver $ARGS INSTALL_MOD_PATH=$2 modules_install 180 # module parameters 181 mkdir -p $DESTDIR/etc/modprobe.d 182 echo "options morse country=$COUNTRY" > $DESTDIR/etc/modprobe.d/morse.conf 177 183 178 184 # firmware: 179 # - mm610x firmware180 # - board configuration file (BCF) that provides driver with calibration constants and chip gpio config181 185 echo "Copying firmware..." 182 186 mkdir -p $2/lib/firmware/morse 183 # GW16159 sdmah/sdio/mm6108 184 cp morse-firmware/firmware/mm6108.bin $2/lib/firmware/morse 185 wget http://dev.gateworks.com/firmware/gw16159/$MORSE_VER/LICENSE -O $2/lib/firmware/morse/LICENSE 186 wget "http://dev.gateworks.com/firmware/gw16159/$MORSE_VER/bcf_default.bin" -O $2/lib/firmware/morse/bcf_default.bin 187 cp morse-firmware/firmware/mm8108b2-rl.bin $2/lib/firmware/morse 188 # GW16170 mm8108/usb 189 wget https://dev.gateworks.com/firmware/gw16170/mm8108-2.0.0/bcf_mm8108_m20_us.bin -O $2/lib/firmware/morse/bcf_boardtype_0808.bin 187 190 # GW16167 mm8108/usb 188 cp morse-firmware/firmware/mm8108b2-rl.bin $2/lib/firmware/morse189 191 cp -P morse-firmware/bcf/morsemicro/* $2/lib/firmware/morse 190 192 191 193 [ -d $OUTDIR/include/libnl3 ] || { 192 echo "Building libnl..."194 echo "Building libnl..." 193 195 cd libnl 194 196 ./autogen.sh 195 197 ./configure --host=$ARCH CC=${CROSS_COMPILE}gcc --prefix=$OUTDIR --disable-shared 196 198 make clean 197 make -j$(nproc)199 make -j$(nproc) 198 200 make install 199 201 cd .. … … 201 203 202 204 [ -d $OUTDIR/include/openssl ] || { 203 echo "Building openssl..."205 echo "Building openssl..." 204 206 cd openssl 205 207 ./Configure linux-generic32 no-shared no-dso no-async -DL_ENDIAN --prefix=$OUTDIR --openssldir=$OUTDIR 206 208 # needed no-async to build latest openssl against uclib 207 make -j$(nproc) \209 make -j$(nproc) \ 208 210 CC=${CROSS_COMPILE}gcc \ 209 211 RANLIB=${CROSS_COMPILE}ranlib \ … … 218 220 # libusb 219 221 [ -d $OUTDIR/include/libusb ] || { 220 echo "Building libusb..."221 cd libusb222 echo "Building libusb..." 223 cd libusb 222 224 ./autogen.sh --disable-udev 223 225 ./configure --host=$ARCH CC=${CROSS_COMPILE}gcc --prefix=$OUTDIR --disable-shared --enable-examples-build --disable-log --disable-udev 224 make -j$(nproc) \225 CFLAGS="-Wunused-parameter" \226 make -j$(nproc) \ 227 CFLAGS="-Wunused-parameter" \ 226 228 CC=${CROSS_COMPILE}gcc \ 227 229 RANLIB=${CROSS_COMPILE}ranlib \ … … 229 231 MAKEDEPPROG=${CROSS_COMPILE}gcc \ 230 232 PROCESSOR=ARM 231 make install232 cd ..233 make install 234 cd .. 233 235 } 234 236 235 237 # wpa_supplicant 236 238 [ -r hostap/wpa_supplicant/wpa_supplicant_s1g ] || { 237 echo "Building wpa_supplicant_s1g..." 238 cp hostap/wpa_supplicant/defconfig hostap/wpa_supplicant/.config 239 disables="CONFIG_BGSCAN_SIMPLE" 240 enables="CONFIG_DRIVER_NL80211_QCA \ 241 CONFIG_WPS_NFC CONFIG_SAE_PK \ 242 CONFIG_EAP_MD5 \ 243 CONFIG_EAP_MSCHAPV2 \ 244 CONFIG_EAP_TLS \ 245 CONFIG_EAP_TLSV1_3 \ 246 CONFIG_EAP_PEAP \ 247 CONFIG_EAP_TTLS \ 248 CONFIG_EAP_GTC \ 249 CONFIG_EAP_PWD \ 250 CONFIG_WPS_ER \ 251 CONFIG_WPS_REG_DISABLE_OPEN \ 252 CONFIG_WPS_NFC \ 253 CONFIG_SAE_PK \ 254 CONFIG_DEBUG_SYSLOG_FACILITY \ 255 CONFIG_MESH \ 256 CONFIG_BGSCAN_SIMPLE \ 257 " 258 for opt in $enables; do 259 sed -i -e "s/^#$opt=y/$opt=y/" hostap/wpa_supplicant/.config 260 done 261 for opt in $disables; do 262 sed -i -e "s/^$opt=y/#$opt=y/" hostap/wpa_supplicant/.config 263 done 264 make -C hostap/wpa_supplicant/ clean 265 PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \ 266 CFLAGS="-D_GNU_SOURCE -I $OUTDIR/include/libnl3 -I $OUTDIR/include -Wno-deprecated-declarations" \ 267 LDFLAGS="-L $OUTDIR/lib/ --static" \ 268 DESTDIR="$OUTDIR/sbin" \ 269 BINDIR=/usr/sbin \ 270 LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \ 271 CC=${CROSS_COMPILE}gcc \ 272 make -j$(nproc) -C hostap/wpa_supplicant/ 239 echo "Building wpa_supplicant_s1g..." 240 cp hostap/wpa_supplicant/defconfig hostap/wpa_supplicant/.config 241 disables="CONFIG_BGSCAN_SIMPLE" 242 enables="CONFIG_DRIVER_NL80211_QCA \ 243 CONFIG_WPS_NFC CONFIG_SAE_PK \ 244 CONFIG_EAP_MD5 \ 245 CONFIG_EAP_MSCHAPV2 \ 246 CONFIG_EAP_TLS \ 247 CONFIG_EAP_TLSV1_3 \ 248 CONFIG_EAP_PEAP \ 249 CONFIG_EAP_TTLS \ 250 CONFIG_EAP_GTC \ 251 CONFIG_EAP_PWD \ 252 CONFIG_WPS_ER \ 253 CONFIG_WPS_REG_DISABLE_OPEN \ 254 CONFIG_WPS_NFC \ 255 CONFIG_SAE_PK \ 256 CONFIG_DEBUG_SYSLOG_FACILITY \ 257 CONFIG_MESH \ 258 CONFIG_BGSCAN_SIMPLE \ 259 " 260 for opt in $enables; do 261 sed -i -e "s/^#$opt=y/$opt=y/" hostap/wpa_supplicant/.config 262 done 263 for opt in $disables; do 264 sed -i -e "s/^$opt=y/#$opt=y/" hostap/wpa_supplicant/.config 265 done 266 make -C hostap/wpa_supplicant/ clean 267 PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \ 268 CFLAGS="-D_GNU_SOURCE \ 269 -Dexplicit_bzero\(p,l\)=memset\(\(p\),0,\(l\)\) \ 270 -I $PWD/morse_cli \ 271 -I $OUTDIR/include/libnl3 \ 272 -I $OUTDIR/include \ 273 -Wno-deprecated-declarations \ 274 -Wno-error=implicit-function-declaration" \ 275 LDFLAGS="-L $OUTDIR/lib/ --static" \ 276 DESTDIR="$OUTDIR/sbin" \ 277 BINDIR=/usr/sbin \ 278 LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \ 279 CC=${CROSS_COMPILE}gcc \ 280 make -j$(nproc) -C hostap/wpa_supplicant/ 273 281 } 274 282 cp hostap/wpa_supplicant/{wpa_supplicant_s1g,wpa_cli_s1g,wpa_passphrase_s1g} $DESTDIR/usr/sbin/ … … 276 284 # hostapd 277 285 [ -r hostap/hostapd/hostapd_s1g ] || { 278 echo "Building hostapd_s1g..." 279 cp hostap/hostapd/defconfig hostap/hostapd/.config 280 disables="" 281 enables="CONFIG_DRIVER_NL80211_QCA \ 282 CONFIG_EAP \ 283 CONFIG_EAP_MD5 \ 284 CONFIG_EAP_EKE \ 285 CONFIG_EAP_MSCHAPV2 \ 286 CONFIG_EAP_PEAP \ 287 CONFIG_EAP_TLS \ 288 CONFIG_EAP_TTLS \ 289 CONFIG_EAP_GTC \ 290 CONFIG_EAP_SIM \ 291 CONFIG_EAP_AKA \ 292 CONFIG_EAP_AKA_PRIME \ 293 CONFIG_EAP_PAX \ 294 CONFIG_EAP_PSK \ 295 CONFIG_EAP_PWD \ 296 CONFIG_EAP_SAKE \ 297 CONFIG_EAP_GPSK \ 298 CONFIG_EAP_GPSK_SHA256 \ 299 CONFIG_EAP_FAST \ 300 CONFIG_EAP_TEAP \ 301 CONFIG_WPS \ 302 CONFIG_WPS_UPNP \ 303 CONFIG_WPS_NFC \ 304 CONFIG_EAP_IKEV2 \ 305 CONFIG_EAP_TNC \ 306 CONFIG_RADIUS_SERVER \ 307 CONFIG_SAE \ 308 CONFIG_SAE_PK \ 309 CONFIG_TLSV11 \ 310 CONFIG_TLSV12 \ 311 " 312 for opt in $enables; do 313 sed -i -e "s/^#$opt=y/$opt=y/" hostap/hostapd/.config 314 done 315 for opt in $disables; do 316 sed -i -e "s/^$opt=y/#$opt=y/" hostap/hostapd/.config 317 done 318 make -C hostap/hostapd/ clean 319 PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \ 320 CFLAGS="-D_GNU_SOURCE -I $OUTDIR/include/libnl3 -I $OUTDIR/include -Wno-deprecated-declarations" \ 321 LDFLAGS="-L $OUTDIR/lib/ --static" \ 322 DESTDIR="$OUTDIR/sbin" \ 323 BINDIR=/usr/sbin \ 324 LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \ 325 CC=${CROSS_COMPILE}gcc \ 326 make -j$(nproc) -C hostap/hostapd/ 286 echo "Building hostapd_s1g..." 287 cp hostap/hostapd/defconfig hostap/hostapd/.config 288 disables="" 289 enables="CONFIG_DRIVER_NL80211_QCA \ 290 CONFIG_EAP \ 291 CONFIG_EAP_MD5 \ 292 CONFIG_EAP_EKE \ 293 CONFIG_EAP_MSCHAPV2 \ 294 CONFIG_EAP_PEAP \ 295 CONFIG_EAP_TLS \ 296 CONFIG_EAP_TTLS \ 297 CONFIG_EAP_GTC \ 298 CONFIG_EAP_SIM \ 299 CONFIG_EAP_AKA \ 300 CONFIG_EAP_AKA_PRIME \ 301 CONFIG_EAP_PAX \ 302 CONFIG_EAP_PSK \ 303 CONFIG_EAP_PWD \ 304 CONFIG_EAP_SAKE \ 305 CONFIG_EAP_GPSK \ 306 CONFIG_EAP_GPSK_SHA256 \ 307 CONFIG_EAP_FAST \ 308 CONFIG_EAP_TEAP \ 309 CONFIG_WPS \ 310 CONFIG_WPS_UPNP \ 311 CONFIG_WPS_NFC \ 312 CONFIG_EAP_IKEV2 \ 313 CONFIG_EAP_TNC \ 314 CONFIG_RADIUS_SERVER \ 315 CONFIG_SAE \ 316 CONFIG_SAE_PK \ 317 CONFIG_TLSV11 \ 318 CONFIG_TLSV12 \ 319 " 320 for opt in $enables; do 321 sed -i -e "s/^#$opt=y/$opt=y/" hostap/hostapd/.config 322 done 323 for opt in $disables; do 324 sed -i -e "s/^$opt=y/#$opt=y/" hostap/hostapd/.config 325 done 326 make -C hostap/hostapd/ clean 327 PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \ 328 CFLAGS="-D_GNU_SOURCE \ 329 -Dexplicit_bzero\(p,l\)=memset\(\(p\),0,\(l\)\) \ 330 -I $PWD/morse_cli \ 331 -I $OUTDIR/include/libnl3 \ 332 -I $OUTDIR/include \ 333 -Wno-deprecated-declarations \ 334 -Wno-error=implicit-function-declaration" \ 335 LDFLAGS="-L $OUTDIR/lib/ --static" \ 336 DESTDIR="$OUTDIR/sbin" \ 337 BINDIR=/usr/sbin \ 338 LIBS="-lnl-3 -lm -lpthread -lcrypto -lssl" \ 339 CC=${CROSS_COMPILE}gcc \ 340 make -j$(nproc) -C hostap/hostapd/ 327 341 } 328 342 cp hostap/hostapd/{hostapd_s1g,hostapd_cli_s1g} $DESTDIR/usr/sbin/ … … 330 344 # morse_cli 331 345 [ -r morse_cli/morse_cli.bin ] || { 332 echo "Building morse_cli..."333 make -C morse_cli clean334 PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \335 CFLAGS="-I $OUTDIR/include/libnl3 -I $OUTDIR/include/libusb-1.0 -I $OUTDIR/include" \336 LDFLAGS="-L $OUTDIR/lib/ --static" \337 CC=${CROSS_COMPILE}gcc \338 make \339 CONFIG_MORSE_TRANS_NL80211=1 \340 CONFIG_MORSE_STATIC=1 \341 -j$(nproc) -C morse_cli346 echo "Building morse_cli..." 347 make -C morse_cli clean 348 PKG_CONFIG_PATH="$OUTDIR/lib/pkgconfig" \ 349 CFLAGS="-I $OUTDIR/include/libnl3 -I $OUTDIR/include/libusb-1.0 -I $OUTDIR/include" \ 350 LDFLAGS="-L $OUTDIR/lib/ --static" \ 351 CC=${CROSS_COMPILE}gcc \ 352 make \ 353 CONFIG_MORSE_TRANS_NL80211=1 \ 354 CONFIG_MORSE_STATIC=1 \ 355 -j$(nproc) -C morse_cli 342 356 } 343 357 cp morse_cli/morse_cli $DESTDIR/usr/sbin/ 344 345 # module parameters346 echo "options morse country=$COUNTRY enable_ext_xtal_init=1" > $DESTDIR/etc/modprobe.d/morse.conf347 348 358 EOF 349 chmod +x custom_kernel_m orsemicro359 chmod +x custom_kernel_mm8108 350 360 }}} 351 361 3. rebuild the ubuntu-image: … … 356 366 357 367 Module Parameters: 358 - There are a number of module parameters supported by morse.ko however the required ones for the GW16167 are:368 - There are a number of module parameters supported by morse.ko however the required ones for the GW16167/GW16170 are: 359 369 * country=US 360 370 - These can be placed in /etc/modprobe..d such as: … … 362 372 echo "options morse country=US" > /etc/modprobe.d/morse.conf 363 373 }}} 364 - Note that our build example and pre-built BSP's also add a 'enable_ext_xtal_init=1' which is not needed for the USB based GW16167 but is needed for the SDIO based GW16159 as it has an external XTAL; we add it so that both cards are supported365 374 366 375 Console Messages: 367 376 {{{#!bash 368 # lsusb | grep Morse 369 Bus 003 Device 003: ID 325b:8100 Morse Micro MM81xx Wi-Fi HaLow 802.11ah Transceiver # dmesg | grep morse 370 # dmesg | grep morse 371 [ 8.298087] morse micro driver registration. Version v1.16.4-gdec5bc215b88 372 [ 8.298612] morse_usb 3-1.2:1.0: USB Morse device now attached to Morse driver (minor=-1) 373 [ 8.312450] morse_usb 3-1.2:1.0: Loaded firmware from morse/mm8108b2-rl.bin, size 456924, crc32 0xe4799c8d 374 [ 8.313800] morse_usb 3-1.2:1.0: Loaded BCF from morse/bcf_boardtype_0807.bin, size 2081, crc32 0xa80ae47b 375 [ 9.451353] morse_usb 3-1.2:1.0: morse_mac_init: WARNING enable_ps modparam must only be used for testing - use iw set power_save 376 [ 9.524340] morse_usb 3-1.2:1.0: Driver loaded with kernel module parameters 377 [ 9.524372] morse_usb 3-1.2:1.0: slow_clock_mode : 0 378 [ 9.524407] morse_usb 3-1.2:1.0: enable_1mhz_probes : Y 379 [ 9.524416] morse_usb 3-1.2:1.0: enable_sched_scan : Y 380 [ 9.524424] morse_usb 3-1.2:1.0: enable_hw_scan : Y 381 [ 9.524432] morse_usb 3-1.2:1.0: enable_pv1 : N 382 [ 9.524440] morse_usb 3-1.2:1.0: enable_page_slicing : N 383 [ 9.524448] morse_usb 3-1.2:1.0: log_modparams_on_boot : Y 384 [ 9.524455] morse_usb 3-1.2:1.0: enable_mcast_rate_control : N 385 [ 9.524463] morse_usb 3-1.2:1.0: enable_mcast_whitelist : Y 386 [ 9.524471] morse_usb 3-1.2:1.0: ocs_type : 1 387 [ 9.524479] morse_usb 3-1.2:1.0: enable_wiphy : N 388 [ 9.524487] morse_usb 3-1.2:1.0: enable_auto_mpsw : Y 389 [ 9.524493] morse_usb 3-1.2:1.0: duty_cycle_probe_retry_threshold : 2500 390 [ 9.524499] morse_usb 3-1.2:1.0: duty_cycle_mode : 0 391 [ 9.524504] morse_usb 3-1.2:1.0: enable_auto_duty_cycle : Y 392 [ 9.524511] morse_usb 3-1.2:1.0: dhcpc_lease_update_script : /morse/scripts/dhcpc_update.sh 393 [ 9.524517] morse_usb 3-1.2:1.0: enable_ibss_probe_filtering : Y 394 [ 9.524526] morse_usb 3-1.2:1.0: enable_dhcpc_offload : N 395 [ 9.524533] morse_usb 3-1.2:1.0: enable_arp_offload : N 396 [ 9.524541] morse_usb 3-1.2:1.0: enable_bcn_change_seq_monitor : N 397 [ 9.524549] morse_usb 3-1.2:1.0: enable_cac : N 398 [ 9.524555] morse_usb 3-1.2:1.0: max_mc_frames : 10 399 [ 9.524564] morse_usb 3-1.2:1.0: tx_max_power_mbm : 2200 400 [ 9.524572] morse_usb 3-1.2:1.0: enable_twt : Y 401 [ 9.524580] morse_usb 3-1.2:1.0: enable_mac80211_connection_monitor : N 402 [ 9.524588] morse_usb 3-1.2:1.0: enable_airtime_fairness : N 403 [ 9.524596] morse_usb 3-1.2:1.0: enable_raw : Y 404 [ 9.524604] morse_usb 3-1.2:1.0: max_aggregation_count : 0 405 [ 9.524612] morse_usb 3-1.2:1.0: max_rate_tries : 1 406 [ 9.524620] morse_usb 3-1.2:1.0: max_rates : 4 407 [ 9.524627] morse_usb 3-1.2:1.0: enable_watchdog_reset : N 408 [ 9.524635] morse_usb 3-1.2:1.0: watchdog_interval_secs : 30 409 [ 9.524643] morse_usb 3-1.2:1.0: enable_watchdog : Y 410 [ 9.524651] morse_usb 3-1.2:1.0: country : US 411 [ 9.524659] morse_usb 3-1.2:1.0: enable_cts_to_self : N 412 [ 9.524667] morse_usb 3-1.2:1.0: enable_rts_8mhz : N 413 [ 9.524674] morse_usb 3-1.2:1.0: enable_trav_pilot : Y 414 [ 9.524682] morse_usb 3-1.2:1.0: enable_sgi_rc : Y 415 [ 9.524689] morse_usb 3-1.2:1.0: enable_mbssid_ie : N 416 [ 9.524697] morse_usb 3-1.2:1.0: virtual_sta_max : 0 417 [ 9.524705] morse_usb 3-1.2:1.0: thin_lmac : N 418 [ 9.524712] morse_usb 3-1.2:1.0: enable_dynamic_ps_offload : Y 419 [ 9.524720] morse_usb 3-1.2:1.0: enable_ps : 0 420 [ 9.524728] morse_usb 3-1.2:1.0: enable_subbands : 2 421 [ 9.524736] morse_usb 3-1.2:1.0: enable_survey : Y 422 [ 9.524744] morse_usb 3-1.2:1.0: mcs10_mode : 0 423 [ 9.524750] morse_usb 3-1.2:1.0: mcs_mask : 1023 424 [ 9.524755] morse_usb 3-1.2:1.0: no_hwcrypt : N 425 [ 9.524761] morse_usb 3-1.2:1.0: enable_ext_xtal_init : Y 426 [ 9.524767] morse_usb 3-1.2:1.0: enable_otp_check : Y 427 [ 9.524772] morse_usb 3-1.2:1.0: bcf : 428 [ 9.524781] morse_usb 3-1.2:1.0: serial : default 429 [ 9.524788] morse_usb 3-1.2:1.0: debug_mask : 8 430 [ 9.524796] morse_usb 3-1.2:1.0: tx_status_lifetime_ms : 15000 431 [ 9.524805] morse_usb 3-1.2:1.0: tx_queued_lifetime_ms : 1000 432 [ 9.524813] morse_usb 3-1.2:1.0: max_txq_len : 32 433 [ 9.524821] morse_usb 3-1.2:1.0: default_cmd_timeout_ms : 600 434 [ 9.524829] morse_usb 3-1.2:1.0: reattach_hw : N 435 [ 9.524838] morse_usb 3-1.2:1.0: hw_reload_after_stop : 5 436 [ 9.524846] morse_usb 3-1.2:1.0: enable_short_bcn_as_dtim_override : -1 437 [ 9.524852] morse_usb 3-1.2:1.0: fw_bin_file : 438 [ 9.524868] morse_usb 3-1.2:1.0: sdio_reset_time : 400 439 [ 9.524877] morse_usb 3-1.2:1.0: macaddr_suffix : 00:00:00 440 [ 9.524885] morse_usb 3-1.2:1.0: macaddr_octet : 255 441 [ 9.524893] morse_usb 3-1.2:1.0: max_total_vendor_ie_bytes : 514 442 [ 9.524902] morse_usb 3-1.2:1.0: coredump_include : 1 443 [ 9.524910] morse_usb 3-1.2:1.0: coredump_method : 1 444 [ 9.524917] morse_usb 3-1.2:1.0: enable_coredump : Y 445 [ 9.524925] morse_usb 3-1.2:1.0: sdio_clk_debugfs : 446 [ 9.524933] morse_usb 3-1.2:1.0: enable_mm_vendor_ie : Y 447 [ 9.524941] morse_usb 3-1.2:1.0: fixed_guard : 0 448 [ 9.524949] morse_usb 3-1.2:1.0: fixed_ss : 1 449 [ 9.524956] morse_usb 3-1.2:1.0: fixed_bw : 2 450 [ 9.524964] morse_usb 3-1.2:1.0: fixed_mcs : 4 451 [ 9.524972] morse_usb 3-1.2:1.0: enable_fixed_rate : N 452 [ 9.527922] morse_io: Device node '/dev/morse_io' created successfully 453 [ 9.528089] usbcore: registered new interface driver morse_usb 377 [ 10.478719] morse micro driver registration. Version 0-rel_mm8108_2_0_0_2026_Apr_21 378 [ 10.478846] morse_usb 3-1.2:1.0: USB Morse device now attached to Morse driver (minor=-1) 379 [ 10.490458] morse_usb 3-1.2:1.0: Loaded firmware from morse/mm8108b2-rl.bin, size 488704, crc32 0xd5047b32 380 [ 10.490971] morse_usb 3-1.2:1.0: Loaded BCF from morse/bcf_boardtype_0808.bin, size 2479, crc32 0xa31464ef 381 [ 11.359133] morse_usb 3-1.2:1.0: morse_mac_init: WARNING enable_ps modparam must only be used for testing - use iw set power_save 382 [ 11.450783] morse_usb 3-1.2:1.0: Driver loaded with kernel module parameters 383 [ 11.450802] morse_usb 3-1.2:1.0: enable_pre_assoc_ps : N 384 [ 11.450810] morse_usb 3-1.2:1.0: slow_clock_mode : 0 385 [ 11.450816] morse_usb 3-1.2:1.0: enable_1mhz_probes : Y 386 [ 11.450822] morse_usb 3-1.2:1.0: enable_sched_scan : Y 387 [ 11.450828] morse_usb 3-1.2:1.0: enable_hw_scan : Y 388 [ 11.450833] morse_usb 3-1.2:1.0: enable_pv1 : N 389 [ 11.450839] morse_usb 3-1.2:1.0: enable_page_slicing : N 390 [ 11.450844] morse_usb 3-1.2:1.0: log_modparams_on_boot : Y 391 [ 11.450850] morse_usb 3-1.2:1.0: enable_mcast_rate_control : N 392 [ 11.450856] morse_usb 3-1.2:1.0: enable_mcast_whitelist : Y 393 [ 11.450861] morse_usb 3-1.2:1.0: ocs_type : 1 394 [ 11.450867] morse_usb 3-1.2:1.0: enable_wiphy : N 395 [ 11.450872] morse_usb 3-1.2:1.0: enable_auto_mpsw : Y 396 [ 11.450879] morse_usb 3-1.2:1.0: duty_cycle_probe_retry_threshold : 2500 397 [ 11.450885] morse_usb 3-1.2:1.0: duty_cycle_mode : 0 398 [ 11.450890] morse_usb 3-1.2:1.0: enable_auto_duty_cycle : Y 399 [ 11.450897] morse_usb 3-1.2:1.0: dhcpc_lease_update_script : /morse/scripts/dhcpc_update.sh 400 [ 11.450903] morse_usb 3-1.2:1.0: enable_ibss_probe_filtering : Y 401 [ 11.450909] morse_usb 3-1.2:1.0: enable_dhcpc_offload : N 402 [ 11.450914] morse_usb 3-1.2:1.0: enable_arp_offload : N 403 [ 11.450920] morse_usb 3-1.2:1.0: enable_bcn_change_seq_monitor : N 404 [ 11.450925] morse_usb 3-1.2:1.0: enable_cac : N 405 [ 11.450931] morse_usb 3-1.2:1.0: enable_amsdu_override : -1 406 [ 11.450937] morse_usb 3-1.2:1.0: max_mc_frames : -1 407 [ 11.450943] morse_usb 3-1.2:1.0: tx_max_power_mbm : 0 408 [ 11.450948] morse_usb 3-1.2:1.0: enable_twt : Y 409 [ 11.450954] morse_usb 3-1.2:1.0: enable_mac80211_connection_monitor : N 410 [ 11.450959] morse_usb 3-1.2:1.0: enable_airtime_fairness : 0 411 [ 11.450965] morse_usb 3-1.2:1.0: max_aggregation_count : 0 412 [ 11.450971] morse_usb 3-1.2:1.0: max_rate_tries : 1 413 [ 11.450977] morse_usb 3-1.2:1.0: max_rates : 4 414 [ 11.450983] morse_usb 3-1.2:1.0: watchdog_interval_secs : 30 415 [ 11.450989] morse_usb 3-1.2:1.0: enable_watchdog : Y 416 [ 11.450994] morse_usb 3-1.2:1.0: country : US 417 [ 11.450999] morse_usb 3-1.2:1.0: enable_cts_to_self : N 418 [ 11.451005] morse_usb 3-1.2:1.0: enable_rts_8mhz : N 419 [ 11.451010] morse_usb 3-1.2:1.0: enable_trav_pilot : Y 420 [ 11.451016] morse_usb 3-1.2:1.0: enable_sgi_rc : Y 421 [ 11.451021] morse_usb 3-1.2:1.0: enable_mbssid_ie : N 422 [ 11.451027] morse_usb 3-1.2:1.0: virtual_sta_max : 0 423 [ 11.451032] morse_usb 3-1.2:1.0: thin_lmac : N 424 [ 11.451038] morse_usb 3-1.2:1.0: enable_subbands : 2 425 [ 11.451044] morse_usb 3-1.2:1.0: enable_survey : Y 426 [ 11.451049] morse_usb 3-1.2:1.0: mcs10_mode : 0 427 [ 11.451055] morse_usb 3-1.2:1.0: mcs_mask : 1023 428 [ 11.451061] morse_usb 3-1.2:1.0: no_hwcrypt : N 429 [ 11.451066] morse_usb 3-1.2:1.0: enable_ext_xtal_init : N 430 [ 11.451072] morse_usb 3-1.2:1.0: enable_otp_check : Y 431 [ 11.451077] morse_usb 3-1.2:1.0: bcf : 432 [ 11.451083] morse_usb 3-1.2:1.0: serial : default 433 [ 11.451089] morse_usb 3-1.2:1.0: debug_mask : 8 434 [ 11.451095] morse_usb 3-1.2:1.0: tx_status_lifetime_ms : 15000 435 [ 11.451101] morse_usb 3-1.2:1.0: tx_queued_lifetime_ms : 1000 436 [ 11.451106] morse_usb 3-1.2:1.0: max_txq_len : 32 437 [ 11.451113] morse_usb 3-1.2:1.0: default_cmd_timeout_ms : 600 438 [ 11.451119] morse_usb 3-1.2:1.0: reattach_hw : N 439 [ 11.451124] morse_usb 3-1.2:1.0: hw_reload_after_stop : 5 440 [ 11.451130] morse_usb 3-1.2:1.0: enable_short_bcn_as_dtim_override : -1 441 [ 11.451137] morse_usb 3-1.2:1.0: rsn_beacon_mode : 0 442 [ 11.451142] morse_usb 3-1.2:1.0: enable_dynamic_ps_offload : Y 443 [ 11.451149] morse_usb 3-1.2:1.0: enable_ps : 0 444 [ 11.451154] morse_usb 3-1.2:1.0: fw_bin_file : 445 [ 11.451160] morse_usb 3-1.2:1.0: sdio_reset_time : 400 446 [ 11.451166] morse_usb 3-1.2:1.0: macaddr_suffix : 00:00:00 447 [ 11.451172] morse_usb 3-1.2:1.0: macaddr_octet : 255 448 [ 11.451178] morse_usb 3-1.2:1.0: max_total_vendor_ie_bytes : 514 449 [ 11.451183] morse_usb 3-1.2:1.0: hw_scan_replay_limit : 0 450 [ 11.451192] morse_usb 3-1.2:1.0: hw_scan_prim_deconstruct : 0 451 [ 11.451203] morse_usb 3-1.2:1.0: coredump_include : 1 452 [ 11.451211] morse_usb 3-1.2:1.0: coredump_method : 1 453 [ 11.451221] morse_usb 3-1.2:1.0: enable_coredump : Y 454 [ 11.451227] morse_usb 3-1.2:1.0: enable_hw_leds : Y 455 [ 11.451235] morse_usb 3-1.2:1.0: enable_scan_result_cache : N 456 [ 11.451240] morse_usb 3-1.2:1.0: enable_mm_vendor_ie : Y 457 [ 11.451246] morse_usb 3-1.2:1.0: fixed_guard : 0 458 [ 11.451252] morse_usb 3-1.2:1.0: fixed_ss : 1 459 [ 11.451257] morse_usb 3-1.2:1.0: fixed_bw : 2 460 [ 11.451263] morse_usb 3-1.2:1.0: fixed_mcs : 4 461 [ 11.451268] morse_usb 3-1.2:1.0: enable_fixed_rate : N 462 [ 11.453184] morse_io: Device node '/dev/morse_io' created successfully 463 [ 11.453388] usbcore: registered new interface driver morse_usb 464 454 465 # ls -l /sys/class/net/wlan0 455 466 lrwxrwxrwx 1 root root 0 Jan 21 23:05 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/32f10108.usb/38200000.usb/xhci -hcd.1.auto/usb3/3-1/3-1.2/3-1.2:1.0/net/wlan0 456 467 }}} 457 458 Note, driver makefile is here: [https://github.com/Gateworks/morse_driver/blob/1.16.4-gateworks/Makefile]459 468 460 469 === hostapd and wpa_supplicant … … 508 517 [=#openwrt] 509 518 === OpenWrt 510 Support has been added for the GW16167 to the Gateworks OpenWrt packages for the 24.10/25.12 branches:519 Support has been added for the GW16167/GW16170 to the Gateworks OpenWrt packages for the 24.10/25.12 branches: 511 520 * https://github.com/Gateworks/gw-openwrt-packages/tree/24.10/gateworks/morse-micro 512 521 * https://github.com/Gateworks/gw-openwrt-packages/tree/25.12/gateworks/morse-micro 513 522 514 The morse_driver and morse-fw packages are required and included in the pre-built Gateworks OpenWrt image for venice: https://dev.gateworks.com/venice/images/openwrt-venice.img.gz 515 523 The following packages are needed to support the GW16167/GW16170 (which are included in the Gateworks pre-built OpenWrt image): 524 - CONFIG_PACKAGE_mm8108-firmware=y 525 - CONFIG_PACKAGE_kmod-mm8108_usb=y 526 - CONFIG_PACKAGE_hostapd_s1g=y 527 - CONFIG_PACKAGE_wpa_supplicant_s1g=y 528 - CONFIG_PACKAGE_libwpa_client_s1g=y 529 - CONFIG_PACKAGE_morse_cli=y 530 516 531 OpenWrt will recognize the interface as a generic 5Ghz radio and allow you to configure it as an AP or a STA. OpenWrt does not understand that the channels map to the sub-1GHz band. The bandwidths will map as follows: 517 532 - 20MHz = 1MHz sub-1G … … 525 540 526 541 {{{#!bash 527 # Disable UCI’s wifi control for radio0 (gw16167)542 # Disable UCI’s wifi control for radio0 528 543 uci set wireless.radio0.disabled='1' 529 544 uci commit wireless … … 1130 1145 }}} 1131 1146 * If the device is not enumerating on the usb bus, then you should verify that your M.2 W_DISABLE1# (pin 56) and W_DISABLE2# (54) are logic high. Both of these pins have pull-up resistors on our card (200k for !W_DISABLE#1 and 10k for !W_DISABLE#2) so make sure you are not driving them low and do not have an on-board pull-down on your hardware. 1132 * If you do not see the mm8108 enumerate on the USB bus, it could be that something is driving your PERST# signal low which would keep the mm8108 on the GW16167 in reset. You can verify this with a scope/meter on the PERST# signal.1133 1147 * Verify with another card that USB 2.0 on the miniPCIe socket works. 1134 1148 * Can you see the device using the iw dev command? Does the MAC (mac address) prefix match 0c:bf:74 , which is the country prefix for Morse Micro? … … 1179 1193 However, for custom applications, SDIO can be used for custom orders of 100 pieces or more. Please contact Gateworks sales. Note, while SDIO and SPI interfaces are optional, they have not been tested or validated by Gateworks and may require software modification by the customer. 1180 1194 1181 Note, M.2 defines SDIO signals as 1.8V. However, the MM8108 module needs these at 3.3V. Gateworks does not include a translator on the GW16167 . Thus, a custom designed M.2 slot that breaks the M.2 spec by using 3.3V would be needed for supporting SDIO.1195 Note, M.2 defines SDIO signals as 1.8V. However, the MM8108 module needs these at 3.3V. Gateworks does not include a translator on the GW16167/GW16170. Thus, a custom designed M.2 slot that breaks the M.2 spec by using 3.3V would be needed for supporting SDIO. 1182 1196 1183 1197 For supporting SDIO interface you will want to load the following zero-ohm resistors (RESS,0,1%,0.5A,0402): … … 1194 1208 * M2.21: No Connect - SDIO_WAKE# 1195 1209 * M2.23: SDIO_RESET# (3.3V) 1196 1197 For SPI, it is required CONFIG_MORSE_SPI be added during the driver build for SPI support. 1198 1199 To use the GW16167 with a microcontroller, consider reviewing the Morse Micro software here: [https://github.com/MorseMicro/mm-iot-sdk] 1210 1211 For SDIO, it is required to add CONFIG_MORSE_SDIO during the driver build as well as specify a dt fragment to configure various GPIO's required by the driver. 1212 1213 For SPI, it is required to add CONFIG_MORSE_SPI during the driver build. 1214 1215 To use the GW16167/GW16170 with a microcontroller, consider reviewing the Morse Micro software here: [https://github.com/MorseMicro/mm-iot-sdk] 1200 1216 1201 1217 [[Image(sdio.png,300px)]]
