
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. 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 , 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:

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)
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:
- GNU/Linux
- Cygwin
- Controladores
- 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 .
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.
- Aceptamos el acuerdo de licencia

- Indicamos la carpeta de instalación

- Dejamos los componentes necesarios sin cambios

- Dejamos como está

- Un par de veces en 'Siguiente', 'Instalar' y eso es todo

Instalación de Cygwin
A continuación, para desarrollar en se necesita un conjunto de bibliotecas y utilidades del conjunto suministrado por . 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.

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:

Hemos terminado con los controladores, pasemos a ADB.
Instalación de ADB
Accedemos al sitio oficial de Android Developer en . 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'.

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:

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

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:

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

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.

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 -yPython, si tampoco se ha instalado:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ sudo apt-get install python -yy gcc:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ sudo apt-get install gccCompilació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$ makeCompilando el bootloader:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make abootCompilando 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 rootfsPara los usuarios de Linux, será relevante compilar el módulo del controlador:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel_moduleCompilamos la demo:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make demoDespué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 shellExpandimos los permisos del archivo cargado:
/ # cdhmod 777 /data/demo_appY ejecutamos:
/ # /data/demo_appEn 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





