
Механизм за разработка на потребителско приложение и зареждането му в модула е достъпен както под операционната система Linux, така и под Windows. В тази статия подробно ще разгледаме как да се възползвате от примерите от SDK, предоставеното да компилирате и заредите потребителско приложение в модула.
Преди да напиша статията, един мой познат, далеч от разработката под Linux, ме помоли да подхождам максимално детайлно към въпроса за описанието на процеса на разработка на собствено приложение за модула SIM7600E-H. Критерият за оценка на достъпността на материала беше фразата "така, че да разбера."
Каня ви да се запознаете с резултатите.
Статията редовно се допълва и обновява
Прелюдия
Обикновено модулите за мобилни комуникации се използват само за предаване на данни, гласови повиквания, изпращане на SMS и подобни. Всичко това се извършва посредством AT команди, изпращани от външен управляващ микроконтролер. Но има категория модули, които позволяват изпълнение на потребителски код, зареждан извън. В някои случаи това значително намалява общия бюджет на устройството, позволявайки поставянето на по-прост (а следователно и бюджетен) микроконтролер или изцяло отказ от него. С появата на LTE модулите, управлявани от ОС Android или Linux и техните мощни ресурси, можете да решавате всякакви задачи, които са достъпни за популярните процесори. В тази статия ще се говори за SIM7600E-H, управляван от ОС Linux. Ще разгледаме как да заредите и стартирате изпълнимо приложение.
Материалът до голяма степен се базира на документа "SIM7600 Open Linux development guide", но някои допълнения, и на първо място руския вариант, ще бъдат полезни. Статията ще помогне на онези, които едва започват да освоият модула, да стигнат до зареждането на демонстрационно приложение и ще предостави необходимите знания за последваща работа.
Накратко за това кой е SIM7600E-H
SIM7600E-H е модул, базиран на ARM Cortex-A7 1.3GHz процесор от Qualcomm, с вградена Linux операционна система (ядро 3.18.20), способен да работи с европейските (включително и руските) честотни диапазони 2G/3G/LTE, поддържащ Cat.4, осигурявайки максимална скорост на изтегляне до 150Mbps и качване до 50Mbps. Богатата периферия, индустриалният температурен диапазон и наличието на вградена навигация GPS/ГЛОНАСС покриват всички изисквания за съвременно модулно решение в M2M тематиката.
Преглед на системата
Модулът SIM7600E-H е базиран на Linux операционна система (ядро 3.18.20). В същото време, файловата система е изградена на базата на журналируемата файловата система UBIFS (Unsorted Block Image File System).
К важните характеристики на тази файловата система принадлежат:
- работи с партиции, позволява създаване, изтриване или промяна на размерите им;
- осигурява подравняване на записите по целия обем на носителя;
- работи с Bad-блокове;
- минимизира вероятността за загуба на данни при аварийно изключване на захранването или други откази;
- поддържа водене на журнали.
Описанието е взето , там е по-подробно разгледано за такава файловата система.
Тоест, този тип файловата система е идеално подходящ за сурови условия на работа на модула и възможни проблеми с захранването. Но това не означава, че условията на нестабилно захранване ще бъдат очаквани работни условия за модула, това говори само за по-висока жизненоспособност на устройството.
Памет
Разпределението на областите на паметта е построено по следния начин:

Трябва да се отделят три основни области:
ubi0:rootfs – достъпен само за четене и съдържа самото ядро на Linux
ubi0:usrfs – използва се главно за потребителски програми и съхранение на данни
ubi0:cachefs – резервирано за FOTA актуализации. Ако наличното пространство не е достатъчно за изтегляне на актуализация – системата ще изтрие неизползвани файлове и по този начин ще освободи място. Но по съображения за сигурност – не трябва да разполагате свои файлове там.
Всички три партиции са разпределени по следния начин:
Filesystem
Size
Използвани
Налични
Използване%
Монтирано на
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
Достъпна функционалност
Както беше споменато по-горе, модулът е изграден на базата на чипсета Cortex A7 от Qualcomm. Неправилно би било да не се предостави такова високопроизводително ядро за обработка на потребителската програма и разтоварване на основния процесор на устройството, прехвърляйки на модула част от програмата.
За потребителската програма, следните режими на работа на периферията ще бъдат налични:
Pin No.
Name
Sys GPIO No.
Default action
Func1
Func2
Pull
Wakeup interrupt
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
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
—
Според мен, списъкът е впечатляващ и обърнете внимание: част от периферията се използва за работа на модула като рутер. Т.е. на базата на такъв модул може да се направи малък рутер, който да раздава интернет по Wi-Fi. Между другото, вече има готово решение, наречено SIM7600E-H-MIFI и представлява miniPCIE карта с вграден модул SIM7600E-H и няколко антени, един от които е антена Wi-Fi. Впрочем, това е вече тема за отделен материал.
Среда (не ден от седмицата)
предоставят възможност на разработчиците да избират най-удобната среда за разработка под Linux или Windows. Ако става въпрос за едно изпълнимо приложение на модула, по-добре е да се избере Windows – така ще стане по-бързо и лесно. Ако се предвижда сложна архитектура на приложението и последващи ъпгрейди – по-добре да се използва Linux. Също така, ще ни е необходим Linux за компилиране на изпълними файлове за по-късно зареждане в модула, за компилация е достатъчна виртуална машина.
От това, от което ще се нуждаете, недостъпно за свободно изтегляне – SDK, която може да бъде поискано от вашия дистрибутор.
Инсталиране на утилити за работа с модула
Тук и занапред ще работим под Windows, като най-познатата операционна система за повечето потребители.
Ще ни е необходимо да инсталираме необходимия софтуер за по-кратно усвояване на работата с модула за няколко прости стъпки:
- GNU/Linux
- Cygwin
- Драйвъри
- ADB
Инсталиране на GNU/Linux
За изграждането на приложението може да се използва всеки компилатор, съвместим с ARM-Linux. Ние ще използваме SourceryCodeBenchLiteARM GNU/Linux, наличен за изтегляне по .
За да се уверя, че всички компоненти са инсталирани правилно, ще оставя няколко скрийншота от инсталационния процес. По принцип, в инсталацията няма нищо сложно.
За да се уверя, че всички компоненти са инсталирани правилно, ще оставя няколко скрийншота от инсталационния процес. По принцип, в инсталацията няма нищо сложно.
- Приемаме лицензионното споразумение

- Указваме папката за инсталиране

- Необходимите компоненти оставяме без промени

- Оставяме както е

- Несколко пъти “Напред”, “Инсталиране” и в принципе всичко

Инсталация на Cygwin
След това за разработка ще е необходим набор от библиотеки и утилити, предоставяни от . Тук всичко е просто, актуалната версия на Cygwin може да се изтегли безплатно от официалния сайт на проекта, към момента на написване на статията версия 3.1.5 беше налична, нея използвахме при подготовката на материала.
В инсталацията на Cygwin няма нищо сложно, единственото, което трябва да изберете – е огледало, от което инсталаторът ще изтегли необходимите файлове, изберете произволно и инсталирайте, а също така набор от утилити и библиотеки, оставете избрани всички налични библиотеки и утилити.
Инсталация на драйвъри
След като модулът бъде свързан към PC, ще е необходимо да се инсталират драйвъри. Те могат да бъдат поискани от вашия дистрибутор (препоръчително). Не препоръчвам да ги търсите в интернет сами, тъй като може да отнеме много време да намерите какво е причинявало конфликта на устройствата.

Сред обозначените портове виждаме следните:
Windows
Linux
Описание
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 добавяне на отладъчен порт
Както вероятно сте забелязали, сред портовете на екрана няма USB ADB, причината е, че ADB портът в модула по подразбиране е затворен и трябва да се включи, като се изпрати команда ‘AT+CUSBADB=1’ до AT порта на модула и след това се рестартира (може да се направи с команда ‘AT+CRESET’).
В резултат ще получим необходимия интерфейс в диспечера на устройствата:

С драйверите сме приключили, преминаваме към ADB.
Инсталация на ADB
Влизаме на официалния сайт на Android Developer по . Няма да изтегляме обемистия Android Studio, достатъчна ни е командната линия, налична за изтегляне по линка „Download SDK Platform-Tools for Windows”.

Сваляме и разархивираме полученото архивно файлово в корена на диск C.
Променливи на средата
След инсталиране на Cygwin, е необходимо да добавите пътя Cygwin/bin/ в променливите на средата за разработка (Класически контролен панел → Система → Допълнителни настройки на системата → Допълнително → Променливи на средата → Системни променливи → Path → Промяна), както е показано на екрана по-долу:

По същия начин добавяме пътя към сваления и разархивиран архив ADB в корена на диск C.

Няколко пъти натискаме ОК и рестартираме компютъра.
След рестартиране можем лесно да проверим дали ADB функционира правилно, като отворим командния ред (Win+R → cmd) и напишем командата ‘adb version’. Ще получим приблизително такъв резултат:

Свързваме модула към компютъра (ако случайно е бил изключен) и проверяваме дали ADB го разпознава с командата ‘adb devices’:

Готово, с това настройката на свързването с модула е завършена и можем да стартираме shell за работа с модула.

Разархивиране и компилиране на SDK
След като получихме достъп до shell и можем да започнем работа с командния ред на модула, ще опитаме да скомпилираме първото си приложение за качване в модула.
С това много хора могат да срещнат затруднения! Тъй като модулът работи на операционната система Linux, за да избегнем конфликти при компилиране на код под Windows – най-добре е да компилираме в родна среда – Linux.
Няма да се спираме подробно на това как в отсъствието на Linux и нежеланието да го инсталирате на своя компютър, можете да го инсталирате на виртуален. Ние ще използваме VirtualBox, ще инсталираме Ubuntu версия 20.04 (актуалната версия по време на написването на статията) и под нея ще започнем работа с компилатори, SDK и т.н.
Преминаваме в среда Linux и разархивираме архива, получен от дистрибутора.
simcom@VirtualBox:~/Desktop/OpenLinux$ sudo tar -xzf MDM9x07_OL_2U_22_V1.12_191227.tar.gz Преминаваме в каталога sim_open_sdk и добавяме средата:
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 Оставаме в същата папка и изпълняваме следващите команди, намирайки се в нея.
Инсталираме библиотеката libncurses5-dev, ако не е инсталирана:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get update && sudo apt-get install libncurses5-dev -yPython, ако също не е инсталиран:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install python -yи gcc:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ sudo apt-get install gccКомпилация:
Сега ще трябва да компилираме няколко файла, последователно изпълняваме следните команди.
Ако при компилирането изскочи прозорец за настройка на ядрото – просто изберете Exit и се върнете в конзолата, в момента нямаме нужда да конфигурираме ядрото.
Изпълняваме:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ makeКомпилираме bootloader-а:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make abootКомпилираме ядрото:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_menuconfig
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel
Компилираме кореновата файлова система:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make rootfsЗа потребителите на Linux ще бъде актуално да компилират модула на драйвера:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make kernel_moduleКомпилираме демонстрация:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ make demoСлед което в директорията sim_open_sdk/output ще се появят няколко нови файла:
simcom@VirtualBox:~/Desktop/OpenLinux/sim_open_sdk$ ls output/
appsboot.mbn boot.img demo_app helloworld system.img
Демо
Ще опитаме да заредим демонстрацията в нашия модул и да видим какво ще се случи.
Зареждане
В директорията sim_open_sdk можем да видим файла demo_app. Вземаме го и го прехвърляме в корена на диск C на компютъра, към който е свързан модулът. След което стартираме командния ред на Windows (Win+R -> cmd) и въвеждаме:
C:>adb push C:demo_app /data/Конзолата ще ни уведоми:
C:demo_app: 1 файл изпратен, 0 пропуснати. 151.4 MB/s (838900 байта за 0.005s)Това означава, че файлът е бил успешно изпратен на модула и остава само да го стартираме. Да не губим време.
Изпълняваме:
C:>adb shellРазширяваме правата на заредения файл:
/ # cdhmod 777 /data/demo_appИ стартираме:
/ # /data/demo_appВ същата конзола модулът ще ни уведоми следното:
SDK_VER : SIM_SDK_VER_20191205
DEMO_VER: SIM_SDK_VER_20191205
Моля, изберете опция за тестване от изброените по-долу.
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
Опция >
Нека видим IMEI на модула, въведете 7 (преминаване в команден режим) и след това въведете 5:
Моля, изберете опция за тестване от изброените по-долу.
1. WIFI 2. ГЛАСОВА ПОЗНАНЯ
3. ДАННИ ЗА ЗОВ 4. SMS
5. WDS(APN) 6. NAS
7. AT 8. OTA
9. TTS 10. GPIO
11. GPS 12. Bluetooth
13. TCP/UDP 14. Таймер
15. ADC 16. I2C
17. UIM(SimCard) 18. DMS(IMEI,MEID)
19. UART 20. SPI
21. Версия 22. Ethernet
23. FTP 24. SSL
25. HTTP(S) 26. FTP(S)
27. MQTT(S) 28. ALSA
29. DEV 30. АУДИО
31. JSON 32. LBS
99. ИЗХОД
Опция > 7
Моля, изберете опция за тестване от изброените по-долу.
1. вземи версия на модула 2. вземи CSQ
3. вземи CREG 4. вземи ICCID
5. вземи IMEI 6. вземи CIMI
99. назад
Опция > 5
IMEI: 867584030090489
Моля, изберете опция за тестване от изброените по-долу.
1. вземи версия на модула 2. вземи CSQ
3. вземи CREG 4. вземи ICCID
5. вземи IMEI 6. вземи CIMI
99. назад
Опция >
По този начин ще видим IMEI на модула.
В заключение
Надявам се да успяхме да съставим общо представление за това как да започнем работа с модула. В следващите статии ще разгледаме по-подробно възможностите, които предлага платформата SIM7600E-H, както и как можете дистанционно да обновите собственото приложение на модула.
Каня ви да задавате въпроси в коментарите и да споделите какъв аспект на възможностите на модула да отразим в следващите статии.
Източник: habr.com





