Embedded Linux/Docker

 

1. Docker 설치

Docker 설치에는 2가지 방법이 있는 것 같다.

 

  • apt를 사용한 설치.
apt install docker.io

 

  • Docker 설치 스크립트를 사용한 설치https://get.docker.com 에서 docker 설치 스크립트를 다운로드 할 수 있다.
    curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh

 

2. 설치 확인

sudo docker --version

 

3. docker 그룹에 사용자 추가

docker 는 root 권한을 실행되기 때문에 sudo 명령이 필요하다.

sudo 없이 사용하기 위해서 user를 docker 그룹에 추가해준다.

sudo usermod -aG docker $USER
  • 라즈베리파이4에서 ssh로 접속하여 docker를 설치했는데, ssh 재접속을 해야만 docker 그룹에 추가된 것을 확인할 수 있다.

 

4. helloworld 테스트

docker에서 제공하는 helloworld 컨테이너를 https://hub.docker.com 에서 다운 받아 동작을 확인할 수 있다.

docker run hello-world

hello-world는 아래처럼 출력된다.

 

 

 

 

'Embedded Linux > Docker' 카테고리의 다른 글

Docker에서 Python 실행하기  (0) 2021.06.03
Embedded Linux/OpenWrt

 

OpenWrt용 python package를 설치하는 Makefile 만들기

 

  1. 참고:
https://openwrt.org/docs/guide-developer/packages
https://openwrt.org/docs/guide-developer/packages

 

 

openWrt를 빌드 할 때 python 패키지를 추가해서 빌드를 해야하는 경우가 생겼다.

이전에는 python 패키지를 추가할 때 아래처럼 makefile을 만들어서 사용했다.

include $(TOPDIR)/rules.mk


PKG_NAME:=python-flask_socketio
PKG_VERSION:=4.3.2
PKG_RELEASE:=1
PKG_LICENSE:=GPLv3

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/miguelgrinberg/Flask-SocketIO.git
PKG_SOURCE_VERSION:=v$(PKG_VERSION)
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz

include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/feeds/packages/lang/python/python3-package.mk

define Package/python3-flask_socketio
  SUBMENU:=Python
  SECTION:=lang
  CATEGORY:=Languages
  TITLE:=Python3 flask_socketio
  DEPENDS:=+python3-light +python3-socketio +python3-engineio
  VARIANT:=python3
endef

define Package/python3-flask_socketio/description
Python3 bindings for Unified Configuration Interface.
endef

$(eval $(call Py3Package,python3-flask_socketio))
$(eval $(call BuildPackage,python3-flask_socketio))

 

이렇게 makefile을 만들어서 packages 디렉토리에 추가 해놓으면 OpenWrt 빌드 시에 git에서 코드를 다운받아서 .ipk를 만들고 image에 포함되었다.

 

만약 python 패키지에 dependancies 가 있다면 위와 같은 방식으로 makefile을 만들어 넣은 후에 위 DEPENDS: 에 python 패키지 이름을 추가하는 방식으로 진행했다.

 

이번에도 python 패키지를 추가할 일이 있어서 위와 동일한 방식으로 진행하려다가 에러가 발생했다.

💡
../staging_dir/hostpkg/bin/python3.7: can't open file './setup.py': [Errno 2] No such file or directory

 

위 에러로 검색을 해보니 "setup.py" 는 프로젝트의 빌드, 테스트. 배포에 필요한 정보를 담고 있고 setuptools로 테스트, 빌드, 배포하는 것을 확인했다.

 

그리고 내가 빌드하려던 python 패키지에는 setup.py 파일이 없는 것을 확인했다.

github를 commit log를 보니 특정 commit에는 setup.py 가 있는데 master 에는 없었다.

 

그래서 setup.py를 빌드 디렉토리에 넣고 makefile에 setup.py를 추가하는 내용을 추가했다.

  • 위에서 언급한 commit log에 있던 setup.py는 예전 버전의 문법으로 작성되었는지.. 에러가 발생해서 새로 작성해서 추가했다.

setup.py

import re
import sys
from setuptools import setup


with open('aiosmtplib/__init__.py', 'r') as f:
    version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]',
                        f.read(), re.MULTILINE).group(1)

setup(
    name='python-aiosmtplib',
    version=version,
    url='http://github.com/cole/aiosmtplib/',
    license='MIT',
    author='Cole Maclean',
    author_email='hi@colemaclean.dev',
    description='asyncio SMTP Client',
    packages=['aiosmtplib'],
    zip_safe=False,
    include_package_data=True,
    platforms='any',
    install_requires=[],
    tests_require=[],
    test_suite='tests',
    classifiers=[
        'Environment :: Web Environment',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: MIT License',
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 3',
        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
        'Topic :: Software Development :: Libraries :: Python Modules'
    ]
)

 

makefile

define Build/Prepare
  @echo "[APP]: Prepare Build..."
	$(CP) setup.py $(PKG_BUILD_DIR)/
endef

 

이렇게 수정하고 컴파일 해보니 정상적으로 빌드돠고 ipk 파일이 생성되었다.

$ make package/python-aiosmtplib/compile V=s -j1

 

IoT

ESP32+W5500 Iperf Test

이 문서는 ESP32와 W5500을 사용하여 Iperf Test를 통해 Ethernet 성능을 테스트 하는 문서이다.

사용 제품

개발환경

2020년 11월부터 ESP32 IDF github(https://github.com/espressif/esp-idf)에 W5500의 Mac raw 모드를 Ethernet Interface로 지원하기 시작했다.

espressif/esp-idf

만약 ESP IDF에서 지원하는 W5500 드라이버를 사용하기 위해서는 ESP-IDF 4.3 이상 버전을 설치해야한다.

현재(2021-04) 기준으로 windows 설치형으로 ESP32 IDF를 설치할 경우 4.2 TAG까지만 노출 되어 있는 것을 확인했다.

만약 4.3 이상의 TAG 가 없다면, master 버전으로 설치하면 4.3 이상 버전으로 설치할 수 있다.

연결

ESP32와 W5500은 SPI로 연결한다.

ESP32는 라우팅의 편의성을 제공하기 위해 GPIO matrix를 통해 I2C, SPI, UART bit-bang 을 지원한다.

그리고 각 peripheral 시그널을 IO_MUX를 통해 전용 핀을 사용할 수 있다.

SPI Master Driver - ESP32 - - ESP-IDF Programming Guide latest documentation

당연히 전용 핀을 사용하는 것이 조금 더 고속으로 동작할 수 있다.

만약 SPI를 GPIO matrix (bit-bang) 으로 사용한다면, 최대 SPI Clock 을 26.7MHz 이하로만 설정할 수 있다.

만약 이 이상의 Clock으로 설정하고 프로그램을 실행한다면, 아래와 같은 에러가 발생한다

E (390) spi_hal: spi_hal_cal_clock_conf(101): When work in full-duplex mode at frequency > 26.7MHz, device cannot read correct data.
Try to use IOMUX pins to increase the frequency limit, or use the half duplex mode.

이번 예제에서는 26.7MHz 이상도 테스트를 해보기 위해서 SPI3 설정으로 연결했다.

Iperf 테스트

Iperf 테스트는 ESP32 IDF 내에 Iperf 예제로 테스트 해보았다.

espressif/esp-idf

Iperf 테스트 결과

아래 결과는 Iperf를 사용한 테스트 결과이다.

결과를 보면 SPI Clock 24MHz 까지의 Bandwidth 의 증가를 확인해보았다. 이 이상 Clock을 올리더라도 Bandwidth의 유의미한 증가는 확인할 수 없었고, 오히려 케이블로 연결된 상태이기 때문에 SPI 통신이 불안정 한 것을 확인할 수 있었다.

  1. SPI Clock 8MHz (iperf 기준)
    • TCP
    • UDP
  2. SPI Clock 16MHz (iperf 기준)
    • TCP
    • UDP
  3. SPI Clock 24MHz (iperf 기준)
    • TCP
    • UDP
  4. SPI Clock 32MHz (iperf 기준)
    • TCP
    • UDP
1 2 3 4 5 ··· 14
블로그 이미지

IoT 개발자 블로그이고 싶다.

1byte