
Meccanismo di sviluppo dell'applicazione utente e caricamento nel modulo disponibile sia su Linux che su Windows. In questo articolo esamineremo in dettaglio come, utilizzando gli esempi forniti dall'SDK, compilare e caricare un'applicazione utente nel modulo.
Prima di scrivere questo articolo, un mio amico, che non ha esperienza nello sviluppo su Linux, mi ha chiesto di affrontare in modo dettagliato il processo di sviluppo di un'applicazione personalizzata per il modulo SIM7600E-H. Il criterio di valutazione della comprensibilità del materiale è stata la frase "in modo che io possa capire".
Ti invito a scoprire cosa ne è uscito.
L'articolo viene regolarmente aggiornato e integrato
Prelude
I moduli GSM vengono solitamente utilizzati esclusivamente per la trasmissione di dati, chiamate vocali, invio di SMS e simili. Tutto ciò viene fatto tramite comandi AT inviati da un microcontrollore di controllo esterno. Tuttavia, esiste una categoria di moduli che consente di eseguire codice utente caricato dall'esterno. In alcuni casi, questo riduce significativamente il budget totale del dispositivo, permettendo di utilizzare un microcontrollore più semplice (e quindi più economico) o di rinunciarvi del tutto. Con l'avvento dei moduli LTE, gestiti da sistemi operativi Android o Linux, e le loro potenti risorse, è possibile affrontare qualsiasi compito disponibile per i processori più comuni. In questo articolo parleremo del SIM7600E-H, gestito da Linux. Esamineremo come caricare e avviare un'applicazione eseguibile.
Gran parte del materiale si basa sul documento "SIM7600 Open Linux Development Guide", ma alcune integrazioni, in particolare la versione in lingua russa, saranno utili. Questo articolo aiuterà coloro che stanno appena iniziando a esplorare il modulo a caricare un'applicazione dimostrativa e fornirà le competenze necessarie per il lavoro futuro.
Breve introduzione a chi è SIM7600E-H
SIM7600E-H è un modulo basato su un processore ARM Cortex-A7 da 1,3 GHz di Qualcomm, con un sistema operativo Linux (nucleo 3.18.20) al suo interno, in grado di operare con le bande di frequenza 2G/3G/LTE europee (compresa la Russia), supportando Cat.4 e garantendo una velocità massima di download fino a 150 Mbps e di upload fino a 50 Mbps. La ricca periferia, la gamma di temperature industriali e la presenza di navigazione GPS/GLONASS soddisfano ogni esigenza di una moderna soluzione modulare nel settore M2M.
Panoramica del sistema
Il modulo SIM7600E-H si basa su un sistema operativo Linux (nucleo 3.18.20). A sua volta, il file system è costruito su un file system journaling UBIFS (Unsorted Block Image File System).
Le caratteristiche salienti di questo file system includono:
- gestione delle partizioni, consente di creare, eliminare o modificare le loro dimensioni;
- garantisce l'allineamento della scrittura su tutto il supporto;
- gestisce i bad block;
- minimizza la probabilità di perdita di dati in caso di spegnimento imprevisto o altri guasti;
- tenuta dei log.
Descrizione presa da , dove viene spiegato più dettagliatamente questo tipo di filesystem.
Cioè, questo tipo di filesystem è ideale per le condizioni di lavoro difficili del modulo e per possibili problemi di alimentazione. Tuttavia, ciò non significa che le condizioni di alimentazione instabili siano un normale funzionamento del modulo, ma solo che il dispositivo è più resistente.
Memoria
La distribuzione delle aree di memoria è strutturata come segue:

È necessario allocare tre aree principali:
ubi0:rootfs – accessibile solo in lettura e contiene il kernel Linux.
ubi0:usrfs – utilizzato principalmente per il programma utente e la memorizzazione dei dati.
ubi0:cachefs – riservato per gli aggiornamenti FOTA. Se non c'è spazio sufficiente per scaricare l'aggiornamento, il sistema eliminerà i file non utilizzati liberando così spazio. Ma per motivi di sicurezza, non è consigliabile memorizzare i propri file lì.
Le tre partizioni sono distribuite come segue:
Filesystem
Dimensione
Usato
Disponibile
Utilizzo%
Montato su
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
Funzionalità disponibile
Come già accennato in precedenza, il modulo è basato sul chipset Cortex A7 di Qualcomm. Sarebbe errato non fornire un'unità così ad alte prestazioni per elaborare il programma utente e alleggerire il processore principale del dispositivo, delegando al modulo una parte del programma.
Per il programma utente saranno disponibili le seguenti modalità di funzionamento delle periferiche:
Pin No.
Name
Sys GPIO No.
Azione predefinita
Func1
Func2
Pull
Interruzione di risveglio
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
Stato
GPIO
Stato
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
—
Ammetti, l'elenco è impressionante e nota che parte della periferica viene utilizzata per funzionare come router. Cioè, sulla base di questo modulo, si può realizzare un piccolo router in grado di distribuire internet tramite Wi-Fi. A proposito, esiste già una soluzione pronta, chiamata SIM7600E-H-MIFI, che è una scheda miniPCIE con il modulo SIM7600E-H saldato e diversi jack per antenne, uno dei quali è un'antenna Wi-Fi. Tuttavia, questo è già un argomento per un materiale separato.
Ambiente (non giorno della settimana)
offrono agli sviluppatori la possibilità di scegliere l'ambiente di sviluppo più familiare sotto Linux o Windows. Se si tratta di un'unica applicazione eseguibile sul modulo, è meglio scegliere Windows, in quanto risulta più veloce e semplice. Se è prevista un'architettura complessa dell'applicazione e successivi aggiornamenti, è meglio usare Linux. Avremo inoltre bisogno di Linux per compilare i file eseguibili da caricare nel modulo; è sufficiente una macchina virtuale per la compilazione.
Tra le cose di cui avrete bisogno, non disponibili per il download pubblico, c'è il SDK, che può essere richiesto dal proprio distributore.
Installazione degli strumenti per lavorare con il modulo
Qui e oltre lavoreremo su Windows, essendo questo il sistema operativo più familiare per la maggior parte degli utenti.
Dovremo installare il software necessario in pochi semplici passaggi per iniziare a lavorare con il modulo:
- GNU/Linux
- Cygwin
- Driver
- ADB
Installazione di GNU/Linux
Per compilare l'applicazione possiamo utilizzare qualsiasi compilatore compatibile con ARM-Linux. Noi utilizzeremo SourceryCodeBenchLiteARM GNU/Linux, disponibile per il download su .
Per assicurarmi che tutti i componenti siano installati correttamente, lascerò alcune schermate del processo di installazione. In linea di massima, non c'è nulla di complicato nell'installazione.
Per assicurarmi che tutti i componenti siano installati correttamente, lascerò alcune schermate del processo di installazione. In linea di massima, non c'è nulla di complicato nell'installazione.
- Accettiamo il contratto di licenza

- Indichiamo la cartella di installazione

- Manteniamo i componenti necessari senza modifiche

- Lasciamolo così com'è

- Alcuni “Avanti”, “Installa” e in pratica è tutto

Installazione di Cygwin
In seguito, per lo sviluppo avremo bisogno di un insieme di librerie e strumenti forniti da . Qui è tutto semplice; l'ultima versione di Cygwin può essere scaricata gratuitamente dal sito ufficiale del progetto; al momento della scrittura dell'articolo, era disponibile la versione 3.1.5, che abbiamo utilizzato per la preparazione del materiale.
L'installazione di Cygwin non è complicata, l'unica cosa da scegliere è il mirror da cui l'installer scaricherà i file necessari; selezioniamo qualsiasi opzione e installiamo, così come un insieme di strumenti e librerie, lasciando selezionate tutte le librerie e gli strumenti disponibili.
Installazione dei driver
Dopo che il modulo è stato collegato al PC, sarà necessario installare i driver. È consigliato richiederli al proprio distributore. Non raccomando di cercarli online da soli, poiché potrebbe richiedere molto tempo trovare la causa del conflitto degli apparecchi.

Tra le porte rilevate vediamo le seguenti:
Windows
Linux
Descrizione
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
Come avrete notato, tra le porte nello screenshot non c'è USB ADB, questo perché la porta ADB nel modulo è chiusa di default e deve essere attivata inviando il comando ‘AT+CUSBADB=1’ alla porta AT del modulo e riavviarlo (questo può essere fatto con il comando ‘AT+CRESET’).
Alla fine otteniamo l'interfaccia desiderata nel gestore dispositivi:

Abbiamo finito con i driver, passiamo ad ADB.
Installazione di ADB
Visitiamo il sito ufficiale degli sviluppatori Android su . Non scaricheremo il pesante Android Studio, ci basta la riga di comando, disponibile per il download al link 'Download SDK Platform-Tools for Windows'.

Scarichiamo e scompattiamo l'archivio ottenuto nella radice del disco C.
Variabili d'ambiente
Dopo l'installazione di Cygwin, sarà necessario aggiungere il percorso Cygwin/bin/ alle variabili d'ambiente di sviluppo (Pannello di controllo classico → Sistema → Impostazioni avanzate di sistema → Avanzate → Variabili d'ambiente → Variabili di sistema → Path → Modifica), come mostrato nello screenshot qui sotto:

Allo stesso modo, aggiungiamo il percorso dell'archivio ADB scaricato e scompattato nella radice del disco C.

Facciamo clic su OK diverse volte e riavviamo il computer.
Dopo il riavvio, possiamo facilmente verificare se ADB funziona correttamente, aprendo il prompt dei comandi (Win+R → cmd) e digitando il comando 'adb version'. Otterremo un risultato simile a questo:

Colleghiamo il modulo al PC (se sono stati disconnessi) e controlliamo se ADB lo rileva con il comando 'adb devices':

Pronto, abbiamo completato la configurazione della connessione al modulo e possiamo avviare la shell per lavorare con il modulo.

Estrazione e compilazione del SDK
Una volta accesso alla shell e avviato il lavoro con la riga di comando del modulo, proviamo a compilare la nostra prima applicazione da caricare nel modulo.
Molti potrebbero avere difficoltà con questo! Poiché il modulo funziona su un sistema operativo Linux, per evitare conflitti durante la compilazione del codice su Windows, è meglio compilare in un ambiente nativo: Linux.
Non ci soffermeremo nel dettaglio su come, in assenza di Linux e senza voglia di installarlo sul proprio computer, sia possibile installarlo su uno virtuale. Utilizzeremo VirtualBox, installeremo Ubuntu versione 20.04 (versione attuale al momento della scrittura dell'articolo) e inizieremo a lavorare con i compilatori, SDK, ecc.
Entriamo nell'ambiente Linux e estraiamo l'archivio ricevuto dal distributore.
simcom@VirtualBox:~/Desktop/OpenLinux$ sudo tar -xzf MDM9x07_OL_2U_22_V1.12_191227.tar.gz Passiamo alla cartella sim_open_sdk e configuriamo l'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 Rimaniamo in questa stessa cartella e eseguiamo le successive istruzioni mentre siamo in essa.
Installiamo la libreria libncurses5-dev, se non è già stata installata:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get update && sudo apt-get install libncurses5-dev -yPython, se non è stato anche installato:
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 gccCompilazione:
Ora dobbiamo compilare diversi file, eseguiamo sequentialmente i seguenti comandi.
Se durante la compilazione appare la finestra di configurazione del kernel, scegli semplicemente Exit e torna alla console; al momento non abbiamo bisogno di configurare il kernel.
Eseguiamo:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ makeCompiliamo il bootloader:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make abootCompiliamo il kernel:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel
Compiliamo il filesystem root:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make rootfsPer gli utenti Linux sarà importante compilare il driver del modulo:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_moduleCompiliamo il demo:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make demoDopo di che, nella directory sim_open_sdk/output appariranno diversi nuovi file:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ ls output/
appsboot.mbn boot.img demo_app helloworld system.img
Demo
Proviamo a caricare la dimostrazione nel nostro modulo e vediamo cosa ne verrà fuori.
Caricamento
Nella directory sim_open_sdk possiamo vedere il file demo_app. Lo preleviamo e lo trasferiamo nella radice del disco C del PC a cui è collegato il modulo. Dopodiché avviamo il prompt dei comandi di Windows (Win+R -> cmd) e inseriamo:
C:>adb push C:demo_app /data/La console ci informerà:
C:demo_app: 1 file pushed, 0 skipped. 151.4 MB/s (838900 bytes in 0.005s)Ciò significa che il file è stato inviato correttamente al modulo e ci rimane solo da eseguirlo. Non perdiamo tempo.
Eseguiamo:
C:>adb shellAmplifichiamo i diritti del file caricato:
/ # cdhmod 777 /data/demo_appE lanciamo:
/ # /data/demo_appNella stessa console, il modulo ci informerà di seguito:
SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205
Si prega di selezionare un'opzione per testare dagli elementi elencati di seguito.
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
Opzione >
Diamo un'occhiata all'IMEI del modulo, inseriamo 7 (passaggio alla modalità comando) e poi inseriamo 5:
Seleziona un'opzione da testare tra gli elementi elencati di seguito.
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
Opzione > 7
Seleziona un'opzione da testare tra gli elementi elencati di seguito.
1. ottieni Versione Modulo 2. ottieni CSQ
3. ottieni CREG 4. ottieni ICCID
5. ottieni IMEI 6. ottieni CIMI
99. torna
Opzione > 5
IMEI: 867584030090489
Seleziona un'opzione da testare tra gli elementi elencati di seguito.
1. ottieni Versione Modulo 2. ottieni CSQ
3. ottieni CREG 4. ottieni ICCID
5. ottieni IMEI 6. ottieni CIMI
99. torna
Opzione >
In questo modo vedremo l'IMEI del modulo.
In conclusione
Spero che siamo riusciti a fornirvi una panoramica su come iniziare a lavorare con il modulo. Nei prossimi articoli esploreremo più in dettaglio le possibilità offerte dalla piattaforma SIM7600E-H, così come il modo in cui è possibile aggiornare il proprio applicativo nel modulo da remoto.
Vi invito a fare domande nei commenti e a indicare quale aspetto delle capacità del modulo dovrebbe essere riflesso nei prossimi articoli.
Fonte: habr.com





