Modems GSM / 3G / 4G dans des systèmes embarqués utilisant le modem Quectel EC21 LTE et Yocto Project comme exemple

image


De nombreux appareils basés sur des systèmes embarqués ont besoin d'Internet. Une connexion Internet filaire n'est pas toujours possible pour eux, et si les appareils se trouvent dans la zone de couverture cellulaire, vous pouvez vous connecter à Internet à l'aide de modems GSM / 3G / 4G.


Cette note décrit le processus de création d'une distribution Linux pour un système embarqué à l'aide de la boîte à outils du projet Yocto, qui vous permet de connecter l'appareil à Internet via un modem GSM / 3G / 4G et un protocole PPP.


Contenu



Matériel et logiciel


Nous allons construire la distribution Linux pour le système embarqué en utilisant la version THUD 2.6.4 de Yocto Project sur un PC exécutant Ubuntu 18.04.


BeagleBone Black Rev. C LTE- Quectel EC21-E. UMTS<E EVB UMTS LTE Quectel. , , . 1.


image


1 —



, 50 :


  • Git 1.8.3.1 ;
  • Tar 1.27 ;
  • Python 3.4.0 .

:


$ sudo apt-get install gawk wget git-core diffstat unzip texinfo \
                       gcc-multilib build-essential chrpath socat  \
                       cpio python python3 python3-pip python3-pexpect \
                       xz-utils debianutils iputils-ping libsdl1.2-dev xterm

Yocto Project . Yocto Project Quick Build.



, Poky - . habr-yocto-lte:


~$ mkdir habr-yocto-lte

habr-yocto-lte git :


~$ cd habr-yocto-lte
~/habr-yocto-lte$ git init

git-, , Poky meta-ti:


~/habr-yocto-lte$ git submodule add -b thud git://git.yoctoproject.org/poky.git
~/habr-yocto-lte$ git submodule add -b thud git://git.yoctoproject.org/meta-ti

Poky , , meta-ti – , , Texas Instruments. , Poky - Yocto Project Overview and Concepts Manual.


oe-init-build-env :


~/habr-yocto-lte$ touch oe-init-build-env
~/habr-yocto-lte$ chmod +x oe-init-build-env

:


#!/bin/sh
source $(pwd)/poky/oe-init-build-env build

oe-init-build-env , . :


~/habr-yocto-lte$ source ./oe-init-build-env

~/habr-yocto-lte build, , :


### Shell environment set up for builds. ###

You can now run 'bitbake <target>'

Common targets are:
    core-image-minimal
    core-image-sato
    meta-toolchain
    meta-ide-support

You can also run generated qemu images with a command like 'runqemu qemux86'

, , «»:


  • meta-ti meta-poky-bsp. BBLAYERS, ~/habr-yocto-lte/build/conf/bblayers.conf, :

BBLAYERS ?= " \
        /home/alex/habr/poky/meta \
        /home/alex/habr/poky/meta-poky \
        /home/alex/habr/meta-ti \
        "

  • , beaglebone. , , . ipk . sysvinit systemd. , ~/habr-yocto-lte/build/conf/local.conf :

MACHINE = "beaglebone"
INHERIT += "buildhistory"
BUILDHISTORY_COMMIT = "1"
PACKAGE_CLASSES = "package_ipk"
CORE_IMAGE_EXTRA_INSTALL += " kernel-modules"
DISTRO_FEATURES_append = " systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"

:


~/habr-yocto-lte/build$ bitbake –k core-image-base

, 4 :). .


~/habr-yocto-lte/build/tmp/deploy/images/beaglebone


PPP


, , , LTE- Quectel EC21-E, .. Linux. PPP Linux, ppp , «» bitbake pppd chat, ppp.


:


~/habr-yocto-lte/build$ bitbake virtual/kernel -c menuconfig

menuconfig :


Device drivers --->
    [*] Network device support --->
        <M> PPP (point-to-point protocol) support
            <M> PPP BSD-Compress compression
            <M> PPP Deflate compression
            <*> PPP filtering
            <M> PPP MPPE compression (encryption)
            <*> PPP multilink support
            <M> PPP over Ethernet
            <M> PPP support for async serial ports
            <M> PPP support for sync tty ports 

menuconfig. , , . , defconfig recipes-kernel.


defconfig:


~/habr-yocto-lte/build$ bitbake virtual/kernel -c savedefconfig

defconfig ~/habr-yocto-lte/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.19.94+gitAUTOINC+5a23bc00e0-r22a/build


, , -. meta-habr:


~/habr-yocto-lte/build$ bitbake-layers create-layer ~/habr-yocto-lte/meta-habr

~/habr-yocto-lte meta-habr – -. recipes-example, , , - bblayers.conf:


~/habr-yocto-lte/build$ rm -r ~/ habr-yocto-lte/meta-habr/recipes-example/
~/habr-yocto-lte/build$ bitbake-layers add-layer ~/habr-yocto-lte/meta-habr

Linux. :


~/habr-yocto-lte$  mkdir – p meta-habr/recipes-kernel/linux/linux-ti-staging/beaglebone
~/habr-yocto-lte$  touch meta-habr/recipes-kernel/linux/linux-ti-staging_%.bbappend

defconfig ~/habr-yocto-lte/meta-habr/recipes-kernel/linux/linux-ti-staging/beaglebone


~/habr-yocto-lte$ cp ~/habr-yocto-lte/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.19.94+gitAUTOINC+5a23bc00e0-r22a/build/defconfig  meta-habr/recipes-kernel/linux/linux-ti-staging/beaglebone

linux-ti-staging_%.bbappend :


FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://defconfig"

, defconfig . , PPP :


~/habr-yocto-lte/build$ bitbake –k core-image-base
~/habr-yocto-lte/build$ cat buildhistory/images/beaglebone/glibc/core-image-base/installed-packages.txt | grep "ppp"
--------------------------------------------------------
kernel-module-ppp-async-4.19.94-g5a23bc00e0_4.19.94+git0+5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-deflate-4.19.94-g5a23bc00e0_4.19.94+git0+5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-generic-4.19.94-g5a23bc00e0_4.19.94+git0+5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-mppe-4.19.94-g5a23bc00e0_4.19.94+git0+5a23bc00e0-r22a_beaglebone.ipk
kernel-module-pppoe-4.19.94-g5a23bc00e0_4.19.94+git0+5a23bc00e0-r22a_beaglebone.ipk
kernel-module-pppox-4.19.94-g5a23bc00e0_4.19.94+git0+5a23bc00e0-r22a_beaglebone.ipk
kernel-module-ppp-synctty-4.19.94-g5a23bc00e0_4.19.94+git0+5a23bc00e0-r22a_beaglebone.ipk

ppp


IMAGE_INSTALL_append. local.conf :


IMAGE_INSTALL_append = " ppp"

, ppp :


~/habr-yocto-lte/build$ bitbake –k core-image-base
~/habr-yocto-lte/build$ cat buildhistory/images/beaglebone/glibc/core-image-base/installed-packages.txt | grep "ppp_"
--------------------------------------------------------
ppp_2.4.7-r0_beaglebone.ipk

LTE-. pppd chat, ppp, . ppp.


pppd chat


habrppp, habr-chat-connect habr-chat-disconnect :


  • habrppp
    /dev/ttyUSB3
    921600
    user "beeline"
    password "beeline"
    connect 'chat -s -v -f /etc/ppp/peers/habr-chat-connect'
    disconnect 'chat -s -v -f /etc/ppp/peers/habr-chat-disconnect'
    hide-password
    noauth
    debug
    defaultroute
    noipdefault
    persist
  • habr-chat-connect
    ABORT "BUSY"
    ABORT "NO CARRIER"
    ABORT "NO DIALTONE"
    ABORT "ERROR"
    ABORT "NO ANSWER"
    TIMEOUT 30
    "" AT
    OK ATE0
    OK ATI;+CSUB;+CSQ;+CPIN?;+COPS?;+CGREG?;&D2
    OK AT+CGDCONT=1,"IP","static.beeline.ru",,0,0
    OK ATD*99#
    CONNECT ""
  • habr-chat-disconnect
    ABORT "ERROR"
    ABORT "NO DIALTONE"
    "" +++
    "" +++
    "" +++

.
LTE- Quectel EC21-E :


  • ttyUSB0 –
  • ttyUSB1 – GPS NMEA
  • ttyUSB2 – AT-
  • ttyUSB3 – PPP

USB-, , , , . , habrppp PPP /dev/ttyUSB3.


user password habrppp, APN AT+CGDCONT habr-chat-connect, .


ppp


-. ppp:


~/habr-yocto-lte$ mkdir –p meta-habr/recipes-connectivity/ppp/ppp/beaglebone
~/habr-yocto-lte$ touch meta-habr/recipes-connectivity/ppp/ppp_%.bbappend

, ~/habr-yocto-lte/meta-habr/recipes-connectivity/ppp/ppp/beaglebone ppp_%.bbappend:


FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" 

SRC_URI += "file://habrppp \             
            file://habr-chat-connect \             
            file://habr-chat-disconnect \             
            file://20-habr-modem.rules \             
            " 

do_install_append () {  
        install -m 0755 ${WORKDIR}/habrppp ${D}${sysconfdir}/ppp/peers/habrppp  
        install -m 0755 ${WORKDIR}/habr-chat-connect ${D}${sysconfdir}/ppp/peers/habr-chat-connect  
        install -m 0755 ${WORKDIR}/habr-chat-disconnect ${D}${sysconfdir}/ppp/peers/habr-chat-disconnect    
        mkdir -p ${D}${sysconfdir}/udev/rules.d     
        install -m 0755 ${WORKDIR}/20-habr-modem.rules ${D}${sysconfdir}/udev/rules.d/20-habr-modem.rules 
}

, , , 20-habr-modem.rules. udev, ttyUSB3 pppd . USB-. 20-habr-modem.rules:


SUBSYSTEM=="tty", KERNEL=="ttyUSB3", TAG+="systemd", ENV{SYSTEMD_WANTS}="ppp@habrppp.service"


, balenaEtcher microSD . :


~$ ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:XXX.XXX.XXX.XXX  P-t-P:XXX.XXX.XXX.XXX  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:432 (432.0 B)  TX bytes:611 (611.0 B)

PPP , pon poff. :


~$ pon habrppp

:


~$ poff habrppp



Le projet est disponible sur https://gitlab.com/amamaev/habr-yocto-lte . Pour cloner le référentiel, exécutez la commande:


~$ git clone --recursive https://gitlab.com/amamaev/habr-yocto-lte.git

N'oubliez pas d'ajuster le chemin d'accès aux couches dans le fichier bblayers.conf

All Articles