Autor Tema: [Desarrollo] OpenWrt en Sercomm H500-s  (Leído 352 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado danitool

  • ****
  • Mensajes: 54
[Desarrollo] OpenWrt en Sercomm H500-s
« en: 22-06-2020, 17:48 (Lunes) »
El Sercomm H500-s es un router modem xDSL con un SoC BCM63167, 128 RAM, 128 MiB Flash tipo NAND, wifi AC y un puerto USB.



wikihttps://openwrt.org/toh/sercomm/h500s

Partes con funcionalidad limitada o nula en OpenWrt:
  • Modem interno xDSL: no funciona, porque no hay soporte GPL en Linux y probablemente nunca lo habrá.
  • VoIP / FXS : no existen drivers.
  • WIFI 2.4GHz: No hay drivers, aunque podría haber soporte básico para el modo b/g en un futuro.
  • WIFI 5GHz AC: Funciona igual que con el firmware original, pero la configuración ha de hacerse de forma manual, no se puede hacer mediante interfaz web LuCi. Resulta que el wifi AC va en un SoC aparte conectado mediante ethernet al SoC principal. Para configurarlo hace falta una utilidad de Quantenna, esta configuración se hace mediante línea de comandos.
Para facilitar el trabajo, he compilado un firmware personalizado que activa el WiFi AC automáticamente. Este firmware lleva dentro la utilidad de Quantenna, el bootloader u-boot del SoC y el firmware ramdisk (topaz-linux) de Quantenna. Además de un script que activa automáticamente la carga del sistema wifi. Una vez arrancado la SSID y contraseña por defecto serán
  • SSID: Quantenna
  • Pass: qtn01234

Compilaciones OpenWrt. No recomendado para inexpertos:
VersiónLinkNotas
Compilación personalizadaopenwrt-snapshot_r13601-h500-s-vfes-squashfs-factory.imgcon interfaz web Luci, wifi AC activado por defecto
Snapshot oficialopenwrt-bcm63xx-smp-sercomm_h500-s-vfes-squashfs-factory.imgsin interfaz web Luci, sin utilidad para activar wifi AC


Para instalarlo basta seguir las instrucciones que he colocado en la wiki. Hay que destacar que el router usará doble firmware, por lo que una vez instalado Openwrt habrá una partición que contiene el firmware original en la partición o bien img1 ó img2.



SNAPSHOT
El firmware oficial todavía está en estado snapshot, por lo que no habrá interfaz web LuCi. Si quisiésemos usar esta compilación y activar el wifi AC tendríamos primero que configurar la interfaz ethernet para que tenga una IP compatible con la del SoC Quantenna. Podemos usar esta pila de comandos para configurarla:
Código: [Seleccionar]
uci set network.lan2=interface
uci set network.lan2.ifname=@lan
uci set network.lan2.proto=static
uci set network.lan2.ipaddr=1.1.1.1
uci set network.lan2.netmask=255.0.0.0
uci commit network

Además necesitamos un server TFTP dentro de Openwrt, el cual se encarga de servir las imágenes (bootloader+ramdisk) que cargará el SoC Quantenna. Para configurarlo con las imágenes en el directorio /etc/wlan
Código: [Seleccionar]
uci set dhcp.@dnsmasq[-1].enable_tftp=1
uci set dhcp.@dnsmasq[-1].tftp_root=/etc/wlan
uci commit dhcp

En /etc/wlan estarán los archivos topaz-linux.lzma.img y u-boot.bin.

Esta es la utilidad con los archivos necesarios, con script que inicia el wifi de Quantenna:
call_qcsapi_1.0.1-1_mips_mips32.ipkPaquete compilado, con la utilidad call_qcsapi_sockrpc, firmwares Quantena y script de inicio
call_qcsapi.tar.gzCódigo fuente del paquete

El paquete tiene la dependencia libtirpc. Por lo que habrá que instalarla también.




Si queremos configurar el wifi AC a nuestro gusto aquí nos encontraremos con un campo totalmente nuevo. Ya que no hay mucha información oficial sobre la API de Quantenna. Lo bueno que podemos coger como referencia el firmware oficial, el cual tiene la configuración almacenada en  /tmp/2/up_5g. Por ejemplo aquí teneis esta de referencia:
Código: [Seleccionar]
~ # cat tmp/2/up_5g
qcsapi_sockraw br0 00:26:86:00:00:00 vlan_config eth1_0 enable
/sbin/ifconfig eth3.300 down
/usr/sbin/brctl delif br0 eth3.300
qcsapi_sockraw br0 00:26:86:00:00:00 rfenable 0
qcsapi_sockraw br0 00:26:86:00:00:00 set_security_defer_mode wifi0 1
/sbin/ifconfig eth3 up
/usr/sbin/brctl addif br0 eth3
qcsapi_sockraw br0 00:26:86:00:00:00 set_ssid wifi0 gatohambriento5G
qcsapi_sockraw br0 00:26:86:00:00:00 set_option wifi0 SSID_broadcast 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_phy_mode wifi0 11ac80
qcsapi_sockraw br0 00:26:86:00:00:00 set_current_tx_power wifi0 100
qcsapi_sockraw br0 00:26:86:00:00:00 set_ap_isolate wifi0 0
qcsapi_sockraw br0 00:26:86:00:00:00 set_rts_threshold wifi0 2347
qcsapi_sockraw br0 00:26:86:00:00:00 set_beacon_interval wifi0 100
qcsapi_sockraw br0 00:26:86:00:00:00 set_group_key_interval wifi0 0
qcsapi_sockraw br0 00:26:86:00:00:00 clear_mac_filters wifi0
qcsapi_sockraw br0 00:26:86:00:00:00 set_macaddr_filter wifi0 0
qcsapi_sockraw br0 00:26:86:00:00:00 pm auto
qcsapi_sockraw br0 00:26:86:00:00:00 pm auto dual_emac
qcsapi_sockraw br0 00:26:86:00:00:00 set_tx_amsdu wifi0 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_tx_max_amsdu wifi0 2
qcsapi_sockraw br0 00:26:86:00:00:00 set_option wifi0 beamforming 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_option wifi0 autorate 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_option wifi0 obss_coexist 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_option wifi0 shortGI 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_airfair wifi0 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_option wifi0 802_11h 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_ssid_group_id wifi0 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_dev_assoc_limit wifi0 102
qcsapi_sockraw br0 00:26:86:00:00:00 set_beacon wifi0 11i
qcsapi_sockraw br0 00:26:86:00:00:00 set_WPA_encryption_modes wifi0 AESEncryption
qcsapi_sockraw br0 00:26:86:00:00:00 set_WPA_authentication_mode wifi0 PSKAuthentication
qcsapi_sockraw br0 00:26:86:00:00:00 set_passphrase wifi0 0 supersecreto
qcsapi_sockraw br0 00:26:86:00:00:00 set_priority wifi0  3
qcsapi_sockraw br0 00:26:86:00:00:00 enable_scs wifi0 1
qcsapi_sockraw br0 00:26:86:00:00:00 set_channel wifi0 0
qcsapi_sockraw br0 00:26:86:00:00:00 rfenable 1
killall scsd
/usr/sbin/scsd -r 1 -b 80 -c 36,40,44,48,52,56,60,64,100,104,108,112,132,136,140 -t 7200 &
qcsapi_sockraw br0 00:26:86:00:00:00 set_security_defer_mode wifi0 0
qcsapi_sockraw br0 00:26:86:00:00:00 set_dtim wifi0 1
qcsapi_sockraw br0 00:26:86:00:00:00 disable_wps wifi0 0
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 config_methods push_button,virtual_push_button,physical_push_button
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 uuid 00010203-0405-0607-0809-0a0b0c0ddead
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 manufacturer Sercomm
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 device_name Vodafone-H-500-s
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 model_name Vodafone-H-500-s
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 model_number Vodafone-H-500-s-v3.4.17
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 serial_number E1727BXKxxxxx
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 ap_pin_fail_method auto_lockdown
qcsapi_sockraw br0 00:26:86:00:00:00 apply_security_config wifi0
qcsapi_sockraw br0 00:26:86:00:00:00 set_wps_param wifi0 ap_setup_locked 1
qcsapi_sockraw br0 00:26:86:00:00:00 enable_wps_ap_pin wifi0 0
killall wifi_radar_5g
/usr/sbin/wifi_radar_5g -m 1 &
qcsapi_sockraw br0 00:26:86:00:00:00 set_bss_assoc_limit 2 4
qregist -i 300 -s 3 -d 1 -r


En este caso vemos que el fabricante usa el comando qcsapi_sockraw seguido de una MAC. Pero nosotros usaremos call_qcsapi_sockrpc  seguido de la IP del SoC Quantenna. Algunos ejemplos para Openwrt
Código: [Seleccionar]
call_qcsapi_sockrpc --host 1.1.1.2 rfstatus
call_qcsapi_sockrpc --host 1.1.1.2 rfenable 1
call_qcsapi_sockrpc --host 1.1.1.2 set_channel wifi0 44
call_qcsapi_sockrpc --host 1.1.1.2 get_channel wifi0

Para explorar más a fondo los comandos disponibles os dejo este manual de referencia:
Quantenna Configuration and Status APIs - INTERNAL.pdf

Usé dos routers para conseguir el soporte (autodonados). Uno de ellos, versión Lowi, cayó al final del camino, tal vez un brick recuperable, resulta que la versión Lowi no deja parar CFE en la linea de comandos, aunque si le ponemos el bootloader de vodafone sí que podríamos.

Especial agradecimiento a Noltari por las mejoras en el driver NAND, además de haber hecho posible el poder generar un factory firmware para estos dispositivos de Sercomm.

Saludos.


« Última modificación: 27-06-2020, 11:33 (Sábado) por danitool »

Desconectado Ficht

  • **
  • Mensajes: 49
Re:[Desarrollo] OpenWrt en Sercomm H500-s
« Respuesta #1 en: 22-06-2020, 20:35 (Lunes) »
 >:( >:( >:( >:(
Verdadero Crack,  enhorabuena.
Saludos.