
Mechanizm tworzenia aplikacji użytkownika i przesyłania jej do modułu jest dostępny zarówno w systemie operacyjnym Linux, jak i Windows. W tym artykule szczegółowo omówimy, jak skorzystać z przykładów z SDK dostarczanego przez skompilować i przesłać aplikację użytkownika do modułu.
Zanim napisałem ten artykuł, mój znajomy, który nie ma doświadczenia z programowaniem w Linuxie, poprosił, abym jak najdokładniej opisał proces tworzenia własnej aplikacji dla modułu SIM7600E-H. Kryterium oceny przystępności materiału było określenie „tak, żeby ZROZUMIAŁEM”.
Zachęcam do zapoznania się z rezultatem.
Artykuł jest regularnie uzupełniany i aktualizowany.
Wstęp
Zazwyczaj moduły komunikacji komórkowej są wykorzystywane tylko do przesyłania danych, połączeń głosowych, wysyłania SMS-ów i podobnych działań. Wszystko to odbywa się za pomocą komend AT wysyłanych z zewnętrznego mikrokontrolera. Istnieje jednak kategoria modułów, które pozwalają na wykonywanie kodu użytkownika ładowanego zewnętrznie. W niektórych przypadkach znacząco zmniejsza to całkowity budżet urządzenia, umożliwiając zastosowanie prostszego (a zatem tańszego) mikrokontrolera lub całkowite zrezygnowanie z niego. Wraz z pojawieniem się modułów LTE zarządzanych przez systemy operacyjne Android lub Linux oraz ich potężnymi zasobami, można rozwiązywać wszelkie problemy, które są dostępne dla popularnych procesorów. W tym artykule omówimy moduł SIM7600E-H, działający pod kontrolą systemu Linux. Zobaczymy, jak załadować i uruchomić aplikację wykonywalną.
Materiał w dużej mierze oparty jest na dokumencie „SIM7600 Open Linux development guide”, ale pewne uzupełnienia, a przede wszystkim wersja w języku rosyjskim będą przydatne. Artykuł pomoże tym, którzy dopiero zaczynają naukę obsługi modułu, dotrzeć do etapu ładowania aplikacji demonstracyjnej i zdobędą niezbędne umiejętności do późniejszej pracy.
Krótko o tym, kim jest SIM7600E-H
SIM7600E-H to moduł zbudowany na bazie procesora ARM Cortex-A7 1.3GHz od Qualcomm, działający na systemie operacyjnym Linux (jądro 3.18.20), zdolny do pracy w europejskich (w tym także rosyjskich) pasmach częstotliwości 2G/3G/LTE, wspierający Cat.4, oferujący maksymalną prędkość pobierania do 150Mbps i wysyłania do 50Mbps. Bogata peryferia, przemysłowy zakres temperatur oraz wbudowana nawigacja GPS/GLONASS spełniają wszystkie wymagania nowoczesnych rozwiązań modułowych w tematyce M2M.
Przegląd systemu
Moduł SIM7600E-H bazuje na systemie operacyjnym Linux (jądro 3.18.20). Z kolei system plików oparty jest na dziennikowym systemie plików UBIFS (Unsorted Block Image File System).
Do ważnych cech tego systemu plików należą:
- praca z partycjami, umożliwiająca ich tworzenie, usuwanie lub zmianę rozmiaru;
- zapewnia wyrównanie zapisu w całym zakresie nośnika;
- praca z uszkodzonymi blokami;
- minimalizacja ryzyka utraty danych podczas awaryjnego wyłączenia zasilania lub innych awarii;
- prowadzenie dzienników.
Opis pochodzi , tam także szczegółowo opisano ten system plików.
To znaczy, że ten typ systemu plików doskonale nadaje się do trudnych warunków pracy modułu oraz możliwych problemów z zasilaniem. Ale nie oznacza to, że warunki niestabilnego zasilania będą oczekiwanym trybem pracy modułu, mówi to tylko o większej żywotności urządzenia.
Pamięć
Rozdzielenie obszarów pamięci jest zbudowane w następujący sposób:

Należy wyróżnić trzy główne obszary:
ubi0:rootfs – dostępny tylko do odczytu i zawiera samo jądro Linux
ubi0:usrfs – używany głównie dla programów użytkowników oraz przechowywania danych
ubi0:cachefs – zarezerwowany dla aktualizacji FOTA. Jeśli dostępna przestrzeń będzie niewystarczająca do pobrania aktualizacji – system usunie nieużywane pliki, aby zwolnić miejsce. Jednak z powodów bezpieczeństwa – nie należy umieszczać tam swoich plików.
Wszystkie trzy partycje są rozdzielone w następujący sposób:
Filesystem
Size
Używane
Dostępne
Użycie %
Zamontowane w
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
Dostępna funkcjonalność
Jak już wspomniano, moduł oparty jest na chipsecie Cortex A7 od Qualcomm. Byłoby błędem nie zapewnić tak wydajnego rdzenia do przetwarzania aplikacji użytkownika oraz odciążenia głównego procesora urządzenia, przenosząc część programu na moduł.
Dla aplikacji użytkownika dostępne będą następujące tryby pracy peryferiów:
Numer pinu.
Nazwa
Numer sys GPIO.
Domyślne działanie
Func1
Func2
Pobierz
Przerwanie wybudzenia
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
—
Karta SD
—
—
B-PD
—
22
SD_DATA0
—
Karta SD
—
—
B-PD
—
23
SD_DATA1
—
Karta SD
—
—
B-PD
—
24
SD_DATA2
—
Karta SD
—
—
B-PD
—
25
SD_DATA3
—
Karta SD
—
—
B-PD
—
26
SD_CLK
—
Karta SD
—
—
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
—
Zgadzam się, lista jest imponująca, zwróć uwagę, że część peryferiów jest wykorzystywana do działania modułu jako router. T. j. na podstawie takiego modułu można stworzyć mały router, który będzie udostępniał internet przez Wi-Fi. Nota bene, istnieje już gotowe rozwiązanie, nazywa się SIM7600E-H-MIFI i jest to karta miniPCIE z wlutowanym modułem SIM7600E-H oraz kilkoma wyjściami antenowymi, z których jedno jest anteną Wi-Fi. Zresztą, to już materiał na osobny temat.
Środowisko (nie dzień tygodnia)
umożliwiają deweloperom samodzielny wybór najbardziej znanego środowiska programistycznego pod Linux lub Windows. Jeśli chodzi o jedną aplikację wykonywalną na module, lepiej wybrać Windows, co pozwoli na szybsze i prostsze wykonanie. Jeśli przewidziana jest skomplikowana architektura aplikacji i późniejsze aktualizacje – lepiej użyć Linux. Będziemy również potrzebować Linuxa do kompilacji plików wykonywalnych do późniejszego załadowania do modułu, a do kompilacji wystarczy maszyna wirtualna.
Z tego, co będzie potrzebne, a co nie jest dostępne do pobrania publicznie – SDK, które można zamówić u swojego dystrybutora.
Instalacja narzędzi do pracy z modułem
Tutaj i dalej będziemy pracować w systemie Windows jako najbardziej znajomej OS dla większości użytkowników.
Będziemy potrzebować w kilku prostych krokach zainstalować niezbędne oprogramowanie do dalszej nauki obsługi modułu:
- GNU/Linux
- Cygwin.
- Sterowniki
- ADB
Instalacja GNU/Linux
Do budowy aplikacji można użyć dowolnego kompilatora zgodnego z ARM-Linux. My skorzystamy z SourceryCodeBenchLiteARM GNU/Linux, dostępnego do pobrania pod .
Aby wszystkie komponenty były zainstalowane właściwie, zostawię kilka zrzutów ekranu z procesu instalacji. W zasadzie w instalacji nie ma nic skomplikowanego.
Aby wszystkie komponenty były zainstalowane właściwie, zostawię kilka zrzutów ekranu z procesu instalacji. W zasadzie w instalacji nie ma nic skomplikowanego.
- Akceptujemy umowę licencyjną

- Wskazujemy folder instalacyjny

- Potrzebne komponenty pozostawiamy bez zmian

- Zostawiamy jak jest

- Kilka razy „Next”, „Install” i w zasadzie tyle

Instalacja Cygwin
Następnie dla rozwoju będziemy potrzebować zestawu bibliotek i narzędzi dostarczonych przez . Tutaj wszystko jest proste, aktualną wersję Cygwin można pobrać za darmo ze strony oficjalnej projektu, w momencie pisania artykułu dostępna była wersja 3.1.5, której użyliśmy podczas przygotowywania materiału.
W instalacji Cygwin nie ma nic skomplikowanego, jedyne co trzeba zrobić, to wybrać – lusterko, z którego instalator pobierze potrzebne pliki, wybieramy dowolne i instalujemy, a także zestaw narzędzi i bibliotek, pozostawiając wybrane wszystkie dostępne biblioteki i narzędzia.
Instalacja sterowników
Po podłączeniu modułu do PC należy zainstalować sterowniki. Można je poprosić u swojego dystrybutora (zalecane). Nie polecam samodzielnego szukania w Internecie, ponieważ może to wymagać dużo czasu na znalezienie przyczyny konfliktu urządzeń.

Wśród wyodrębnionych portów widzimy następujące:
Windows
Linuxa
Opis
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
Jak zapewne zauważyliście, wśród portów na zrzucie ekranu nie ma USB ADB, ponieważ port ADB w module jest domyślnie zamknięty i trzeba go włączyć, wysyłając polecenie ‘AT+CUSBADB=1’ do portu AT modułu i zrestartować go (można to zrobić poleceniem ‘AT+CRESET’).
W wyniku otrzymamy potrzebny interfejs w menedżerze urządzeń:

Z końcówką sterowników skończone, przechodzimy do ADB.
Instalacja ADB
Wchodzimy na oficjalną stronę Android Developer pod . Nie będziemy pobierać obszernego Android Studio, wystarczy nam wiersz poleceń, dostępny do pobrania pod linkiem „Pobierz SDK Platform-Tools dla Windows”.

Pobieramy i wypakowujemy uzyskany archiwum w głównym katalogu dysku C.
Zmienna środowiskowa
Po zainstalowaniu Cygwin konieczne będzie dodanie ścieżki Cygwin/bin/ do zmiennych środowiskowych (Klasyczna Panel sterowania → System → Zaawansowane ustawienia systemu → Zaawansowane → Zmienne środowiskowe → Zmienne systemowe → Path → Edytuj), jak pokazano na zrzucie ekranu poniżej:

W podobny sposób dodajemy ścieżkę do pobranego i rozpakowanego archiwum ADB w głównym katalogu dysku C.

Kilka razy klikamy OK i restartujemy komputer.
Po restarcie można łatwo sprawdzić, czy ADB działa poprawnie, otwierając wiersz poleceń (Win+R → cmd) i wpisując polecenie 'adb version'. Otrzymamy mniej więcej taki wynik:

Podłączamy moduł do komputera (jeśli został odłączony) i sprawdzamy, czy ADB go wykrywa poleceniem 'adb devices':

Gotowe, na tym etapie konfiguracja połączenia z modułem została zakończona i możemy uruchomić shell do pracy z modułem.

Rozpakowywanie i kompilacja SDK
Po uzyskaniu dostępu do shella i rozpoczęciu pracy z wierszem poleceń modułu, spróbujemy skompilować naszą pierwszą aplikację do załadowania do modułu.
Z tym mogą pojawić się problemy! Ponieważ moduł działa na systemie operacyjnym Linux, aby uniknąć konfliktów podczas kompilacji kodu pod Windows – najlepiej kompilować w natywnym środowisku – Linux.
Nie będziemy się szczegółowo zatrzymywać na tym, jak w przypadku braku Linux i chęci jego zainstalowania na własnym komputerze, można go zainstalować na wirtualnym. My skorzystamy z VirtualBox, zainstalujemy Ubuntu w wersji 20.04 (aktualna wersja w momencie pisania artykułu) i pod nią rozpoczniemy pracę z kompilatorami, SDK itd.
Przechodzimy do środowiska Linux i rozpakowujemy archiwum otrzymane od dystrybutora.
simcom@VirtualBox:~/Desktop/OpenLinux$ sudo tar -xzf MDM9x07_OL_2U_22_V1.12_191227.tar.gz Przechodzimy do katalogu sim_open_sdk i dodajemy środowisko:
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 Pozostajemy w tym samym folderze i wykonujemy kolejne polecenia, będąc w nim.
Instalujemy bibliotekę libncurses5-dev, jeśli nie została jeszcze zainstalowana:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get update && sudo apt-get install libncurses5-dev -yPython, jeśli również nie został zainstalowany:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install python -yi gcc:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install gccKompilacja:
Teraz musimy skompilować kilka plików, wykonując kolejno następujące polecenia.
Jeśli podczas kompilacji pojawi się okno konfiguracji jądra – po prostu wybieramy Exit i wracamy do konsoli, obecnie nie ma potrzeby konfigurowania jądra.
Wykonujemy:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ makeKompilujemy bootloader:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make abootKompilujemy jądro:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel
Kompilujemy system plików root:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make rootfsDla użytkowników Linuxa szczególnie istotne będzie skompilowanie sterownika modułu:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_moduleSkompilujemy demonstrację:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make demoW wyniku czego w katalogu sim_open_sdk/output pojawi się kilka nowych plików:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ ls output/
appsboot.mbn boot.img demo_app helloworld system.img
Demo
Spróbujemy załadować demonstrację do naszego modułu i zobaczymy, co z tego wyjdzie.
Ładowanie
W katalogu sim_open_sdk możemy zobaczyć plik demo_app. Zabieramy go i przenosimy do głównego katalogu dysku C na komputerze, do którego podłączony jest moduł. Następnie otwieramy wiersz poleceń Windows (Win+R -> cmd) i wpisujemy:
C:>adb push C:demo_app /data/Konsola poinformuje nas:
C:demo_app: 1 file pushed, 0 skipped. 151.4 MB/s (838900 bytes in 0.005s)To oznacza, że plik został pomyślnie wysłany do modułu i pozostaje nam tylko go uruchomić. Nie zwlekajmy.
Wykonujemy:
C:>adb shellRozszerzamy uprawnienia przesłanego pliku:
/ # cdhmod 777 /data/demo_appI uruchamiamy:
/ # /data/demo_appW tej samej konsoli moduł przekaże nam następujące informacje:
SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205
Proszę wybrać opcję do przetestowania z poniższych przedmiotów.
1. WIFI 2. POŁĄCZENIE GŁOSOWE
3. POŁĄCZENIE DANYCH 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. Wersja 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
Opcja >
Sprawdźmy IMEI modułu, wpiszmy 7 (przejście do trybu poleceń), a następnie wpiszmy 5:
Proszę wybrać opcję do przetestowania z poniższej listy.
1. WIFI 2. ROZMOWA GŁOSOWA
3. ROZMOWA DANYCH 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(Karta SIM) 18. DMS(IMEI,MEID)
19. UART 20. SPI
21. Wersja 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. WYJŚCIE
Opcja > 7
Proszę wybrać opcję do przetestowania z poniższej listy.
1. pobierz wersję modułu 2. pobierz CSQ
3. pobierz CREG 4. pobierz ICCID
5. pobierz IMEI 6. pobierz CIMI
99. powrót
Opcja > 5
IMEI: 867584030090489
Proszę wybrać opcję do przetestowania z poniższej listy.
1. pobierz wersję modułu 2. pobierz CSQ
3. pobierz CREG 4. pobierz ICCID
5. pobierz IMEI 6. pobierz CIMI
99. powrót
Opcja >
W ten sposób zobaczymy IMEI modułu.
Na zakończenie
Mam nadzieję, że udało nam się stworzyć ogólny obraz tego, jak rozpocząć pracę z modułem. W kolejnych artykułach dokładniej omówimy możliwości, jakie oferuje platforma SIM7600E-H, oraz jak możemy zdalnie zaktualizować własną aplikację w module.
Zachęcam do zadawania pytań w komentarzach, a także do wskazania, jaki aspekt możliwości modułu powinien być odzwierciedlony w kolejnych artykułach.
Źródło: habr.com





