분류 전체보기 (29) 썸네일형 리스트형 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.. URI에서 IPv6 사용 IPv6가 나온지 꽤 오랜 시간이 지났지만 여전히 IPv4 주소를 많이 사용한다. 내가 지금까지 했던 서버통신 IP 주소체계도 대부분이 IPv4 였다. 그런데 갑자기 규격이 변경되면서 IPv6를 쓴다고 한다. 그래서 팀장님이 지금 작업하고 있는 LWM2M client에서 IPv6를 사용가능한지 물어보셨다. 당연히 가능하져! 라고 말은 했지만, 역시 직접 테스트를 해보아야 한다. LWM2M으로 서버와 통신을 할 때, CoAP URI를 만들어서 서버에 Register를 보내야한다. 예를 들어 IP 주소가 192.168.1.13 이고 포트가 15683 이면 coap://192.168.1.13:15683 이 통신할 CoAP URI가 된다. 진짜 간단하게 생각하면 IPv6 주소도 그냥 넣으면 된다. 그런데 문제가.. Leshan LWM2M - CoAP Ping LWM2M은 CoAP을 이용하여 통신을 한다. 전에 글에도 쓴 것 처럼 Leshan은 Californium 이라는 CoAP Open source를 사용한다. CoAP 기반 통신만을 사용하려면 Californium core만 사용하면 쉽게 사용할 수 있다. 대부분의 기능은 Leshan에서 제공하는 기능을 사용하면 구현이 된다. 그래도 간혹 필요한 기능을 구현하기 위하여 CoAP core도 건들 필요가 있다. Ping test 기능 구현이 그 중 하나였다. #Ping test 임베디드 장치에서 Ping을 넣어달라는 요청은 항상 있다. 서버 입장에서는 데이터가 안온다면 장치와 네트워크 연결이 되어있는지, 속도는 얼마나 나오는지 궁금하기 때문이다. 이를 위해 규격서에는 항상 Ping test 항목이 포함되어 있.. Linux에서 JNI 쓸 때 라이브러리 문제 요즘 프로젝트에서 JAVA를 많이 쓰고 있다. 규격서에 JAVA를 명시해두었기에 우리 팀 프로젝트중에서 유일하게 JAVA를 쓰는 프로젝트를 하고 있기 때문이다. 학부 때 이후로 JAVA를 쓴 적이 없으니 5년은 안쓴 것 같다. 원래 자바를 메인으로 하던 사람이 아니라 좀만 복잡한게 나오면 골머리를 앓고 있다. 특히 가장 문제가 되었던게 이 JNI. 임베디드 특성상 하드웨어 제어를 자주 해야한다. 간단한 Serial 통신이면 exec로 하면 되는데, 문제는 다른 C/C++ 라이브러리를 가져와야 할 때이다. 처음에는 JNA를 쓰려고 했는데, JNA는 C++은 못쓴다고 해서, 또 JNI 함수까지 규격서에 정의가 되어 있어서 어쩔수없이 JNI로 갈아타게 되었다. Header 만들고, C작성하고, so파일 만드는.. MBED OS 경험기 Mbed OS는 ARM에서 제공하는 오픈소스 embedded OS(Operating System)이다. embedded에서 mbed라는 단어가 나왔다는 말도 있다. Mbed OS는 CMSIS(Cortex Microcontroller Software Interface Standard)기반으로 작성되어 다양한 Hardware환경에서도 Cortex M proccessor라면 동일한 function을 사용할 수 있다. 즉, ARM Cortex M proccessor를 사용한다면 동일한 함수로 제어할 수 있다. 또한, 웹 환경에서 Mbed Compiler를 제공하기 때문에 다양한 OS환경에서 컴파일하고 다운로드 할 수 있다. 내부에 TLS/DTLS를 포함하기 때문에 통신에 보안을 제공해준다. RTOS(Real T.. 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를 제공하는 인터페이스이다. 아날로그-디지털 변환기, 센서 등을 제어할 수 있는 기능이다. 이러한 기능들을 사용할 수 있는.. 이전 1 2 3 4 다음