OpenLinux come parte dei moduli SIM7600E-H

OpenLinux come parte dei moduli SIM7600E-H

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, SIMCom Wireless Solutions 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 da qui, 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:

OpenLinux come parte dei moduli SIM7600E-H

È 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)

SIMCom Wireless Solutions 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:

  1. GNU/Linux
  2. Cygwin
  3. Driver
  4. 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 link.

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.

  1. Accettiamo il contratto di licenza
    OpenLinux come parte dei moduli SIM7600E-H
  2. Indichiamo la cartella di installazione
    OpenLinux come parte dei moduli SIM7600E-H
  3. Manteniamo i componenti necessari senza modifiche
    OpenLinux come parte dei moduli SIM7600E-H
  4. Lasciamolo così com'è
    OpenLinux come parte dei moduli SIM7600E-H
  5. Alcuni “Avanti”, “Installa” e in pratica è tutto
    OpenLinux come parte dei moduli SIM7600E-H

Installazione di Cygwin

In seguito, per lo sviluppo avremo bisogno di un insieme di librerie e strumenti forniti da Cygwin. 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.

OpenLinux come parte dei moduli SIM7600E-H

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:

OpenLinux come parte dei moduli SIM7600E-H

Abbiamo finito con i driver, passiamo ad ADB.

Installazione di ADB

Visitiamo il sito ufficiale degli sviluppatori Android su link. Non scaricheremo il pesante Android Studio, ci basta la riga di comando, disponibile per il download al link 'Download SDK Platform-Tools for Windows'.

OpenLinux come parte dei moduli SIM7600E-H

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:

OpenLinux come parte dei moduli SIM7600E-H

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

OpenLinux come parte dei moduli SIM7600E-H

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:

OpenLinux come parte dei moduli SIM7600E-H

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

OpenLinux come parte dei moduli SIM7600E-H

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

OpenLinux come parte dei moduli SIM7600E-H

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 -y

Python, se non è stato anche installato:

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

e gcc:

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

Compilazione:

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$ make

Compiliamo il bootloader:

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

Compiliamo 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 rootfs

Per gli utenti Linux sarà importante compilare il driver del modulo:

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

Compiliamo il demo:

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

Dopo 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 shell

Amplifichiamo i diritti del file caricato:

/ # cdhmod 777 /data/demo_app

E lanciamo:

/ # /data/demo_app

Nella 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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster