
O mecanismo de desenvolvimento de aplicativos personalizados e sua carga no módulo está disponível tanto sob o sistema operacional Linux quanto Windows. Neste artigo, vamos examinar detalhadamente como utilizar exemplos do SDK fornecido. compilar e carregar um aplicativo personalizado no módulo.
Antes de escrever este artigo, um conhecido meu, longe do desenvolvimento em Linux, pediu que eu abordasse o processo de desenvolvimento de um aplicativo próprio para o módulo SIM7600E-H de forma detalhada. O critério para avaliar a acessibilidade do material foi a frase 'de forma que eu entendesse'.
Convido você a conferir o que foi produzido.
O artigo é regularmente complementado e atualizado.
Prelúdio
Normalmente, módulos de comunicação celular são usados apenas para transmissão de dados, chamadas de voz, envio de SMS e afins. Tudo isso é feito por meio de comandos AT enviados de um microcontrolador externo. Mas há uma categoria de módulos que permite a execução de código personalizado, carregado externamente. Em alguns casos, isso reduz significativamente o custo total do dispositivo, permitindo que um microcontrolador mais simples (e portanto, mais acessível) seja utilizado ou até mesmo dispensado. Com o surgimento de módulos LTE, gerenciados por sistemas operacionais Android ou Linux e seus poderosos recursos, é possível resolver qualquer tarefa disponível para processadores populares. Neste artigo, falaremos sobre o SIM7600E-H, gerenciado pelo Linux. Vamos ver como carregar e executar um aplicativo executável.
Em grande parte, o material é baseado no documento “SIM7600 Open Linux Development Guide”, mas algumas adições, especialmente a versão em russo, serão úteis. O artigo ajudará aqueles que estão apenas começando a aprender sobre o módulo a chegar à carga do aplicativo de demonstração e fornecerá as habilidades necessárias para o trabalho subsequente.
Um resumo sobre quem é o SIM7600E-H
O SIM7600E-H é um módulo baseado no processador ARM Cortex-A7 de 1.3GHz da Qualcomm, que possui o sistema operacional Linux (núcleo 3.18.20) integrado, capaz de operar nas faixas de frequência 2G/3G/LTE na Europa (incluindo a Rússia), suportando Cat.4, garantindo uma velocidade máxima de download de até 150Mbps e upload de até 50Mbps. A rica periferia, a faixa de temperatura industrial e a presença de navegação GPS/GLONASS atendem a todas as exigências de uma solução modular moderna no tema M2M.
Visão geral do sistema
O módulo SIM7600E-H é baseado no sistema operacional Linux (núcleo 3.18.20). Por sua vez, o sistema de arquivos é construído sobre o sistema de arquivos journaled UBIFS (Unsorted Block Image File System).
As principais características deste sistema de arquivos incluem:
- opera com partições, permitindo criar, excluir ou redimensioná-las;
- garante o alinhamento de gravação em todo o volume do meio;
- opera com blocos ruins;
- minimiza a probabilidade de perda de dados em caso de cortes de energia inesperados ou outras falhas;
- manutenção de logs.
A descrição foi retirada , onde é explicado em mais detalhes sobre tal sistema de arquivos.
Ou seja, esse tipo de sistema de arquivos é ideal para condições severas de operação do módulo e possíveis problemas com a alimentação. Mas isso não significa que condições de alimentação instáveis sejam esperadas como modo de operação do módulo, isso apenas indica uma maior viabilidade do dispositivo.
Memória
A distribuição das áreas de memória é organizada da seguinte forma:

É necessário destacar três áreas principais:
ubi0:rootfs – acessível apenas para leitura e contém o próprio núcleo Linux
ubi0:usrfs – é usado principalmente para programas de usuário e armazenamento de dados
ubi0:cachefs – reservado para atualizações FOTA. Se o espaço disponível não for suficiente para baixar a atualização – o sistema removerá arquivos não usados e assim liberará espaço. Mas, por motivos de segurança – não deve-se armazenar seus arquivos lá.
Todas as três partições estão distribuídas da seguinte forma:
Filesystem
Tamanho
Usado
Disponível
Uso%
Montado em
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
Funcionalidade disponível
Como mencionado anteriormente, o módulo é baseado no chipset Cortex A7 da Qualcomm. Seria incorreto não fornecer um núcleo de alto desempenho para processar o programa do usuário e aliviar o processador principal do dispositivo, delegando ao módulo parte do programa.
Para o programa do usuário, teremos os seguintes modos de operação da periferia:
Pino No.
Nome
Sys GPIO No.
Ação padrão
Func1
Func2
Pull
Interrupção de despertar
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
STATUS
GPIO_52
Status
GPIO
Status
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
—
Concordo, a lista é impressionante e note que parte da periferia é usada para a operação do módulo como um roteador. Ou seja, com base em tal módulo, pode-se criar um pequeno roteador que distribui internet via Wi-Fi. A propósito, já existe uma solução pronta, chamada SIM7600E-H-MIFI, que consiste em um cartão miniPCIe, com o módulo SIM7600E-H soldado e várias saídas de antena, uma delas sendo a antena Wi-Fi. Contudo, este já é um assunto para material separado.
Ambiente (não dia da semana)
dão aos desenvolvedores a oportunidade de escolherem o ambiente de desenvolvimento mais familiar, seja Linux ou Windows. Se estivermos falando de um único aplicativo executável no módulo, é melhor escolher Windows, pois será mais rápido e simples. Se se prevê uma arquitetura complexa do aplicativo e futuras atualizações, é melhor usar Linux. Também precisaremos do Linux para compilar os arquivos executáveis a serem carregados no módulo, e para compilar é suficiente uma máquina virtual.
O que você precisará que não está disponível para download livre – o SDK, que pode ser solicitado ao seu distribuidor.
Instalação de utilitários para trabalhar com o módulo
Aqui e adiante, trabalharemos em Windows, que é o sistema operacional mais familiar para a maioria dos usuários.
Precisamos, em alguns passos simples, instalar o software necessário para o aprendizado subsequente de como trabalhar com o módulo:
- GNU/Linux
- Cygwin
- Drivers
- ADB
Instalação do GNU/Linux
Para compilar o aplicativo, você pode usar qualquer compilador compatível com ARM-Linux. Nós usaremos o SourceryCodeBenchLiteARM GNU/Linux, disponível para download em .
Para garantir que todos os componentes sejam instalados corretamente, deixarei algumas capturas de tela do processo de instalação. Em princípio, não há nada complicado na instalação.
Para garantir que todos os componentes sejam instalados corretamente, deixarei algumas capturas de tela do processo de instalação. Em princípio, não há nada complicado na instalação.
- Aceitamos o contrato de licença

- Indicamos a pasta de instalação

- Deixamos os componentes necessários sem alterações

- Mantemos como está

- Várias vezes 'Próximo', 'Instalar' e, basicamente, é tudo

Instalação do Cygwin
Em seguida, para o desenvolvimento, será necessário um conjunto de bibliotecas e utilitários fornecidos por . Aqui é simples, a versão mais atual do Cygwin pode ser baixada gratuitamente no site oficial do projeto; no momento da redação deste artigo, a versão 3.1.5 estava disponível, e foi a que utilizamos para a preparação do material.
Na instalação do Cygwin, não há nada complicado; a única coisa que você precisará escolher é um espelho do qual o instalador baixará os arquivos necessários, escolha qualquer um e instale. Também é necessário escolher um conjunto de utilitários e bibliotecas; deixaremos todas as bibliotecas e utilitários disponíveis selecionados.
Instalação de drivers
Após conectar o módulo ao PC, será necessário instalar os drivers. Você pode solicitar ao seu distribuidor (recomendado). Não recomendo procurar na internet, pois pode levar muito tempo encontrar a solução para o conflito de dispositivos.

Entre as portas destacadas, vemos as seguintes:
Windows
Linux
Descrição
SimTech HS-USB Diagnostics
USB Serial
Diagnostic Interface
SimTech HS-USB NMEA
USB Serial
GPS NMEA Interface
SimTech HS-USB AT Port
USB Serial
AT port Interface
SimTech HS-USB Modem
USB Serial
Modem port Interface
SimTech HS-USB Audio
USB Serial
USB Audio Interface
SimTech HS-USB WWAN Adapter
USB Net
NDIS wwan Interface
Android Composite ADB Interface
USB ADB
Android add debug port
Como você provavelmente percebeu, entre as portas na captura de tela não está o USB ADB, isso se deve ao fato de que a porta ADB no módulo está fechada por padrão e deve ser ativada enviando o comando 'AT+CUSBADB=1' para a porta AT do módulo e reiniciá-lo (isso pode ser feito com o comando 'AT+CRESET').
No final, obteremos a interface desejada no gerenciador de dispositivos:

Concluímos com os drivers, agora vamos para o ADB.
Instalação do ADB
Acesse o site oficial do Android Developer em . Não vamos baixar o Android Studio pesado; o que precisamos é da linha de comando, disponível para download através do link 'Download SDK Platform-Tools for Windows'.

Baixamos e extraímos o arquivo obtido na raiz do disco C.
Variáveis de ambiente
Após a instalação do Cygwin, será necessário adicionar o caminho Cygwin/bin/ às variáveis de ambiente do desenvolvedor (Painel de Controle Clássico → Sistema → Configurações avançadas do sistema → Avançado → Variáveis de ambiente → Variáveis de sistema → Path → Editar), como mostrado na captura de tela abaixo:

Da mesma forma, adicionamos o caminho para o arquivo ADB baixado e descompactado na raiz do disco C.

Clique em OK várias vezes e reinicie o computador.
Após reiniciar, podemos facilmente verificar se o ADB está funcionando corretamente, abrindo o prompt de comando (Win+R → cmd) e digitando o comando ‘adb version’. Obteremos um resultado semelhante a este:

Conecte o módulo ao PC (se por acaso você desconectou) e verifique se o ADB o reconhece com o comando ‘adb devices’:

Pronto, isso conclui a configuração da conexão com o módulo e podemos iniciar o shell para trabalhar com o módulo.

Descompactação e compilação do SDK
Depois de obter acesso ao shell e iniciar a trabalhar com o prompt de comando do módulo, tentaremos compilar nosso primeiro aplicativo para carregar no módulo.
Isso pode causar dificuldades para muitos! Como o módulo opera em um sistema operacional Linux, para evitar colisões ao compilar código no Windows, é melhor compilar em um ambiente nativo — Linux.
Não entraremos em detalhes sobre como, na ausência do Linux e sem o desejo de instalá-lo na própria máquina, você pode instalá-lo em uma máquina virtual. Vamos usar o VirtualBox, instalar o Ubuntu versão 20.04 (versão atual no momento da redação deste artigo) e sob ele começaremos a trabalhar com compiladores, SDK, etc.
Acessamos o ambiente Linux e descompactamos o arquivo recebido do distribuidor.
simcom@VirtualBox:~/Desktop/OpenLinux$ sudo tar -xzf MDM9x07_OL_2U_22_V1.12_191227.tar.gz Navegamos para o diretório sim_open_sdk e adicionamos o ambiente:
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 nesta mesma pasta e executamos os próximos comandos nela.
Instalamos a biblioteca libncurses5-dev, se ela não foi instalada:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get update && sudo apt-get install libncurses5-dev -yPython, se também não foi instalado:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install python -ye gcc:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install gccCompilação:
Agora precisaremos compilar vários arquivos, executando as seguintes comandos sequencialmente.
Se durante a compilação surgir a janela de configuração do núcleo – basta escolher Sair e voltar para o console, não precisamos configurar o núcleo agora.
Executamos:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ makeCompilando o bootloader:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make abootCompilando o núcleo:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel
Compilando o sistema de arquivos raiz:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make rootfsPara usuários do Linux, será importante compilar o módulo do driver:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make kernel_moduleVamos compilar a demonstração:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ make demoApós isso, aparecerá vários novos arquivos no diretório sim_open_sdk\/output:
simcom@VirtualBox:~\/Desktop\/OpenLinux\/sim_open_sdk$ ls output\/\nappsboot.mbn boot.img demo_app helloworld system.img
Demonstração
Vamos tentar carregar a demonstração em nosso módulo e ver o que acontece.
Carregando
No diretório sim_open_sdk, podemos ver o arquivo demo_app. Pegamos ele e movemos para a raiz do disco C no PC ao qual o módulo está conectado. Após isso, abrimos o prompt de comando do Windows (Win+R -> cmd) e digitamos:
C:>adb push C:demo_app \/data\/O console nos informará:
C:demo_app: 1 arquivo enviado, 0 pulados. 151.4 MB\/s (838900 bytes em 0.005s)Isso significa que o arquivo foi enviado com sucesso para o módulo e só nos resta executá-lo. Não vamos perder tempo.
Executamos:
C:>adb shellExpandindo os direitos do arquivo enviado:
/ # cdhmod 777 /data/demo_appE executamos:
/ # /data/demo_appNo mesmo console, o módulo nos informará o seguinte:
SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205
Por favor, selecione uma opção para testar entre os itens listados abaixo.
1. WIFI 2. CHAMADA DE VOZ
3. CHAMADA DE DADOS 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. Versão 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. SAIR
Opção >
Vamos verificar o IMEI do módulo, digitamos 7 (transição para o modo de comando) e depois digitamos 5:
Por favor, selecione uma opção para testar dentre os itens listados abaixo.
1. WIFI 2. CHAMADA DE VOZ
3. CHAMADA DE DADOS 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. Versão 22. Ethernet
23. FTP 24. SSL
25. HTTP(S) 26. FTP(S)
27. MQTT(S) 28. ALSA
29. DEV 30. ÁUDIO
31. JSON 32. LBS
99. SAIR
Opção > 7
Por favor, selecione uma opção para testar dentre os itens listados abaixo.
1. obter Versão do Módulo 2. obter CSQ
3. obter CREG 4. obter ICCID
5. obter IMEI 6. obter CIMI
99. voltar
Opção > 5
IMEI: 867584030090489
Por favor, selecione uma opção para testar dentre os itens listados abaixo.
1. obter Versão do Módulo 2. obter CSQ
3. obter CREG 4. obter ICCID
5. obter IMEI 6. obter CIMI
99. voltar
Opção >
Assim veremos o IMEI do módulo.
Em conclusão
Espero que tenhamos conseguido dar uma visão geral de como começar a trabalhar com o módulo. Nos próximos artigos, iremos explorar mais detalhadamente as capacidades que a plataforma SIM7600E-H oferece, bem como como atualizar remotamente o aplicativo no módulo.
Convido a fazer perguntas nos comentários e também indicar qual aspecto das capacidades do módulo deve ser abordado nos próximos artigos.
Fonte: habr.com





