Modem GSM / 3G / 4G dalam sistem tertanam menggunakan modem Quectel EC21 LTE dan Proyek Yocto sebagai contoh

gambar


Banyak perangkat yang didasarkan pada sistem tertanam memerlukan Internet. Koneksi Internet kabel tidak selalu memungkinkan bagi mereka, dan jika perangkat berada di area jangkauan seluler, maka Anda dapat terhubung ke Internet menggunakan modem GSM / 3G / 4G.


Catatan ini menjelaskan proses membuat distribusi Linux untuk sistem tertanam menggunakan Yocto Project toolkit, yang memungkinkan Anda untuk menghubungkan perangkat ke Internet melalui modem GSM / 3G / 4G dan protokol PPP.


Kandungan



Perangkat keras dan perangkat lunak


Kami akan membangun distribusi Linux untuk sistem tertanam menggunakan Yocto Project versi THUD 2.6.4 pada PC yang menjalankan Ubuntu 18.04.


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


gambar


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



Proyek ini tersedia di https://gitlab.com/amamaev/habr-yocto-lte . Untuk mengkloning repositori, jalankan perintah:


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

Jangan lupa untuk menyesuaikan jalur ke lapisan dalam file bblayers.conf

All Articles