본문 바로가기

정리글

(8)
JAVA Maven 라이브러리 분리 (without dependency) 이전 게시글에서는 Maven에서 라이브러리를 뺀 jar파일을 만들었다. void-inside.tistory.com/25?category=868967 JAVA Maven에서 나는 라이브러리를 별도로 쓰고 싶었다 이전에 정리하였던 Leshan LWM2M을 아직 프로젝트에서 사용하고 있다. Leshan LWM2M은 Maven을 이용하여 프로젝트를 관리한다. Maven project는 pom.xml에서 Library dependency를 설정하고, 배포방식을 설정할 수.. void-inside.tistory.com 하지만 이 방식은 직접 class-path와 Main class를 MANIFEST에 입력해주어야 했다. 이걸 자동으로 해주는 작업이 필요했다. 그래서 pom.xml에 plugin을 추가하였다. org..
JAVA Maven에서 나는 라이브러리를 별도로 쓰고 싶었다 이전에 정리하였던 Leshan LWM2M을 아직 프로젝트에서 사용하고 있다. Leshan LWM2M은 Maven을 이용하여 프로젝트를 관리한다. Maven project는 pom.xml에서 Library dependency를 설정하고, 배포방식을 설정할 수 있다. Leshn LWM2M에서는 jar파일이 3개가 만들어지는데, 하나는 현 패키지 파일만 나오는 방식, 다른 하나는 with-dependency로 만드는 방식이다. 그러니까 with-dependencies는 jar파일안에 모든 의존성 라이브러리가 들어가 있는 것이다. 일반 서버나 PC에 배포해서 구동한다면 이런 방식은 효율적이고 배포도 간편하다. 굳이 라이브러리를 따로 배포할 필요가 없으니 말이다. 문제는 나는 임베디드 개발자라는 것이다. 오히려 ..
JAVA Maven 프로젝트에서 JNA 사용 프로젝트를 진행하다가 외부 라이브러리를 가져다 써야 하는 일이 생겼다. 보안 관련 라이브러리인데 so 파일로 되어있었다. 기존에는 장치가 RTOS나 Linux에서 C/C++ 기반으로 프로그램을 만들어서 가져다 쓰는데 문제가 없었다. 심지에 라이브러리 제조사에서 C++로 테스트코드까지 작성하여 주었으니 말이다. 그런데 이번에 하는 프로젝트는 JAVA를 이용하고 있다. 설상가상으로 JAVA로 프로그램을 짜는 프로젝트가 이번이 처음이라 주변에 잘 아는 사람들이 없었다. 그래서 이틀간 열심히 구글링을 하고 이것저것 추가해보고 하였다. 처음에는 JNI(Java Native Interface)를 시도하였다. 학부때도 JNI를 썼으니 제일 먼저 생각나는게 이거였다. 일단 동작방법을 확인하려고 단독으로 돌아가는 샘플코..
IIO - Linux Industrial I/O subsystem IIO, The Industrial I/O는 ADC, DAC, 센서 등의 장비들을 위한 하위시스템이다. 어플리케이션에서 다양한 센서, 드라이버와 통신을 하거나 조작할 수 있는 인터페이스를 제공한다. IIO의 기능 장치 등록 및 제어 sysfs 를 통한 장치 채널의 폴링 액세스 chrdevs 이벤트 하드웨어 원형 버퍼 지원 버퍼링을 이용한 CPU 부하 감소 kfifo (linux kernel에서 제공하는 Queue) 지원 * 그래서 IIO라는게 무엇일까? 사실 IIO라는게 잘 알진 못한다. 실제로 써보진 않았기 때문이다. 이론상으로는 IIO, 즉, 보드와 연결된 장치들을 제어하는 API를 제공하는 인터페이스이다. 아날로그-디지털 변환기, 센서 등을 제어할 수 있는 기능이다. 이러한 기능들을 사용할 수 있는..
LWM2M 했던 것들 정리 현 회사에 들어와서 임베디드 어플리케이션을 이것저것 개발하였다. 그중에서 주로 하던 것이 수집한 데이터를 서버로 전송하는 기능을 개발하는 것이다. 그 방법에는 여러가지가 있는데, 서로 프로토콜을 만들어서 쓰는 경우가 종종 있는 방법이였고, 다른 하나는 LWM2M 프로토콜을 사용하는 방식이었다. 특히, Network Management System, 즉, 모뎀의 통신 상태나 데이터를 가져오는 기능을 만들때 이 LWM2M 을 자주 사용하였다. 솔직히 아직도 잘 안다고 말할수는 없지만, 내가 만든 어플리케이션 이곳저곳에서 많이 사용하였다. 그래서 이 LWM2M(Light Weight Mechine to Mechine)이 무엇이냐고 물어보면, CoAP 기반의 IoT 장치 리소스 관리 프로토콜이라고 간단하게 말할..
TCP tunneling 을 빙자한 Raw Socket 회사에서 게이트웨이 어플리케이션을 만들었다. 장치에서 데이터를 가져와 LWM2M으로 서버와 통신하는 그런 어플리케이션이다. 원래는 LTE모듈로 UDP 송신하는 단순한 통신방식이였다. 그런데, 보고서까지 작성한 프로젝트를 가져와서 수정을 해야 한다고 한다. LTE모듈이 아닌 다른 라우터 장치로 서버와 통신을 해야한다고 한다. 근데 그 라우터 장치는 TCP만 지원한다고 한다. 그럼 서버에 어떻게 보내야 할까? UDP 패킷을 만들고, 그 위에 TCP를 씌워야 한다는 팀장님. 장치가 TCP로 보내면 저쪽에서 Proxy server가 UDP 패킷을 server로 전송한다는 것이다. GW - Router - Proxy server - server 이러한 구조가 된다는 것이다. TCP는 어짜피 장치가 만들어주기 때문..
mbed OS 에서 메모리 사용량 체크 mbed_stats.h 과제가 거의 완료되어 여유시간이 남았으니 회사에서 작업했던 내용을 조금씩 정리하고자 한다. 곧있으면 투입된 다른 프로젝트가 시작할터이니 그 전에 조금씩 해놔야지. 지난 과제에서는 Mbed OS 가 들어간 커스텀 보드를 사용했다. 근데 뭐만 넣었다 하면 맨날 리셋이 되더라... 거의 대부분의 원인은 달려있던 통신모듈이 강제로 리셋 때리는 거였다. 다른 Thread에서 Priority를 높게 잡아가면 통신모듈에서 돌아가는 Thread가 잘 안돌아가서 오류 뿜뿜 -> 리셋 아무튼, 처음에는 메모리 문제인가 해서 이것저것 빼고, 코드 전체 크기도 줄이고, Static array 생성한것도 줄여보고 다 했다. 거의 한달동안 이 짓을 해서 코드가 꽤 가볍게 돌아가긴 하더라. 불필요하게 많이 선언된 배열들을 다 줄여..
시리얼 통신 그래도 소프트웨어 개발자라고 회사에 들어가서 일하고 있으니 어디 한번 개발에 관한 일이라도 써보자. 2년이 지났고 한 프로젝트 참여도 하고 있긴 하다만, 아직도 코드를 짜는걸 보면 중구난방으로 짜고 있다. 업무는 대부분 시리얼 통신으로 데이터 주고받기다. 서버에 업로드를 하기 위한 통신 모듈도, 아래에 붙어 있는 장치도 전부 시리얼 통신으로 제어한다. 물론 장비에 Ethernet 포트도 달려있으니 LAN으로 연결한다면야 서버 통신을 TCP로 하기도 한다.만 최근에는 대부분 무선통신모듈을 사용하는터라 어쨌든 시리얼이다. 장치의 커널 UART Driver 가 시리얼 콘솔을 /dev/tty 와 연결하면 C++ 어플리케이션에서 그걸 사용한다. 커널을 만진 경험이 적어서 아직도 잘 알진 못한다. 그저 사용할 뿐...