OpenLinux w składzie modułów SIM7600E-H

OpenLinux w składzie modułów SIM7600E-H

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 SIMCom Wireless Solutions 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 stąd, 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:

OpenLinux w składzie modułów SIM7600E-H

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)

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

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

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.

  1. Akceptujemy umowę licencyjną
    OpenLinux w składzie modułów SIM7600E-H
  2. Wskazujemy folder instalacyjny
    OpenLinux w składzie modułów SIM7600E-H
  3. Potrzebne komponenty pozostawiamy bez zmian
    OpenLinux w składzie modułów SIM7600E-H
  4. Zostawiamy jak jest
    OpenLinux w składzie modułów SIM7600E-H
  5. Kilka razy „Next”, „Install” i w zasadzie tyle
    OpenLinux w składzie modułów SIM7600E-H

Instalacja Cygwin

Następnie dla rozwoju będziemy potrzebować zestawu bibliotek i narzędzi dostarczonych przez Cygwin.. 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ń.

OpenLinux w składzie modułów SIM7600E-H

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ń:

OpenLinux w składzie modułów SIM7600E-H

Z końcówką sterowników skończone, przechodzimy do ADB.

Instalacja ADB

Wchodzimy na oficjalną stronę Android Developer pod linkiem. Nie będziemy pobierać obszernego Android Studio, wystarczy nam wiersz poleceń, dostępny do pobrania pod linkiem „Pobierz SDK Platform-Tools dla Windows”.

OpenLinux w składzie modułów SIM7600E-H

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:

OpenLinux w składzie modułów SIM7600E-H

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

OpenLinux w składzie modułów SIM7600E-H

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:

OpenLinux w składzie modułów SIM7600E-H

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

OpenLinux w składzie modułów SIM7600E-H

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

OpenLinux w składzie modułów SIM7600E-H

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

Python, jeśli również nie został zainstalowany:

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

i gcc:

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

Kompilacja:

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

Kompilujemy bootloader:

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

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

Dla użytkowników Linuxa szczególnie istotne będzie skompilowanie sterownika modułu:

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

Skompilujemy demonstrację:

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

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

Rozszerzamy uprawnienia przesłanego pliku:

/ # cdhmod 777 /data/demo_app

I uruchamiamy:

/ # /data/demo_app

W 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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster