SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Механизм разработки пользовательского приложения и загрузки его в модуль доступен как под операционной системой Linux, так и Windows. В данной статье мы подробно рассмотрим то, как воспользовавшись примерами из SDK предоставляемого ਸਿਮਕਾਮ ਵਾਇਰਲੈੱਸ ਹੱਲ скомпилировать и загрузить пользовательское приложение в модуль.

Перед написанием статьи один мой знакомый, далекий от разработки под 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-блоками;
  • минимизирует вероятность потери данных при аварийном отключении питании или других сбоях;
  • ведение журналов.

Описание взято ਇੱਥੋਂ, там же более подробно рассказано о таковой файловой системе.

Т.е. данный тип файловой системы идеально подходит для жестких условий работы модуля и возможных проблемах с питанием. Но это не значит, что условия нестабильного питания будут являться ожидаемым режимом работы модуля, это говорит только о большей жизнеспособности устройства.

ਮੈਮੋਰੀ

Распределение областей памяти построено следующим образом:

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Нужно выделить три основных области:

ubi0:rootfs – доступен только для чтения и содержит само ядро Linux
ubi0:usrfs – используется преимущественно для пользовательской программы и хранения данных
ubi0:cahcefs – зарезервировано для FOTA обновлений. Если доступного пространства будет недостаточно для загрузки обновления – система удалит неиспользуемые файлы и таким образом высвободит место. Но из соображений безопасности – не стоит располагать там свои файлы.

Все три раздела распределены следующим образом:

ਫਾਇਲਸਿਸਟਮ
ਆਕਾਰ
ਵਰਤਿਆ
ਉਪਲੱਬਧ
ਵਰਤੋ%
Mounted on

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

ubi0:usrfs
10.5M
360K
10.1M
3%
/ ਡਾਟਾ

ubi0:cachefs
50.3M
20K
47.7M
0%
/ ਕੈਚੇ

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

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

Для пользовательской программы нам будут доступны следующие режимы работы периферии:

ਪਿੰਨ ਨੰ.
ਨਾਮ
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
-
SD-ਕਾਰਡ
-
-
B-PD
-

22
SD_DATA0
-
SD-ਕਾਰਡ
-
-
B-PD
-

23
SD_DATA1
-
SD-ਕਾਰਡ
-
-
B-PD
-

24
SD_DATA2
-
SD-ਕਾਰਡ
-
-
B-PD
-

25
SD_DATA3
-
SD-ਕਾਰਡ
-
-
B-PD
-

26
SD_CLK
-
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
ਜੀਪੀਆਈਓ 3
GPIO_1020
MIFI_POWER_EN
GPIO
MIFI_POWER_EN
B-PU
-

34
ਜੀਪੀਆਈਓ 6
GPIO_1023
MIFI_SLEEP_CLK
GPIO
MIFI_SLEEP_CLK
B-PD
-

46
ਏਡੀਸੀ 2
-
ਏ ਡੀ ਸੀ
-
-
-
-

47
ਏਡੀਸੀ 1
-
ਏ ਡੀ ਸੀ
-
-
B-PU
-

48
SD_DET
GPIO_26
GPIO
GPIO
SD_DET
B-PD
X

49
ਸਥਿਤੀ
GPIO_52
ਸਥਿਤੀ
GPIO
ਸਥਿਤੀ
B-PD
X

50
ਜੀਪੀਆਈਓ 43
GPIO_36
MIFI_COEX
GPIO
MIFI_COEX
B-PD
-

52
ਜੀਪੀਆਈਓ 41
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
ਸੀ.ਟੀ.ਐਸ.
-
UART2_CTS
-
-
B-PD
-

68
ਆਰਐਕਸਡੀ
-
UART2_Rx
-
-
B-PD
-

69
RI
-
GPIO(RI)
-
-
B-PD
-

70
dcd
-
GPIO
-
-
B-PD
-

71
ਟੀਐਕਸਡੀ
-
UART2_Tx
-
-
B-PD
-

72
ਡੀ ਟੀ ਆਰ
-
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
ਜੀਪੀਆਈਓ 77
ਜੀਪੀਆਈਓ 77
BT
GPIO
BT
B-PD
-

Согласитесь, перечень внушительный и обратите внимание: часть периферии используется для работы модуля в качестве роутера. Т.е. на базе такого модуля можно сделать небольшой роутер, который будет раздавать интернет по Wi-Fi. Кстати, есть уже готовое решение, называется SIM7600E-H-MIFI и представляет собой miniPCIE карточку, с напаянным модулем SIM7600E-H и несколькими антенными выводами, один из них является антенной Wi-Fi. Впрочем, это уже тема для отдельного материала.

Среда (не день недели)

ਸਿਮਕਾਮ ਵਾਇਰਲੈੱਸ ਹੱਲ предоставляют возможность разработчикам выбрать самостоятельно наиболее знакомую среду разработки под Linux или Windows. Если речь идет об одном исполняемом приложении на модуле, то лучше выбрать Windows, так получится быстрее и проще. Если предполагается сложная архитектура приложения и последующие апгрейды – лучше использовать Linux. Также нам потребуется Linux для компиляции исполняемых файлов для последующей загрузки в модуль, для компиляции вполне достаточно виртуальной машины.

Из того что вам потребуется, недоступного для скачивания в свободном доступе – SDK, которую можно запросить у своего дистрибьютора.

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

Здесь и далее мы будем работать под Windows как наиболее знакомой ОС большинству пользователей.

Нам потребуется за несколько простых шагов установить необходимое ПО для последующего освоения работы с модулем:

  1. GNU / ਲੀਨਕਸ
  2. ਸਾਈਗਵਿਨ
  3. ਡਰਾਈਵਰ
  4. ADB

Установка GNU/Linux

Для сборки приложения можно воспользоваться любым совместимым с ARM-Linux компилятором. Мы же воспользуемся SourceryCodeBenchLiteARM GNU/Linuxtranslater доступным для скачивания по ਲਿੰਕ ਨੂੰ.

Чтобы все компоненты были установлены верно, оставлю несколько скриншотов процесса установки. В принципе, в установке нет ничего сложного.

Чтобы все компоненты были установлены верно, оставлю несколько скриншотов процесса установки. В принципе, в установке нет ничего сложного.

  1. ਪਹਿਲਾਂ ਲਾਇਸੈਂਸ ਰਿਕਵਰੀ
    SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux
  2. Указываем папку установки
    SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux
  3. Необходимые компоненты оставляем без изменений
    SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux
  4. Оставляем как есть
    SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux
  5. Несколько раз “Next”, “Install” и в принципе все
    SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Установка Cygwin

Далее для разработки на потребуется набор библиотек и утилит из набора предоставляемого ਸਾਈਗਵਿਨ. Тут все просто, актуальную версию Cygwin можно скачать бесплатно на официальном сайте проекта, на момент написания статьи была доступна версия 3.1.5, ее мы и использовали при подготовке материала.

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

ਡਰਾਈਵਰ ਇੰਸਟਾਲੇਸ਼ਨ

После того, как модуль будет подключен к ПК потребуется установить драйвера. Их можно запросить у своего дистрибьютора (рекомендуется). Искать в сети Интернет самостоятельно не рекомендую, т.к. может потребоваться много времени на поиск с чем был связан конфликт устройств.

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Среди выделенных портов мы видим следующие:

Windows ਨੂੰ
ਲੀਨਕਸ
ਵੇਰਵਾ

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 ਆਡੀਓ ਇੰਟਰਫੇਸ

SimTech HS-USB WWAN Adapter
USB Net
NDIS wwan Interface

ਐਂਡਰਾਇਡ ਕੰਪੋਜ਼ਿਟ ADB ਇੰਟਰਫੇਸ
USB ADB
Android add debug port

Как вы наверняка обратили внимание, среди портов на скриншоте нет USB ADB, это по причине того, что ADB порт в модуле по умолчанию закрыт и его нужно включить, отправив команду ‘AT+CUSBADB=1’ в АТ-порт модуля и перезагрузить его (это можно сделать командой ‘AT+CRESET’).

В итоге получим нужный интерфейс в диспетчере устройств:

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

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

Установка ADB

Заходим на официальный сайт Android Developer по ਲਿੰਕ ਨੂੰ. Не будем качать громоздкий Android Studio, нам достаточно командной строки, доступную для скачивания по ссылке «Download SDK Platform-Tools for Windows».

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Качаем и распаковываем полученный архив в корень диска C.

ਵਾਤਾਵਰਨ ਵੇਰੀਏਬਲ

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

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

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

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Несколько раз нажимаем ОК и перезагружаем компьютер.

После перезагрузки можно легко проверить корректно ли работает ADB, открыв командную строку (Win+R → cmd) и набрав команду ‘adb version’. Получим примерно такой результат:

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Подключим модуль к ПК (если так случилось что отключили) и проверим видит ли его ADB командой ‘adb devices’:

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

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

SIM7600E-H ਮੋਡੀਊਲ ਦੇ ਹਿੱਸੇ ਵਜੋਂ OpenLinux

Распаковка и компиляция 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, а также то, каким образом можно удаленно обновить собственное приложение в модуле.

Приглашаю задавать вопросы в комментариях, а также указать какой аспект возможностей модуля следует отразить в последующих статьях.

ਸਰੋਤ: www.habr.com

ਇੱਕ ਟਿੱਪਣੀ ਜੋੜੋ