OpenLinux come parte dei moduli SIM7600E-H

OpenLinux come parte dei moduli SIM7600E-H

Il meccanismo per lo sviluppo di applicazioni personalizzate e il caricamento nel modulo è disponibile sia per il sistema operativo Linux che per Windows. In questo articolo esploreremo in dettaglio come utilizzare gli esempi forniti dal SDK SIMCom Wireless Solutions per compilare e caricare un'applicazione personalizzata nel modulo.

Prima di scrivere questo articolo, un mio amico, che non ha esperienza nello sviluppo su Linux, mi ha chiesto di affrontare la questione in modo il più dettagliato possibile, per quanto riguarda il processo di sviluppo di un'applicazione per il modulo SIM7600E-H. Il criterio per valutare la comprensibilità del materiale è stata la frase "in modo che possa capire".

Ti invito a dare un'occhiata a ciò che è stato realizzato.

L'articolo viene regolarmente integrato e aggiornato

Preludio

Di solito, i moduli di comunicazione mobile vengono utilizzati solo per la trasmissione di dati, chiamate vocali, invio di SMS e simili. Tutto ciò avviene tramite comandi AT inviati da un microcontrollore esterno. Ma esiste una categoria di moduli che consente di eseguire codice personalizzato caricato dall'esterno. In alcuni casi, ciò riduce significativamente il budget complessivo del dispositivo, consentendo di usare un microcontrollore più semplice (e quindi più economico) o di rinunciarvi del tutto. Con l'arrivo dei moduli LTE, gestiti da sistemi operativi Android o Linux e con le loro potenti risorse, è possibile affrontare qualsiasi compito che sia accessibile ai processori più comuni. In questo articolo parleremo del SIM7600E-H, gestito dal sistema operativo Linux. Vedremo come caricare e avviare un'applicazione eseguibile.

Gran parte del materiale si basa sul documento “SIM7600 Open Linux development guide”, ma alcuni aggiornamenti e in particolare la versione in lingua russa saranno utili. L'articolo aiuterà chi si sta appena avvicinando al modulo a raggiungere il caricamento di un'applicazione dimostrativa e fornirà le competenze necessarie per il lavoro futuro.

In breve, chi è il SIM7600E-H

Il SIM7600E-H è un modulo basato sul processore ARM Cortex-A7 da 1.3GHz di Qualcomm, con un sistema operativo Linux (kernel 3.18.20) al suo interno, in grado di operare con bande di frequenze 2G/3G/LTE europee (inclusa quelle russe), supportando Cat.4, realizzando una velocità massima di download fino a 150Mbps e upload fino a 50Mbps. Una ricca periferica, un intervallo di temperatura industriale e la presenza di navigazione GPS/GLONASS soddisfano qualsiasi esigenza di una moderna soluzione modulare nel contesto M2M.

Panoramica del sistema

Il modulo SIM7600E-H si basa sul sistema operativo Linux (kernel 3.18.20). A sua volta, il file system è costruito su un file system journaling UBIFS (Unsorted Block Image File System).

Le caratteristiche principali di questo file system includono:

  • funziona con le partizioni, consente di crearle, eliminarle o cambiarne la dimensione;
  • garantisce l'allineamento della scrittura sull'intero supporto;
  • gestisce i blocchi danneggiati;
  • minimizza la probabilità di perdita di dati in caso di spegnimento improvviso o altri guasti;
  • registrazione dei log.

La descrizione è presa da qui, dove viene spiegato più dettagliatamente questo file system.

Pertanto, questo tipo di file system è perfetto per le condizioni di lavoro severe del modulo e per i possibili problemi di alimentazione. Ma ciò non significa che le condizioni di alimentazione instabile siano previste come modalità di funzionamento del modulo, questo indica solo una maggiore vitalità del dispositivo.

Memoria

La distribuzione delle aree di memoria è organizzata nel seguente modo:

OpenLinux come parte dei moduli SIM7600E-H

Bisogna distinguere tre aree principali:

ubi0:rootfs – accessibile solo in lettura e contiene il kernel Linux stesso
ubi0:usrfs – utilizzato principalmente per programmi utente e archiviazione dati
ubi0:cachefs – riservato per gli aggiornamenti FOTA. Se la spazio disponibile non è sufficiente per scaricare l'aggiornamento, il sistema eliminerà i file non utilizzati e libererà spazio. Tuttavia, per motivi di sicurezza, non è consigliabile conservarvi i propri file.

Tutte e tre le partizioni sono distribuite nel seguente modo:

Filesystem
Dimensione
Utilizzati
Disponibile
Uso%
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, il modulo è basato sul chipset Cortex A7 di Qualcomm. Sarebbe sbagliato non fornire un nucleo così ad alte prestazioni per gestire le applicazioni utente e alleggerire il processore principale del dispositivo, delegando al modulo parte delle operazioni.

Per l'applicazione utente, avremo a disposizione le seguenti modalità di funzionamento della periferica:

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

Concordate, l'elenco è imponente e notate: parte della periferica è usata per far funzionare il modulo come un router. Cioè, basandosi su un tale modulo, è possibile creare un piccolo router che distribuirà internet tramite Wi-Fi. A proposito, esiste già una soluzione pronta, chiamata SIM7600E-H-MIFI, che consiste in una scheda miniPCIE con il modulo SIM7600E-H saldato e diversi connettori per antenne, uno dei quali è l'antenna Wi-Fi. Tuttavia, questo è già un argomento per un materiale separato.

Ambiente (non giorno della settimana)

SIMCom Wireless Solutions danno agli sviluppatori la possibilità di scegliere l'ambiente di sviluppo più familiare tra Linux o Windows. Se si tratta di un'unica applicazione eseguibile sul modulo, è meglio scegliere Windows, in quanto sarà più rapido e semplice. Se si prevede un'architettura complessa dell'applicazione e futuri aggiornamenti, è meglio usare Linux. Avremo anche bisogno di Linux per la compilazione dei file eseguibili da caricare sul modulo, per la compilazione è sufficiente una macchina virtuale.

Di ciò di cui avrete bisogno, non disponibile per il download libero: SDK, che può essere richiesto al proprio distributore.

Installazione degli strumenti per lavorare con il modulo

Da qui in poi lavoreremo su Windows, poiché è il sistema operativo più familiare alla maggior parte degli utenti.

Avremo bisogno di installare in pochi semplici passaggi il software necessario per imparare a lavorare con il modulo:

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

Installazione di GNU/Linux

Per assemblare l'applicazione, puoi utilizzare qualsiasi compilatore compatibile con ARM-Linux. Noi utilizzeremo SourceryCodeBenchLiteARM GNU/Linux disponibile per il download su link.

Per garantire che tutti i componenti siano installati correttamente, lascerò alcuni screenshot del processo di installazione. In linea di massima, non c'è nulla di difficile nell'installazione.

Per garantire che tutti i componenti siano installati correttamente, lascerò alcuni screenshot del processo di installazione. In linea di massima, non c'è nulla di difficile 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. Lasciamo invariati i componenti necessari
    OpenLinux come parte dei moduli SIM7600E-H
  4. Lasciamo così com'è
    OpenLinux come parte dei moduli SIM7600E-H
  5. Qualche volta su "Avanti", "Installa" e in sostanza è tutto
    OpenLinux come parte dei moduli SIM7600E-H

Installazione di Cygwin

Successivamente, per la programmazione, sarà necessario un set di librerie e utilità dal pacchetto fornito Cygwin. Qui è tutto semplice, la versione attuale 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.

Nell'installazione di Cygwin non c'è nulla di complesso, l'unica cosa da scegliere è lo specchio da cui il programma di installazione scaricherà i file necessari; scegliamo qualsiasi specchio e procediamo all'installazione, lasciando selezionate tutte le librerie e utilità disponibili.

Installazione dei driver

Dopo aver collegato il modulo al PC, sarà necessario installare i driver. Puoi richiederli al tuo distributore (consigliato). Non raccomando di cercarli autonomamente su Internet, poiché potrebbe richiedere molto tempo per trovare la causa del conflitto dei dispositivi.

OpenLinux come parte dei moduli SIM7600E-H

Tra le porte assegnate 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 aggiungi porta di debug

Come probabilmente 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 riavviandolo (puoi farlo con il comando ‘AT+CRESET’).

Alla fine otterremo l'interfaccia desiderata nel gestore dispositivi:

OpenLinux come parte dei moduli SIM7600E-H

Abbiamo terminato con i driver, passiamo a ADB.

Installazione di ADB

Visita il sito ufficiale di Android Developer 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

Scarica e decomprimi l'archivio ottenuto nella radice del disco C.

Variabili ambiente

Dopo aver installato Cygwin, è necessario aggiungere il percorso Cygwin/bin/ alle variabili di ambiente di sviluppo (Pannello di controllo classico → Sistema → Impostazioni avanzate di sistema → Avanzate → Variabili di 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 decompresso nella radice del disco C.

OpenLinux come parte dei moduli SIM7600E-H

Facciamo clic su OK più volte e riavviamo il computer.

Dopo il riavvio, possiamo facilmente controllare 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 per caso l'abbiamo scollegato) e verifichiamo se ADB lo riconosce con il comando 'adb devices':

OpenLinux come parte dei moduli SIM7600E-H

Fatto, a questo punto la configurazione della connessione al modulo è completata e possiamo avviare il shell per lavorare con il modulo.

OpenLinux come parte dei moduli SIM7600E-H

Decompressione e compilazione dell'SDK

Dopo aver ottenuto accesso al shell e poter iniziare a lavorare con il prompt dei comandi del modulo, proviamo a compilare la nostra prima applicazione da caricare nel modulo.

Molti possono 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 su come si possa installare Linux su una macchina virtuale in assenza di Linux e con poca voglia di installarlo sulla propria macchina. Noi useremo VirtualBox, installeremo Ubuntu versione 20.04 (versione attuale al momento della scrittura dell'articolo) e cominceremo a lavorare con compilatori, SDK, ecc.

Passiamo all'ambiente Linux e decompiliamo l'archivio ricevuto dal distributore.

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

Accediamo alla cartella sim_open_sdk e aggiungiamo 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 ed eseguiamo i comandi successivi rimanendo qui.
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 è già stato 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, eseguendo i seguenti comandi in sequenza.

Se durante la compilazione appare una finestra di configurazione del kernel, selezioniamo semplicemente Exit e torniamo al terminale. Non è necessario configurare il kernel adesso.

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 file di sistema root:

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

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

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

Compiliamo la demo:

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

Dopo questo, nella directory sim_open_sdk\/output appariranno diversi nuovi file:

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

Demo

Proviamo a caricare la dimostrazione nel nostro modulo e vediamo cosa ne esce.

Avvio

Nella directory sim_open_sdk possiamo vedere il file demo_app. Prendiamolo e spostiamolo nella radice del disco C del PC a cui è collegato il modulo. Dopodiché, apriamo il prompt dei comandi di Windows (Win+R -> cmd) e digitiamo:

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

Il terminale ci dirà:

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

Questo significa che il file è stato inviato con successo al modulo e ora non ci resta che avviarlo. Non perdiamo tempo.

Eseguiamo:

C:>adb shell

Estendiamo i permessi del file caricato:

/ # cdhmod 777 /data/demo_app

E lo avviamo:

/ # /data/demo_app

Nello stesso terminale, il modulo ci dirà quanto segue:

SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205

Per favore seleziona un'opzione da 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 >   

Vediamo l'IMEI del modulo, inseriamo 7 (per passare alla modalità comando) e poi inseriamo 5:

Si prega di selezionare un'opzione da 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 > 7

Si prega di selezionare un'opzione da testare dagli elementi elencati di seguito.

1. get Module Version         2. get CSQ
3. get CREG                   4. get ICCID
5. get IMEI                   6. get CIMI
99. back
Opzione > 5
IMEI: 867584030090489

Si prega di selezionare un'opzione da testare dagli elementi elencati di seguito.

1. get Module Version         2. get CSQ
3. get CREG                   4. get ICCID
5. get IMEI                   6. get CIMI
99. back
Opzione >

Così vedremo l'IMEI del modulo.

In conclusione

Spero che siamo riusciti a dare una panoramica generale su come iniziare a lavorare con il modulo. Negli articoli successivi esamineremo in dettaglio le funzionalità offerte dalla piattaforma SIM7600E-H e come aggiornare remotamente la propria applicazione sul modulo.

Ti invito a porre domande nei commenti e a indicare quali aspetti delle funzionalità del modulo dovrebbero essere trattati 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