OpenLinux jako część modułów SIM7600E-H

OpenLinux jako część modułów SIM7600E-H

Mechanizm tworzenia własnej aplikacji i wczytywania jej do modułu dostępny jest zarówno pod systemem operacyjnym Linux, jak i Windows. W tym artykule szczegółowo przyjrzymy się, jak to zrobić, korzystając z przykładów z dostarczonego pakietu SDK Rozwiązania bezprzewodowe SIMCom skompiluj i załaduj niestandardową aplikację do modułu.

Przed napisaniem artykułu jeden ze znajomych, daleki od programowania pod Linuksa, poprosił mnie o jak najdokładniejsze podejście do kwestii opisania procesu tworzenia własnej aplikacji dla modułu SIM7600E-H. Kryterium oceny przystępności prezentacji materiału stanowiło sformułowanie „aby zrozumieć”.

Zapraszam do zapoznania się z tym co się wydarzyło.

Artykuł jest na bieżąco uzupełniany i aktualizowany

Gra wstępna

Zazwyczaj moduły komunikacji komórkowej wykorzystywane są wyłącznie do transmisji danych, połączeń głosowych, transmisji SMS-ów i tym podobnych. Wszystko to odbywa się poprzez polecenia AT wysyłane z zewnętrznego mikrokontrolera sterującego. Istnieje jednak kategoria modułów, które umożliwiają wykonanie niestandardowego kodu ładowanego z zewnątrz. W niektórych przypadkach znacznie zmniejsza to ogólny budżet urządzenia, pozwalając na zainstalowanie prostszego (i równie budżetowego) mikrokontrolera na płycie lub w ogóle z niego zrezygnować. Wraz z pojawieniem się modułów LTE sterowanych przez system operacyjny Android lub Linux i ich potężnymi zasobami, możliwe jest rozwiązanie wszelkich zadań dostępnych dla popularnych procesorów. W tym artykule omówimy SIM7600E-H kontrolowany przez system operacyjny Linux. Przyjrzymy się, jak pobrać i uruchomić aplikację wykonywalną.

Pod wieloma względami materiał opiera się na dokumencie „Przewodnik programowania SIM7600 Open Linux”, ale przydatne będą pewne uzupełnienia, a przede wszystkim wersja rosyjska. Artykuł pomoże tym, którzy dopiero zaczynają opanowywać moduł, zrozumieć, jak pobrać aplikację demonstracyjną i zapewnić niezbędne umiejętności do późniejszej pracy.

Krótko o tym, kim jest SIM7600E-H

SIM7600E-H to moduł zbudowany na procesorze ARM Cortex-A7 1.3 GHz firmy Qualcomm, posiadający w środku system operacyjny Linux (jądro 3.18.20), zdolny do współpracy z europejskimi (w tym rosyjskimi) pasmami częstotliwości 2G/3G/LTE obsługującymi Cat .4, zapewniający maksymalną prędkość pobierania do 150Mbps i prędkość wysyłania do 50Mbps. Bogate wyposażenie peryferyjne, przemysłowy zakres temperatur oraz obecność wbudowanej nawigacji GPS/GLONASS pokrywają wszelkie wymagania stawiane nowoczesnemu rozwiązaniu modułowemu w obszarze M2M.

Przegląd systemu

Moduł SIM7600E-H oparty jest na systemie operacyjnym Linux (jądro 3.18.20). Z kolei system plików zbudowany jest w oparciu o kronikowany system plików UBIFS (Unsorted Block Image File System).

Do ważnych cech tego systemu plików należą:

  • współpracuje z partycjami, umożliwia tworzenie, usuwanie lub zmianę ich rozmiaru;
  • zapewnia wyrównanie nagrywania na całej objętości nośnika;
  • współpracuje ze złymi blokami;
  • minimalizuje prawdopodobieństwo utraty danych podczas przerwy w dostawie prądu lub innych awarii;
  • prowadzenie logów.

Opis zabrany stąd, istnieje również bardziej szczegółowy opis takiego systemu plików.

Te. Ten typ systemu plików idealnie sprawdza się w trudnych warunkach pracy modułu i ewentualnych problemach z zasilaniem. Nie oznacza to jednak, że oczekiwanym trybem pracy modułu będą niestabilne warunki zasilania, a jedynie wskazuje na większą żywotność urządzenia.

Память

Rozkład obszarów pamięci jest skonstruowany w następujący sposób:

OpenLinux jako część modułów SIM7600E-H

Należy podkreślić trzy główne obszary:

ubi0:rootfs – tylko do odczytu i zawiera samo jądro Linuksa
ubi0:usrfs – używane głównie do przechowywania programów użytkownika i danych
ubi0:cahcefs – zarezerwowane dla aktualizacji FOTA. Jeśli dostępna przestrzeń nie wystarczy do pobrania aktualizacji, system usunie nieużywane pliki, zwalniając w ten sposób miejsce. Jednak ze względów bezpieczeństwa nie powinieneś umieszczać tam swoich plików.

Wszystkie trzy sekcje są dystrybuowane w następujący sposób:

System plików
Rozmiar
Używany
Dostępny
Używać%
Zamontowane na

ubi0:rootfs
40.7M
36.2M
4.4M
89%
/

ubi0:usrfs
10.5M
360 tysięcy
10.1M
3%
/dane

ubi0:cachefy
50.3M
20 tysięcy
47.7M
0%
/Pamięć podręczna

Dostępna funkcjonalność

Jak wspomniano powyżej, moduł zbudowany jest na chipsecie Cortex A7 firmy Qualcomm. Błędem byłoby nie zapewnienie tak wysokowydajnego rdzenia do przetwarzania programu użytkownika i odciążenia głównego procesora urządzenia poprzez przerzucenie części programu do modułu.

Dla programu użytkownika dostępne będą dla nas następujące tryby pracy peryferii:

Numer pina
Imię
Sys GPIO nr.
Akcja domyślna
Funk1
Funk2
Ciągnąć
Przerwanie budzenia

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_DANE1
-
WLAN
-
-
B-PD
-

28
SDIO_DANE2
-
WLAN
-
-
B-PD
-

29
SDIO_CMD
-
WLAN
-
-
B-PD
-

30
SDIO_DANE0
-
WLAN
-
-
B-PD
-

31
SDIO_DANE3
-
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
Rynek
GPIO
Rynek
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 i uwaga: część peryferii służy do obsługi modułu jako routera. Te. W oparciu o taki moduł można zbudować mały router, który będzie dystrybuował Internet poprzez Wi-Fi. Swoją drogą istnieje gotowe rozwiązanie o nazwie SIM7600E-H-MIFI i jest to karta miniPCIE z wlutowanym modułem SIM7600E-H i kilkoma pinami antenowymi, jednym z nich jest antena Wi-Fi. Jest to jednak temat na osobny artykuł.

Środa (nie jest dniem tygodnia)

Rozwiązania bezprzewodowe SIMCom dają programistom możliwość wyboru najbardziej znanego środowiska programistycznego dla systemu Linux lub Windows. Jeśli mówimy o jednej aplikacji wykonywalnej na module, to lepiej wybrać Windows, będzie szybciej i łatwiej. Jeśli spodziewana jest złożona architektura aplikacji i późniejsze aktualizacje, lepiej jest skorzystać z Linuksa. Potrzebujemy także Linuksa do skompilowania plików wykonywalnych do późniejszego załadowania do modułu, do kompilacji wystarczy maszyna wirtualna.

To, czego potrzebujesz, nie jest łatwo dostępne do pobrania — pakiet SDK, który możesz zamówić u swojego dystrybutora.

Instalacja narzędzi do pracy z modułem

W dalszej części będziemy pracować w systemie Windows jako najbardziej znanym systemie operacyjnym dla większości użytkowników.

Będziemy musieli w kilku prostych krokach zainstalować niezbędne oprogramowanie, aby później opanować pracę z modułem:

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

Instalacja GNU/Linuksa

Do zbudowania aplikacji możesz użyć dowolnego kompilatora kompatybilnego z ARM-Linux. Będziemy używać SourceryCodeBenchLiteARM GNU/Linuxtranslater dostępnego do pobrania pod adresem powiązanie.

Aby mieć pewność, że wszystkie komponenty zostały poprawnie zainstalowane, zostawię kilka zrzutów ekranu z procesu instalacji. W zasadzie w instalacji nie ma nic skomplikowanego.

Aby mieć pewność, że wszystkie komponenty zostały poprawnie zainstalowane, zostawię kilka zrzutów ekranu z procesu instalacji. W zasadzie w instalacji nie ma nic skomplikowanego.

  1. Akceptujemy umowę licencyjną
    OpenLinux jako część modułów SIM7600E-H
  2. Określ folder instalacyjny
    OpenLinux jako część modułów SIM7600E-H
  3. Niezbędne komponenty pozostawiamy bez zmian
    OpenLinux jako część modułów SIM7600E-H
  4. Zostaw to tak jak jest
    OpenLinux jako część modułów SIM7600E-H
  5. Kilka razy „Dalej”, „Zainstaluj” i w zasadzie to wszystko
    OpenLinux jako część modułów SIM7600E-H

Instalowanie Cygwina

Ponadto do programowania będziesz potrzebować zestawu bibliotek i narzędzi z dostarczonego zestawu Cygwin. Tutaj wszystko jest proste, aktualną wersję Cygwina można pobrać za darmo na oficjalnej stronie projektu, w momencie pisania tego tekstu dostępna była wersja 3.1.5, z której korzystaliśmy przygotowując materiał.

Instalacja Cygwina nie jest skomplikowana, jedyne co musisz wybrać to serwer lustrzany, z którego instalator pobierze niezbędne pliki, wybierze dowolny i zainstaluje, a także zestaw narzędzi i bibliotek, pozostawiając wszystkie dostępne biblioteki i wybrane media.

Instalacja sterowników

Po podłączeniu modułu do komputera PC konieczna będzie instalacja sterowników. Można je zamówić u dystrybutora (zalecane). Nie polecam samodzielnego przeszukiwania Internetu, bo... Znalezienie przyczyny konfliktu urządzeń może zająć dużo czasu.

OpenLinux jako część modułów SIM7600E-H

Wśród wybranych portów widzimy:

Windows
Linux
Opis

Diagnostyka SimTech HS-USB
Szeregowy USB
Interfejs diagnostyczny

SimTech HS-USB NMEA
Szeregowy USB
Interfejs GPS NMEA

SimTech HS-USB w porcie
Szeregowy USB
Interfejs portu AT

Modem SimTech HS-USB
Szeregowy USB
Interfejs portu modemu

Dźwięk SimTech HS-USB
Szeregowy USB
Interfejs USB Audio

Adapter SimTech HS-USB WWAN
Sieć USB
Interfejs NDIS WWAN

Android Composite ADB Interface
ADB USB
Android dodaje port debugowania

Jak zapewne zauważyłeś, wśród portów na zrzucie ekranu nie ma USB ADB, dzieje się tak dlatego, że port ADB w module jest domyślnie zamknięty i należy go włączyć wysyłając polecenie „AT+CUSBADB=1” do AT port modułu i zrestartuj go (można to zrobić za pomocą polecenia „AT+CRESET”).

W rezultacie otrzymujemy pożądany interfejs w menedżerze urządzeń:

OpenLinux jako część modułów SIM7600E-H

Skończyliśmy ze sterownikami, przejdźmy do ADB.

Instalowanie ADB

Przejdź do oficjalnej witryny programistów Androida powiązanie. Nie będziemy pobierać nieporęcznego Android Studio, wystarczy wiersz poleceń, który można pobrać za pomocą linku „Pobierz narzędzia platformy SDK dla systemu Windows”.

OpenLinux jako część modułów SIM7600E-H

Pobierz i rozpakuj powstałe archiwum do katalogu głównego dysku C.

Zmienne środowiska

Po zainstalowaniu Cygwin będziesz musiał dodać ścieżkę Cygwin/bin/ do zmiennych środowiskowych programowania (Klasyczny Panel sterowania → System → Zaawansowane ustawienia systemu → Zaawansowane → Zmienne środowiskowe → Zmienne systemowe → Ścieżka → Edytuj), jak pokazano na zrzucie ekranu poniżej:

OpenLinux jako część modułów SIM7600E-H

Podobnie dodaj ścieżkę do pobranego i rozpakowanego archiwum ADB do katalogu głównego dysku C.

OpenLinux jako część modułów SIM7600E-H

Kliknij kilka razy OK i uruchom ponownie komputer.

Po ponownym uruchomieniu możesz łatwo sprawdzić, czy ADB działa poprawnie, otwierając wiersz poleceń (Win+R → cmd) i wpisując polecenie „wersja adb”. Otrzymujemy coś takiego:

OpenLinux jako część modułów SIM7600E-H

Podłączmy moduł do komputera (jeśli tak się złożyło, że był odłączony) i sprawdźmy czy ADB go widzi komendą 'adb devices':

OpenLinux jako część modułów SIM7600E-H

Gotowe, kończy to konfigurację połączenia z modułem i możemy uruchomić powłokę do pracy z modułem.

OpenLinux jako część modułów SIM7600E-H

Rozpakowywanie i kompilowanie SDK

Teraz, gdy mamy dostęp do powłoki i możemy rozpocząć pracę z wierszem poleceń modułu, spróbujmy skompilować naszą pierwszą aplikację, która zostanie załadowana do modułu.

Wiele osób może mieć z tym trudności! Ponieważ Moduł działa na systemie operacyjnym Linux, aby uniknąć kolizji przy kompilacji kodu pod Windows, najlepiej kompilować w środowisku natywnym – Linux.

Nie będziemy szczegółowo omawiać, jak w przypadku braku Linuksa i chęci zainstalowania go na komputerze, można go zainstalować na maszynie wirtualnej. Będziemy korzystać z VirtualBox, instalujemy Ubuntu w wersji 20.04 (aktualna wersja w momencie pisania tego tekstu) i pod nim zaczniemy pracować z kompilatorami, SDK itp.

Przejdźmy do środowiska Linux i rozpakujmy archiwum otrzymane od dystrybutora.

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

Przejdź do katalogu sim_open_sdk i dodaj ś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 będąc w nim wykonujemy kolejne polecenia.
Zainstaluj bibliotekę libncurses5-dev, jeśli nie została 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, uruchamiamy sekwencyjnie następujące polecenia.

Jeśli podczas kompilacji pojawi się okno konfiguracji jądra, po prostu wybierz opcję Wyjdź i wróć do konsoli; nie musimy teraz konfigurować jądra.

My robimy:

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

Kompilacja bootloadera:

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

Kompilacja jądra:

simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel

Skompiluj główny system plików:

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

Dla użytkowników Linuksa istotne będzie skompilowanie sterownika modułu:

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

Skompilujmy demo:

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

Po czym 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

Демо

Spróbujmy załadować demo do naszego modułu i zobaczyć, co z tego wyniknie.

Pobierz

W katalogu sim_open_sdk możemy zobaczyć plik demo_app. Bierzemy go i przenosimy do katalogu głównego dysku C na komputerze, do którego podłączony jest moduł. Następnie uruchom wiersz poleceń systemu Windows (Win+R -> cmd) i wpisz:

C:>adb push C:demo_app /data/

Konsola powie nam:

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

Oznacza to, że plik został pomyślnie przesłany do modułu i pozostaje nam jedynie go uruchomić. Nie wahajmy się.

My robimy:

C:>adb shell

Rozszerzamy prawa pobranego pliku:

/ # cdhmod 777 /data/demo_app

I biegniemy:

/ # /data/demo_app

W tej samej konsoli moduł powie nam co następuje:

SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205

Please select an option to test from the items listed below.

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

Spójrzmy na IMEI modułu, wpiszmy 7 (przejdź do trybu poleceń), a następnie wpiszmy 5:

Please select an option to test from the items listed below.

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

Please select an option to test from the items listed below.

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

Please select an option to test from the items listed below.

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

W ten sposób zobaczymy IMEI modułu.

Na zakończenie

Mam nadzieję, że udało nam się uzyskać ogólne pojęcie o tym, jak rozpocząć pracę z modułem. W kolejnych artykułach przyjrzymy się bliżej możliwościom, jakie zapewnia platforma SIM7600E-H, a także temu, jak można zdalnie zaktualizować własną aplikację w module.

Zapraszam do zadawania pytań w komentarzach, a także wskazania, który aspekt możliwości modułu powinien znaleźć odzwierciedlenie w kolejnych artykułach.

Źródło: www.habr.com

Dodaj komentarz