오픈소스 유틸리티인 GPSD에 버그가 있다고 한다. 정확히는 3.20 버전부터 3.22 버전까지 해당되며, GPSD를 이용하여 시스템 시각을 UTC에 동기화 시킬 때 버그로 인해 시간이 과거로 돌아가는 현상(Rollover)이 발생한다고 한다. GPSD가 워낙 많이 사용되어 영향력이 큰 탓인지, 미국 정부에서 이를 발표하였다. https://www.cisa.gov/uscert/ncas/current-activity/2021/10/21/gps-daemon-gpsd-rollover-bug 전문은 다음과 같다. Critical Infrastructure (CI) owners and operators, and other users who obtain Coordinated Universal Time (UTC) f..
OpenSSL이 제공하는 기능을 이용하여 다음과 같이 AES-CCM-128 암호화 및 복호화 함수를 만들 수 있습니다. #include #include #include "openssl/evp.h" #define AES_CCM_128_TAG_LEN (16) ///< AES-CCM-128 암호화 Tag 바이트열 길이 #define AES_CCM_128_KEY_LEN (16) ///< AES-CCM-128 키 바이트열 길이 #define AES_CCM_128_NONCE_LEN (12) ///< AES-CCM-128 Nonce 바이트열 길이 /** * @brief AES-CCM-128 암호화를 수행한다. * @param[in] plaintext 암호화할 평문 (Null 전달 시 EVP_EncryptUpdate(..
본 글은 SNMP 표준 중 RFC 2579 Textual Conventions for SMIv2 표준에 정의된 RowStatus 객체의 의미와 그 사용 방법을 정리한 글입니다. 테이블 유형의 MIB 오브젝트 MIB를 정의할 때, 테이블 유형의 오브젝트를 정의할 수 있습니다. 테이블 유형의 오브젝트는 공통된 형식의 정보 묶음이 하나 이상 존재할 경우에 사용됩니다. 예를 들면 다음과 같습니다. SNMP 관리 대상 장치에 장착된 하나 이상의 네트워크 인터페이스에 대한 정보를 관리하고자 하는 경우, 각 네트워크 인터페이스는 보통 공통된 상태정보(들)을 가집니다. 예: 연결상태, IP주소, 송신패킷 수, 수신패킷 수 등 이처럼 공통된 상태정보(들)을 하나의 정보 묶음으로 정의합니다. 각 네트워크 인터페이스에 대한..
본 글은 RFC 2579 Textual Conventions for SMIv2 표준에 기술된 RowStatus에 대해 정리한 글입니다. 용어 정의 열 요구사항 : 개념적 행 생성을 위한 "SET" 프로토콜 동작 수행 시, 값이 반드시 제공되어야 하는 열 객체들 해당 열 객체들 모두에 대한 값이 설정되지 않으면 개념적 행이 생성될 수 없다. 필요 열 : 개념적 행 생성을 위한 "SET" 프로토콜 동작 수행 시, 값이 반드시 제공되어야 하는 열 객체 해당 열 객체에 대한 값이 설정되지 않으면 개념적 행이 생성될 수 없다. MIB 모듈 : 원하는 특정 MIB 를 정의한 것 (즉, ASN.1 파일에 정의된 내용이라고 보면 된다) RowStatus 정의 개념 RowStatus textual convention은 ..
개요 ffmpeg은 오픈 소스 기반의 영상/음성 기록, 변환, 스트리밍 솔루션이며, 공식 웹사이트는 다음과 같습니다. https://www.ffmpeg.org/ 본 글에서는 ffmpeg을 ARM 기반 임베디드 리눅스 플랫폼용으로 빌드하는 방법에 대해 소개합니다. 빌드 환경은 Ubuntu 16.04 리눅스입니다. 크로스 컴파일러 설치 Ubuntu 16.04 리눅스 환경에서, ffmpeg을 빌드하기 위한 크로스 컴파일러를 설치합니다. 여기서는 "arm-linux-gnueabihf-gcc"를 사용합니다. $ sudo apt update $ sudo apt install gcc-arm-linux-gnueabihf ffmpeg 소스패키지 다운로드 https://www.ffmpeg.org/download.html에..
개요 JSMN(JSON parse library)는 JSON 구문 파싱 라이브러리이며, 공식 웹사이트는 아래와 같습니다. zserge.com/jsmn/ 본 글에서는 JSMN 라이브러리를 ARM 기반 임베디드 리눅스 플랫폼용으로 빌드하는 방법에 대해 소개합니다. 빌드 환경은 Ubuntu 16.04 리눅스입니다. 크로스 컴파일러 설치 Ubuntu 16.04 리눅스 환경에서, jsmn 라이브러리를 빌드하기 위한 크로스 컴파일러를 설치합니다. 여기서는 "arm-linux-gnueabihf-gcc"를 사용합니다. $ sudo apt update $ sudo apt install gcc-arm-linux-gnueabihf JSMN 소스 패키지 다운로드 github.com/zserge/jsmn에서 JSMN 라이브러리..
개요 pps-tools는 시스템의 Kernel PPS 기능을 사용할 수 있는 오픈소스 유틸리티(github.com/redlab-i/pps-tools)입니다. pps-tools 내에 포함된 timepps.h 파일을 이용하여 Kernel PPS 관련 시스템콜을 호출하는 어플리케이션을 개발할 수 있으며, pps-tools 빌드 시 생성되는 ppstest 유틸리티로는 시스템의 Kernel PPS 동작을 확인할 수 있습니다. 본 글에서는 pps-tools를 x64/x86 리눅스 시스템용으로 빌드하는 방법과 arm 리눅스 시스템용으로 빌드하는 방법을 설명합니다. 참고로 본 글에서 사용된 환경은 우분투 리눅스 18.04 버전입니다. pps-tools 다운로드 다음 명령을 통해 pps-tools를 다운로드합니다. (글..
Wireshark - 라이센스 Wireshark의 라이센스는 GNU GPLv2를 따른다. 따라서 수정하거나 수정 없이 상업적 사용이 가능하다. 단, 배포 대상이 원할 경우 GPL에 따라 소스코드 및 관련 문서를 공개해야 한다. Chapter 15. This Document’s License (GPL) Chapter 15. This Document’s License (GPL) As with the original license and documentation distributed with Wireshark, this document is covered by the GNU General Public License (GNU GPL). If you haven’t read the GPL before, please..
임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp udhcp 임베디드 리눅스 플랫폼에서 구동시킬 수 있는 DHCP 서버로는 udhcp 가 있다. 본 글에서는 udhcp 를 이용하여 임베디드 리눅스 플랫폼 상에 DHCP 서버를 구축하는 방법을 설명한다. udhcp 는 DHCP 서버와 클라이언트 기능(udhcpd: 서버 데몬, udhcpc: 클라이언트 데몬)을 지원하며 공식 웹페이지는 다음과 같다. udhcp Server/Client Package udhcp Server/Client Package The udhcp package is no longer maintained/packaged as a standalone project. It has been fully integrated into bu..
본 글에서는 구글맵을 이용하여 특정 지점의 GPS 좌표(경도, 위도)를 확인하거나, 특정 GPS 좌표를 갖는 지점을 지도 상에서 확인하는 방법을 소개한다. 구글맵 상 특정 지점의 좌표(위도, 경도) 확인하기 구글맵 상에서 특정 지점의 좌표를 확인하는 방법은 매우 간단하다. 웹 브라우저 상에서 구글맵 사이트(https://www.google.co.kr/maps)에 접속한 다음, 좌표를 알고 싶은 지점을 지도 상에서 클릭한다. 지도 상에서 원하는 지점을 클릭하면 화면 하단에 네모난 팝업 창이 생성되며, 해당 창에 간략한 주소와 위도(Latitude), 경도(Longitude) 값이 출력된다. 다음 그림은 구글맵에서 태평역을 클릭한 화면이다. 화면 하단 팝업창에 좌표 값이 표시된 것을 확인할 수 있다. 구글맵..
본 글에서는 IPv6 멀티캐스트(Multicast) 주소 형식에 대해 설명한다. IPv6 멀티캐스트 주소의 형식은 IETF RFC 4291 IP Version 6 Addressing Architecture 표준의 2.7절에 정의 되어 있다. RFC 4291 : IP Version 6 Addressing Architecture 2.7. 멀티캐스트(Multicast) 주소 IPv6 멀티캐스트 주소는 네트워크 인터페이스들(보통 서로 다른 노드에 포함되어 있는)이 속한 그룹에 대한 식별자이다. 각 네트워크 인터페이스는 다수의 멀티캐스트 그룹에 속할 수 있다. 멀티캐스트 주소 형식 멀티캐스트 주소는 다음과 같은 형식을 가진다. 시작 코드 필드 시작 부분의 8 비트 길이의 비트열 "11111111"은 해당 주소가 ..
본 글에서는 윈도우즈 시스템에서 gcc를 사용할 수 있도록 지원하는 MinGW-w64에 대해 소개한다. MinGW-w64 란? MinGW는 윈도우즈 환경에서 gcc를 사용할 수 있도록 해 주는 유틸리티이며, 홈페이지는 다음과 같다. Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64] mingw-w64.org gcc 기반 프로젝트를 변경 없이(혹은 변경을 최소화하여) 윈도우즈에서 빌드하고 실행할 수 있게 해 준다는 장점이 있으며, 유사한 툴로는 Cygwin이 있다. MinGW-w64 설치파일 다운로드 MinGW-w64의 윈도우즈용 설치 파일은 다음 링크에서 다운로드할 수 있다. Mingw-builds [mingw-w64] mingw-w64.org 위 페이지 접속 ..