OpenLinux en módulos SIM7600E-H

OpenLinux en módulos SIM7600E-H

El mecanismo de desarrollo de aplicaciones personalizadas y su carga en el módulo está disponible tanto para el sistema operativo Linux como para Windows. En este artículo, examinaremos detalladamente cómo utilizar ejemplos del SDK proporcionado. Soluciones Inalámbricas SIMCom compilar y cargar una aplicación personalizada en el módulo.

Antes de escribir este artículo, un amigo mío, ajeno al desarrollo en Linux, me pidió que abordara el proceso de desarrollo de una aplicación para el módulo SIM7600E-H de la manera más detallada posible. El criterio para evaluar la accesibilidad del material fue la frase: 'de tal manera que yo lo entendiera'.

Te invito a revisar lo que se ha logrado.

El artículo se complementa y actualiza regularmente.

Preludio

Normalmente, los módulos de comunicación celular se utilizan solo para la transmisión de datos, llamadas de voz, envío de SMS y similares. Todo esto se realiza mediante comandos AT, enviados desde un microcontrolador externo. Pero hay una categoría de módulos que permite ejecutar código personalizado cargado externamente. En algunos casos, esto reduce significativamente el presupuesto total del dispositivo, permitiendo instalar un microcontrolador más simple (y, por tanto, más económico) o prescindir de él por completo. Con la llegada de módulos LTE, controlados por sistemas operativos Android o Linux y sus potentes recursos, se pueden abordar tareas que están disponibles para procesadores populares. Este artículo trata sobre el SIM7600E-H, controlado por Linux. Veremos cómo cargar y ejecutar una aplicación ejecutable.

El material se basa en gran medida en el documento 'Guía de desarrollo SIM7600 Open Linux', pero algunas adiciones, y sobre todo la versión en español, serán útiles. Este artículo ayudará a aquellos que están comenzando a familiarizarse con el módulo a llegar a cargar la aplicación demostrativa y les dará las habilidades necesarias para el trabajo posterior.

Breve sobre quién es SIM7600E-H

El SIM7600E-H es un módulo basado en el procesador ARM Cortex-A7 de 1.3GHz de Qualcomm, que cuenta con un sistema operativo Linux (núcleo 3.18.20) en su interior y es capaz de operar en las bandas de frecuencia 2G/3G/LTE en Europa (incluyendo Rusia), soportando Cat.4, proporcionando una velocidad máxima de descarga de hasta 150Mbps y de carga de hasta 50Mbps. Con una rica periferia, un rango de temperatura industrial y navegación incorporada GPS/GLONASS, cumple con todos los requisitos de una solución modular moderna en el ámbito M2M.

Resumen del sistema

El módulo SIM7600E-H se basa en el sistema operativo Linux (núcleo 3.18.20). Por su parte, el sistema de archivos está construido sobre un sistema de archivos con registro llamado UBIFS (Unsorted Block Image File System).

Las características clave de este sistema de archivos incluyen:

  • trabaja con particiones, permite crearlas, eliminarlas o cambiar su tamaño;
  • asegura la alineación de la escritura en todo el medio de almacenamiento;
  • maneja bloques defectuosos;
  • minimiza la probabilidad de pérdida de datos en caso de desconexión súbita de la alimentación u otros fallos;
  • lleva un registro.

La descripción fue tomada desde aquí, donde se habla más detalladamente sobre este tipo de sistema de archivos.

Es decir, este tipo de sistema de archivos es ideal para condiciones de trabajo rigurosas del módulo y posibles problemas de alimentación. Pero esto no significa que condiciones de alimentación inestable sean el modo de operación esperado del módulo, solo indica una mayor viabilidad del dispositivo.

Memoria

La distribución de áreas de memoria está organizada de la siguiente manera:

OpenLinux en módulos SIM7600E-H

Se deben destacar tres áreas principales:

ubi0:rootfs – solo de lectura y contiene el propio núcleo de Linux
ubi0:usrfs – se utiliza principalmente para programas de usuario y almacenamiento de datos
ubi0:cachefs – reservado para actualizaciones FOTA. Si no hay suficiente espacio disponible para cargar una actualización, el sistema eliminará archivos no utilizados y así liberará espacio. Pero por razones de seguridad, no se deben almacenar archivos personales allí.

Las tres particiones están distribuidas de la siguiente manera:

Sistema de archivos
Tamaño
Usado
Disponible
Uso%
Montado en

ubi0:rootfs
40.7M
36.2M
4.4M
89%
/

ubi0:usrfs
10.5M
360K
10.1M
3%
/data

ubi0:cachefs
50.3M
20K
47.7M
0%
/cache

Funcionalidad disponible

Como se mencionó anteriormente, el módulo está basado en el chipset Cortex A7 de Qualcomm. Sería incorrecto no proporcionar un núcleo de alto rendimiento para procesar programas de usuario y descargar parte del trabajo del procesador principal del dispositivo al módulo.

Para el programa de usuario, tendremos disponibles los siguientes modos de funcionamiento de la periferia:

Pin No.
Nombre
Sys GPIO No.
Acción predeterminada
Func1
Func2
Pull
Interrupción de activación

6
SPI_CLK
—
UART1_RTS
—
—
B-PD
—

7
SPI_MISO
—
UART1_Rx
—
—
B-PD
—

8
SPI_MOSI
—
UART1_Tx
—
—
B-PD
—

9
SPI_CS
—
UART1_CTS
—
—
B-PD
—

21
SD_CMD
—
SD-Card
—
—
B-PD
—

22
SD_DATA0
—
SD-Card
—
—
B-PD
—

23
SD_DATA1
—
SD-Card
—
—
B-PD
—

24
SD_DATA2
—
SD-Card
—
—
B-PD
—

25
SD_DATA3
—
SD-Card
—
—
B-PD
—

26
SD_CLK
—
SD-Card
—
—
B-PN
—

27
SDIO_DATA1
—
WLAN
—
—
B-PD
—

28
SDIO_DATA2
—
WLAN
—
—
B-PD
—

29
SDIO_CMD
—
WLAN
—
—
B-PD
—

30
SDIO_DATA0
—
WLAN
—
—
B-PD
—

31
SDIO_DATA3
—
WLAN
—
—
B-PD
—

32
SDIO_CLK
—
WLAN
—
—
B-PN
—

33
GPIO3
GPIO_1020
MIFI_POWER_EN
GPIO
MIFI_POWER_EN
B-PU
—

34
GPIO6
GPIO_1023
MIFI_SLEEP_CLK
GPIO
MIFI_SLEEP_CLK
B-PD
—

46
ADC2
—
ADC
—
—
—
—

47
ADC1
—
ADC
—
—
B-PU
—

48
SD_DET
GPIO_26
GPIO
GPIO
SD_DET
B-PD
X

49
ESTADO
GPIO_52
Estado
GPIO
Estado
B-PD
X

50
GPIO43
GPIO_36
MIFI_COEX
GPIO
MIFI_COEX
B-PD
—

52
GPIO41
GPIO_79
BT
GPIO
BT
B-PD
X

55
SCL
—
I2C_SCL
—
—
B-PD
—

56
SDA
—
I2C_SDA
—
—
B-PU
—

66
RTS
—
UART2_RTS
—
—
B-PD
—

67
CTS
—
UART2_CTS
—
—
B-PD
—

68
RxD
—
UART2_Rx
—
—
B-PD
—

69
RI
—
GPIO(RI)
—
—
B-PD
—

70
DCD
—
GPIO
—
—
B-PD
—

71
TxD
—
UART2_Tx
—
—
B-PD
—

72
DTR
—
GPIO(DTR)
—
—
B-PD
X

73
PCM_OUT
—
PCM
—
—
B-PD
—

74
PCM_IN
—
PCM
—
—
B-PD
—

75
PCM_SYNC
—
PCM
—
—
B-PD
—

76
PCM_CLK
—
PCM
—
—
B-PU
—

87
GPIO77
GPIO77
BT
GPIO
BT
B-PD
—

Coincidirás, la lista es impresionante y ten en cuenta: parte de la periferia se utiliza para que el módulo funcione como enrutador. Es decir, se puede construir un pequeño enrutador basado en este módulo que distribuirá internet a través de Wi-Fi. Por cierto, ya existe una solución lista, llamada SIM7600E-H-MIFI, que es una tarjeta miniPCIE con un módulo SIM7600E-H y varias salidas de antena, una de las cuales es la antena Wi-Fi. Sin embargo, este ya es un tema para otro material.

Ambiente (no día de la semana)

Soluciones Inalámbricas SIMCom ofrecen a los desarrolladores la posibilidad de elegir el entorno de desarrollo más familiar, ya sea Linux o Windows. Si se trata de una única aplicación ejecutable en el módulo, es mejor optar por Windows, ya que así será más rápido y sencillo. Si se prevé una arquitectura de aplicación compleja y futuras actualizaciones, es mejor utilizar Linux. También necesitaremos Linux para compilar archivos ejecutables para cargar posteriormente en el módulo; para compilar, una máquina virtual es suficiente.

De lo que necesitarás, lo que no está disponible para descargar libremente es el SDK, que puedes solicitar a tu distribuidor.

Instalación de utilidades para trabajar con el módulo

Aquí y en adelante, trabajaremos bajo Windows como el sistema operativo más familiar para la mayoría de los usuarios.

Necesitaremos instalar el software necesario en unos pocos pasos simples para comenzar a familiarizarnos con el trabajo con el módulo:

  1. GNU/Linux
  2. Cygwin
  3. Controladores
  4. ADB

Instalación de GNU/Linux

Para compilar la aplicación, se puede utilizar cualquier compilador compatible con ARM-Linux. Nosotros utilizaremos SourceryCodeBenchLiteARM GNU/Linux, disponible para descarga en el enlace.

Para asegurarnos de que todos los componentes estén instalados correctamente, dejaré algunas capturas de pantalla del proceso de instalación. En principio, no hay nada complicado en la instalación.

Para asegurarnos de que todos los componentes estén instalados correctamente, dejaré algunas capturas de pantalla del proceso de instalación. En principio, no hay nada complicado en la instalación.

  1. Aceptamos el acuerdo de licencia
    OpenLinux en módulos SIM7600E-H
  2. Indicamos la carpeta de instalación
    OpenLinux en módulos SIM7600E-H
  3. Dejamos los componentes necesarios sin cambios
    OpenLinux en módulos SIM7600E-H
  4. Dejamos como está
    OpenLinux en módulos SIM7600E-H
  5. Un par de veces en 'Siguiente', 'Instalar' y eso es todo
    OpenLinux en módulos SIM7600E-H

Instalación de Cygwin

A continuación, para desarrollar en se necesita un conjunto de bibliotecas y utilidades del conjunto suministrado por Cygwin. Aquí todo es simple, la versión actual de Cygwin se puede descargar gratis en el sitio web oficial del proyecto; al momento de escribir este artículo, la versión 3.1.5 estaba disponible y es la que utilizamos para preparar el material.

No hay nada complicado en la instalación de Cygwin, lo único que se tendrá que elegir es el espejo del cual el instalador descargará los archivos necesarios; elegimos cualquiera e instalamos, así como el conjunto de utilidades y bibliotecas, dejamos seleccionadas todas las bibliotecas y utilidades disponibles.

Instalación de controladores

Después de conectar el módulo a la PC, será necesario instalar los controladores. Se pueden solicitar a su distribuidor (se recomienda). No recomiendo buscar en internet, ya que podría requerir mucho tiempo encontrar qué causó el conflicto de dispositivos.

OpenLinux en módulos SIM7600E-H

Entre los puertos asignados, vemos los siguientes:

Windows
Linux
Descripción

SimTech HS-USB Diagnostics
USB Serial
Interfaz de Diagnóstico

SimTech HS-USB NMEA
USB Serial
Interfaz GPS NMEA

SimTech HS-USB AT Port
USB Serial
Interfaz de puerto AT

SimTech HS-USB Modem
USB Serial
Interfaz de puerto de módem

SimTech HS-USB Audio
USB Serial
Interfaz de audio USB

SimTech HS-USB WWAN Adapter
USB Net
Interfaz NDIS wwan

Interfaz Android Composite ADB
USB ADB
Puerto de depuración Android añadido

Como seguramente han notado, entre los puertos en la captura de pantalla no está el USB ADB, esto se debe a que el puerto ADB en el módulo está cerrado por defecto y debe ser activado enviando el comando 'AT+CUSBADB=1' al puerto AT del módulo y reiniciándolo (esto se puede hacer con el comando 'AT+CRESET').

Al final, obtendremos la interfaz deseada en el administrador de dispositivos:

OpenLinux en módulos SIM7600E-H

Hemos terminado con los controladores, pasemos a ADB.

Instalación de ADB

Accedemos al sitio oficial de Android Developer en el enlace. No descargaremos el pesado Android Studio, nos basta con la línea de comandos, disponible para descarga en el enlace 'Download SDK Platform-Tools for Windows'.

OpenLinux en módulos SIM7600E-H

Descargamos y descomprimimos el archivo obtenido en la raíz del disco C.

Variables de entorno

Después de instalar Cygwin, será necesario agregar la ruta Cygwin/bin/ a las variables de entorno de desarrollo (Panel de control clásico → Sistema → Configuración avanzada del sistema → Avanzado → Variables de entorno → Variables del sistema → Path → Editar) como se muestra en la captura de pantalla a continuación:

OpenLinux en módulos SIM7600E-H

De manera similar, agregamos la ruta al archivo ADB descargado y descomprimido en la raíz del disco C.

OpenLinux en módulos SIM7600E-H

Hacemos clic en Aceptar varias veces y reiniciamos el ordenador.

Después de reiniciar, podemos comprobar fácilmente si ADB funciona correctamente abriendo la línea de comandos (Win+R → cmd) y escribiendo el comando ‘adb version’. Obtendremos un resultado parecido al siguiente:

OpenLinux en módulos SIM7600E-H

Conectamos el módulo a la PC (si se desconectó) y verificamos si ADB lo detecta con el comando ‘adb devices’:

OpenLinux en módulos SIM7600E-H

Listo, con esto la configuración de conexión al módulo está completa y podemos iniciar el shell para trabajar con el módulo.

OpenLinux en módulos SIM7600E-H

Descompresión y compilación del SDK

Una vez que tengamos acceso al shell y podamos comenzar a trabajar con la línea de comandos del módulo, intentaremos compilar nuestra primera aplicación para cargar en el módulo.

Esto puede ser complicado para muchos. Como el módulo funciona con el sistema operativo Linux, para evitar colisiones al compilar código en Windows, es mejor compilar en el entorno nativo: Linux.

No nos detendremos en cómo, en ausencia de Linux y sin ganas de instalarlo en nuestra máquina, se puede instalar en uno virtual. Usaremos VirtualBox, instalaremos Ubuntu versión 20.04 (versión actual al momento de escribir este artículo) y comenzaremos a trabajar con compiladores, SDK, etc.

Pasamos al entorno Linux y descomprimimos el archivo obtenido del distribuidor.

simcom@VirtualBox:~\/Desktop\/OpenLinux$ sudo tar -xzf MDM9x07_OL_2U_22_V1.12_191227.tar.gz 

Entramos al directorio sim_open_sdk y agregamos el entorno:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ cd sim_open_sdk
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ source sim_crosscompile\/sim-crosscompile-env-init 

Permanecemos en esta carpeta y ejecutamos los siguientes comandos desde aquí.
Instalamos la biblioteca libncurses5-dev, si no se ha instalado:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ sudo apt-get update && sudo apt-get install libncurses5-dev -y

Python, si tampoco se ha instalado:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ sudo apt-get install python -y

y gcc:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ sudo apt-get install gcc

Compilación:

Ahora necesitaremos compilar varios archivos, ejecutando las siguientes comandos en secuencia.

Si al compilar aparece la ventana de configuración del núcleo, simplemente seleccionamos Salir y regresamos a la consola, no necesitamos configurar el núcleo en este momento.

Ejecutamos:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make

Compilando el bootloader:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make aboot

Compilando el núcleo:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel

Compilando el sistema de archivos raíz:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make rootfs

Para los usuarios de Linux, será relevante compilar el módulo del controlador:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel_module

Compilamos la demo:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make demo

Después de lo cual aparecerán varios nuevos archivos en el directorio sim_open_sdk\/output:

simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ ls output\/\nappsboot.mbn  boot.img  demo_app  helloworld  system.img

Demo

Intentemos cargar la demostración en nuestro módulo y veamos qué sucede.

Cargando

En el directorio sim_open_sdk, podemos ver el archivo demo_app. Lo tomamos y lo trasladamos a la raíz del disco C en la PC a la cual está conectado el módulo. Después, abrimos la línea de comandos de Windows (Win+R -> cmd) e ingresamos:

C:>adb push C:demo_app \/data\/

La consola nos informará:

C:demo_app: 1 file pushed, 0 skipped. 151.4 MB\/s (838900 bytes in 0.005s)

Esto significa que el archivo se envió correctamente al módulo y solo nos queda ejecutarlo. No nos demoraremos.

Ejecutamos:

C:>adb shell

Expandimos los permisos del archivo cargado:

/ # cdhmod 777 /data/demo_app

Y ejecutamos:

/ # /data/demo_app

En esta misma consola, el módulo nos informará lo siguiente:

SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205

Por favor, seleccione una opción para probar de los elementos listados a continuación.

1. WIFI                       2. VOICE CALL
3. DATA CALL                  4. SMS
5. WDS(APN)                   6. NAS
7. AT                         8. OTA
9. TTS                        10. GPIO
11. GPS                       12. Bluetooth
13. TCP\/UDP                   14. Timer
15. ADC                       16. I2C
17. UIM(SimCard)              18. DMS(IMEI,MEID)
19. UART                      20. SPI
21. Version                   22. Ethernet
23. FTP                       24. SSL
25. HTTP(S)                   26. FTP(S)
27. MQTT(S)                   28. ALSA
29. DEV                       30. AUDIO
31. JSON                      32. LBS
99. EXIT
Opción >   

Veamos el IMEI del módulo, ingresemos 7 (cambio al modo de comando) y luego ingresamos 5:

Seleccione una opción para probar de los elementos que se enumeran a continuación.

1. WIFI                       2. LLAMADA DE VOZ
3. LLAMADA DE DATOS          4. SMS
5. WDS(APN)                   6. NAS
7. AT                         8. OTA
9. TTS                        10. GPIO
11. GPS                       12. Bluetooth
13. TCP/UDP                   14. Temporizador
15. ADC                       16. I2C
17. UIM(SimCard)              18. DMS(IMEI,MEID)
19. UART                      20. SPI
21. Versión                   22. Ethernet
23. FTP                       24. SSL
25. HTTP(S)                   26. FTP(S)
27. MQTT(S)                   28. ALSA
29. DEV                       30. AUDIO
31. JSON                      32. LBS
99. SALIR
Opción > 7

Seleccione una opción para probar de los elementos que se enumeran a continuación.

1. obtener versión del módulo  2. obtener CSQ
3. obtener CREG               4. obtener ICCID
5. obtener IMEI               6. obtener CIMI
99. volver
Opción > 5
IMEI: 867584030090489

Seleccione una opción para probar de los elementos que se enumeran a continuación.

1. obtener versión del módulo  2. obtener CSQ
3. obtener CREG               4. obtener ICCID
5. obtener IMEI               6. obtener CIMI
99. volver
Opción >

Así veremos el IMEI del módulo.

En conclusión

Espero que hayamos logrado dar una visión general sobre cómo comenzar a trabajar con el módulo. En los próximos artículos, examinaremos más a fondo las capacidades que ofrece la plataforma SIM7600E-H, así como cómo se puede actualizar remotamente la propia aplicación en el módulo.

Los invito a hacer preguntas en los comentarios y a indicar qué aspecto de las capacidades del módulo debería reflejarse en artículos posteriores.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster