OpenLinux у складі модулів SIM7600E-H

OpenLinux у складі модулів SIM7600E-H

Механізм розробки користувача програми та завантаження його в модуль доступний як під операційною системою Linux, так і Windows. У цій статті ми докладно розглянемо те, як скориставшись прикладами з SDK SIMCom Wireless Solutions скомпілювати і завантажити додаток користувача в модуль.

Перед написанням статті один мій знайомий, далекий від розробки під Linux, попросив максимально детально підійти до опису процесу розробки власної програми під модуль SIM7600E-H. Критерієм оцінки доступності подачі матеріалу стала фраза так, щоб Я зрозумів.

Запрошую ознайомитись з тим, що вийшло.

Стаття регулярно доповнюється та оновлюється

Прелюдія

Зазвичай модулі стільникового зв'язку використовуються лише передачі даних, голосових викликів, передачі СМС тощо. Все це робиться за допомогою АТ-команд, що відправляються із зовнішнього керуючого мікроконтролера. Але є категорія модулів, які дозволяють виконувати код користувача, що завантажується ззовні. У деяких випадках це значно скорочує загальний бюджет пристрою, дозволяючи поставити на плату простіший (а також бюджетний) мікроконтролер або відмовитися від нього зовсім. З появою LTE модулів, керованих ОС Android або Linux та їх потужними ресурсами, можна вирішувати будь-які завдання, доступні популярним процесорам. У цій статті йтиметься про SIM7600E-H, керований ОС Linux. Ми розглянемо, як завантажити та запустити виконуваний додаток.

Багато в чому матеріал базується на документі "SIM7600 Open Linux development quide", але деякі доповнення, і в першу чергу, російськомовна версія будуть корисні. Стаття допоможе розібратися тим, хто тільки починає освоєння модуля дійти до завантаження демонстраційної програми та дасть необхідні навички для подальшої роботи.

Коротко про те, хто такий SIM7600E-H

SIM7600E-H – це модуль побудований на базі процесора ARM Cortex-A7 1.3GHz від Qualcomm, що має операційну систему Linux (ядро 3.18.20) усередині, здатний працювати з європейськими (в т.ч. та російськими) діапазонами частот 2G/3G/ LTE, що підтримує Cat.4, що забезпечує максимальну швидкість завантаження до 150Mbps та вивантаження до 50Mbps. Багата периферія, індустріальний температурний діапазон і наявність вбудованої GPS навігації/ГЛОНАСС перекривають будь-які вимоги до сучасного модульного рішення в М2М тематиці.

Огляд системи

Модуль SIM7600E-H базується на операційній системі Linux (ядро 3.18.20). У свою чергу, файлова система побудована на базі файлової системи UBIFS (Unsorted Block Image File System).

До важливих особливостей цієї файлової системи належать:

  • працює з розділами, дозволяє створювати, видаляти або змінювати їх розмір;
  • забезпечує вирівнювання запису по всьому об'єму носія;
  • працює з Bad-блоками;
  • мінімізує можливість втрати даних при аварійному відключенні живленні або інших збоях;
  • ведення журналів.

Опис взято звідси, там же докладніше розповідається про таку файлову систему.

Тобто. Цей тип файлової системи ідеально підходить для жорстких умов роботи модуля та можливих проблем з живленням. Але це не означає, що умови нестабільного живлення будуть очікуваним режимом роботи модуля, це говорить лише про більшу життєздатність пристрою.

Пам'ять

Розподіл областей пам'яті побудовано так:

OpenLinux у складі модулів SIM7600E-H

Потрібно виділити три основні області:

ubi0:rootfs – доступний тільки для читання та містить саме ядро ​​Linux
ubi0:usrfs – використовується переважно для користувальницької програми та зберігання даних
ubi0:cahcefs – зарезервовано для FOTA оновлень. Якщо доступного простору буде недостатньо для завантаження оновлення – система видаляє файли, що не використовуються, і таким чином вивільнить місце. Але з міркувань безпеки - не варто розташовувати там свої файли.

Усі три розділи розподілені так:

Файлова система
Розмір
Використаний
наявний
Використовувати%
Встановлено

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%
/ кеш

Доступна функціональність

Як було згадано вище, модуль побудований з урахуванням чіпсету Cortex A7 від Qualcomm. Було б неправильно не надати таке високопродуктивне ядро ​​для обробки програми користувача і розвантаження основного процесора пристрою, переклавши на модуль деяку частину програми.

Для програми користувача нам будуть доступні наступні режими роботи периферії:

Pin №
ІМ'Я
Sys GPIO No.
Дія за замовчуванням
Func1
Func2
Потягнути
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
-
Флеш-картка
-
-
B-PD
-

22
SD_DATA0
-
Флеш-картка
-
-
B-PD
-

23
SD_DATA1
-
Флеш-картка
-
-
B-PD
-

24
SD_DATA2
-
Флеш-картка
-
-
B-PD
-

25
SD_DATA3
-
Флеш-картка
-
-
B-PD
-

26
SD_CLK
-
Флеш-картка
-
-
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
АЦП2
-
ADC
-
-
-
-

47
АЦП1
-
ADC
-
-
B-PU
-

48
SD_DET
GPIO_26
GPIO
GPIO
SD_DET
B-PD
X

49
СТАТУС
GPIO_52
Статус
GPIO
Статус
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
ПДР
-
I2C_SDA
-
-
B-PU
-

66
Фондова біржа РТС
-
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. Втім, це вже тема окремого матеріалу.

Середа (не день тижня)

SIMCom Wireless Solutions надають можливість розробникам обрати самостійно найбільш знайоме середовище розробки під Linux або Windows. Якщо йдеться про один додаток, що виконується на модулі, то краще вибрати Windows, так вийде швидше і простіше. Якщо передбачається складна архітектура програми та наступні апгрейди – краще використовувати Linux. Також нам знадобиться Linux для компіляції виконуваних файлів для подальшого завантаження в модуль, для компіляції цілком достатньо віртуальної машини.

З того, що вам потрібно, недоступного для завантаження у вільному доступі - SDK, яку можна запросити у свого дистриб'ютора.

Установка утиліт для роботи з модулем

Тут і далі ми будемо працювати під Windows як найбільш знайому ОС більшості користувачів.

Нам потрібно за кілька простих кроків встановити необхідне ПЗ для подальшого освоєння роботи з модулем:

  1. GNU / Linux
  2. Cygwin
  3. драйвера
  4. Азіатський банк розвитку

Встановлення GNU/Linux

Для складання програми можна скористатися будь-яким сумісним з ARM-Linux компілятором. Ми ж скористаємося SourceryCodeBenchLiteARM GNU/Linuxtranslater доступним для завантаження за посиланням.

Щоб усі компоненти були встановлені правильно, залишу кілька скріншотів процесу встановлення. В принципі, в установці немає нічого складного.

Щоб усі компоненти були встановлені правильно, залишу кілька скріншотів процесу встановлення. В принципі, в установці немає нічого складного.

  1. Приймаємо ліцензійну угоду
    OpenLinux у складі модулів SIM7600E-H
  2. Вказуємо папку установки
    OpenLinux у складі модулів SIM7600E-H
  3. Необхідні компоненти залишаємо без змін
    OpenLinux у складі модулів SIM7600E-H
  4. Залишаємо як є
    OpenLinux у складі модулів SIM7600E-H
  5. Декілька разів “Next”, “Install” і в принципі все
    OpenLinux у складі модулів SIM7600E-H

Установка Cygwin

Далі для розробки потрібно буде набір бібліотек і утиліт з набору наданого Cygwin. Тут все просто, актуальну версію Cygwin можна завантажити безкоштовно на офіційному сайті проекту, на момент написання статті була доступна версія 3.1.5, її ми й використовували під час підготовки матеріалу.

В установці Cygwin немає нічого складного, єдине що потрібно буде вибрати - дзеркало, з якого установник скачає необхідні файли, вибираємо будь-яке та встановлюємо, а також набір утиліт та бібліотек, залишаємо вибраними усі доступні бібліотеки та утиліти.

установка драйверів

Після того, як модуль буде підключений до ПК потрібно встановити драйвер. Їх можна запросити у свого дистриб'ютора (рекомендується). Шукати в Інтернеті самостійно не рекомендую, т.к. може знадобитися багато часу на пошук із чим був пов'язаний конфлікт пристроїв.

OpenLinux у складі модулів SIM7600E-H

Серед виділених портів бачимо такі:

Windows
Linux
Опис

SimTech HS-USB Diagnostics
USB послідовний
Діагностичний інтерфейс

SimTech HS-USB NMEA
USB послідовний
GPS NMEA Interface

SimTech HS-USB AT Port
USB послідовний
AT port Interface

SimTech HS-USB Modem
USB послідовний
Modem port Interface

SimTech HS-USB Audio
USB послідовний
Інтерфейс USB Audio

SimTech HS-USB WWAN Adapter
USB Net
NDIS wwan Interface

Android Composite ADB інтерфейс
USB ADB
Android add debug port

Як ви напевно звернули увагу, серед портів на скріншоті немає USB ADB, це через те, що порт ADB в модулі за замовчуванням закритий і його потрібно включити, відправивши команду 'AT+CUSBADB=1' в АТ-порт модуля і перезавантажити його ( це можна зробити командою 'AT+CRESET').

У результаті отримаємо необхідний інтерфейс у диспетчері пристроїв:

OpenLinux у складі модулів SIM7600E-H

З драйверами закінчили, переходимо до ADB.

установка ADB

Заходимо на офіційний сайт Android Developer з за посиланням. Не будемо качати громіздкий Android Studio, нам достатньо командного рядка, доступного для скачування за посиланням "Download SDK Platform-Tools for Windows".

OpenLinux у складі модулів SIM7600E-H

Качаємо та розпаковуємо отриманий архів у корінь диска C.

Змінні середовища

Після встановлення Cygwin потрібно додати шлях Cygwin/bin/ у змінні середовища розробки (Класична Панель керування → Система → Додаткові параметри системи → Додатково → Змінні середовища → Системні змінні → Path → Змінити) так як показано на скріншоті нижче:

OpenLinux у складі модулів SIM7600E-H

Аналогічним чином додаємо шлях до завантаженого та розпакованого архіву ADB в корінь диска C.

OpenLinux у складі модулів SIM7600E-H

Кілька разів натискаємо ОК та перезавантажуємо комп'ютер.

Після перезавантаження можна легко перевірити, чи коректно працює ADB, відкривши командний рядок (Win+R → cmd) і набравши команду 'adb version'. Отримаємо приблизно такий результат:

OpenLinux у складі модулів SIM7600E-H

Підключимо модуль до ПК (якщо так сталося, що відключили) і перевіримо чи бачить його ADB командою 'adb devices':

OpenLinux у складі модулів SIM7600E-H

Готово, на цьому налаштування підключення до модуля завершено, і ми можемо запустити shell для роботи з модулем.

OpenLinux у складі модулів SIM7600E-H

Розпакування та компіляція 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 -y

Python, якщо він так само не був встановлений:

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 file pushed, 0 skipped. 151.4 MB/s (838900 bytes in 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

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 >   

Давайте подивимося IMEI модуля, введемо 7 (перехід у командний режим) і після введемо 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 >

Таким чином, ми побачимо IMEI модуля.

В якості висновку

Сподіваюся, нам вдалося скласти загальне уявлення про те, як розпочати роботу з модулем. У наступних статтях ми докладніше розглянемо можливості, які надає платформа SIM7600E-H, а також те, як можна віддалено оновити власну програму в модулі.

Запрошую ставити запитання у коментарях, а також вказати який аспект можливостей модуля слід відобразити у наступних статтях.

Джерело: habr.com

Додати коментар або відгук