
Muchos dispositivos basados en sistemas integrados necesitan Internet. No siempre es posible una conexión por cable a Internet, y si los dispositivos están dentro del área de cobertura celular, entonces puede conectarse a Internet utilizando módems GSM / 3G / 4G.
Esta nota describe el proceso de creación de una distribución de Linux para un sistema embebido utilizando el kit de herramientas Yocto Project, que le permite conectar el dispositivo a Internet a través de un módem GSM / 3G / 4G y un protocolo PPP.
Contenido
Hardware y software
Construiremos la distribución de Linux para el sistema integrado usando Yocto Project versión THUD 2.6.4 en una PC con Ubuntu 18.04.
BeagleBone Black Rev. C LTE- Quectel EC21-E. UMTS<E EVB UMTS LTE Quectel. , , . 1.

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
, , :
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 NMEAttyUSB2
– 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
El proyecto está disponible en https://gitlab.com/amamaev/habr-yocto-lte . Para clonar el repositorio, ejecute el comando:
~$ git clone --recursive https://gitlab.com/amamaev/habr-yocto-lte.git
No olvide ajustar la ruta a las capas en el archivo bblayers.conf