2013년 10월 1일 화요일

IRIS mote에 AVR ISP mkII 연결


IRIS mote는 MEMSIC (구 Crossbow)에서 나온 모트로 ATmega1281, AT86RF230 등으로 구성된 무선 센서이다. 이번에 실험할 일이 있어 안쓰고 있던 IRIS로 테스트베드를 꾸며보려고 했더니 ISP겸 시리얼 로그를 받아보기 위한 USB 인터페이스 보드(MIB520)가 별도로 필요하고, 생각보다 개당 가격이 너무 쎈 문제가 있었다. 아무리 수입품이라지만 개당 20만원이 넘어가는 건 너무하다.ㅠㅠ

그래서 역시 좀 남아있는 AVR ISP mkII를 IRIS에 연결하기로 했다.

재료는 MDA100CB, AVR ISP mkII, NT-USB2UART, 및 기타 케이블 및 납땜용 공구들.


MDA100CB는 MEMSIC 계열 모트를 위한 breakout board이다. 근데 이것도 국내 판매 가격이 20만원대로 장난이 아니다.ㅠㅠ 실험실에 남는게 있어서 다행. 부족하면 커넥터랑 적당한 사이즈 만능기판으로 만들면 될 듯.


NT-USB2UART는 디바이스마트에서 판매하는 CP2102 칩 기반의 USB-to-UART 변환 모듈이다. 테스트베드에서 시리얼 로그를 받아보기 위해서는 필수.

사실 AVR 칩에 ISP 연결은 생각보다 단순하다. 6핀을 칩에 연결만 해주면 끝.


  1. MISO (ATmega1281의 PDO(TXD0))
  2. Vcc
  3. SCK
  4. MOSI (ATmega1281의 PDI(RXD0))
  5. RESET
  6. Ground

그럼에도 불구하고, 이번에 쉽지 않았다. NT-USB2UART랑 ISP를 위한 데이터 전송 핀들이 공유되고 있기 때문에 뭔가 간섭을 일으키는 것 같았다. 에러 메시지는 'MOSI Fail'.

혹시나 해서, NT-USB2UART의 USB 연결을 제거하고 ISP만 연결하니 정상 동작한다. 아무래도 PDI핀이 NT-USB2UART의 data-out 핀에 영향을 받는 것 같았다. PDI와 ISP의 MOSI는 직접 연결하고, PDI와 NT-USB2UART data-out 핀 사이에는 1kΩ 저항을 넣어주니 정상 동작! 이것 때문에 또 하루를 날렸다.ㅜㅜ


이제 4개 완성. 8개만 더 만들면 되겠군....ㅎㅎ;;;

2013년 6월 6일 목요일

바쁘다.

정말 장난아니게 바쁘다.
일단 일은 벌려놔야 수습하면서 다 하게 된다는 평소 신조대로 죄다 벌려놨더니 수습이 안될 정도에 이르렀다.

자정이 거의 다 되어서야 퇴근하는 나날들... 휴일에도 출근하는게 다반사...
그래도 연초에는 즐거운 마음과 긍정의 의지력으로 해나갔는데, 시간이 지나도 완성되는 일의 양보다 새롭게 쌓이는 일의 양이 더 많으니...ㅠㅠ

이대로는 안되겠다. 일단 정리할 일들은 정리하고 서버가 해줘야 할 일들을 만들어놔야겠다. 에휴... 명색이 OS하는 놈이 실생활에서는 작업의 병렬화를 못하고있다니...ㅉㅉㅉ

정신차리자. 하나씩 결과물들을 만들어내고 능력을 입증해보이자. 할 수 있다.

2013년 1월 1일 화요일

Good-bye 2012! Hello 2013!

연말마다 지난 일년을 돌이켜보면 '아~ 다사다난했구나' 하고 느끼겠지만, 2012년은 정말 다사다난했다. 여러가지가 있겠지만, 특히, 현실 정치에 많은 관심을 갖게 된 한 해였다. 물론 다른 20대와 마찬가지로 '나는 꼼수다'의 영향이 컸다. 작년까지는 단순히 나꼼수에서 제기한 여러 의혹들과 폭로에 관심을 가졌던 수준이라면, 올해는 총선과 대선을 겪으며, 보수와 진보의 가치에 대해 직접 생각하고 공부하게 되었다. 그리고 확실하게 진보의 가치를 믿게 되었다. 결국 결과적으로 진보는 패했지만, 그래서 새해 첫날인 오늘까지도 가슴이 쓰라리지만, 평범한 99% 중 한 사람으로써 사회적 약자에 감정이입하며 모순적인 사회 시스템에 대해 계속 떠들고 행동할 줄 아는 한 사람의 지식인이 되기로 했다.

정치 뿐만 아니라 하고 있는 연구에 대해서도 그 맛을 깨우쳐가는 과정에 있는 2012년이었다. 이렇게 된 데에는 최근에 가깝게 지내게된 한 친구가 있었다. 그 친구가 없었다면 나도 모르게 그저 주어진 일만 처리하는 아주 수동적인 연구원이 되고 있었을 것이다. 그 친구에게 정말 감사하다.ㅎㅎ

내가 몸담고 있는 Wireless Sensor Networks 분야가 폭발적으로 성공할 지는 여전히 미지수다. 그러나 인류 생활을 한단계 더 발전시킬 수 있는 핵심 기술이 바로 이 분야라는 것에는 여전히 강하게 믿는다. 지금까지 wireless networking 쪽에만 관심을 가졌었는데, 앞으로는 이를 활용한 센싱 시스템들을 하나씩 만들어볼 생각이다. 데이터들이 쌓아 다른 분야를 연구하는 사람들에게도 도움과 영감을 주고 싶다.

꿈꾸던 2013년은 아니지만, 그래도 시간은 가서 2013년은 오고야 말았다. 최선을 다해 살아보자. 인류의 발전을 위해서...!!

2012년 12월 27일 목요일

Unicast IPv6 packet in broadcast Ethernet frame

IPv6 패킷은 유니캐스트 패킷인데 하위 이더넷 프레임 헤더는 브로드캐스트일때...
물론 이런 경우 일반적으로는 없다. 그러나 나한테 닥쳤다. 요새 Click Modular Router 갖고 IPv6 기반 low-power wireless PAN (6LoWPAN) 경계 라우터를 만들다보니 이런 일도 다 생긴다.ㅎㅎ

여하튼 이런 경우 해당 패킷은 리눅스 커널 IPv6 스택으로 들어간다. 만약, IPv6 헤더의 목적지 주소가 자기 자신인 경우 정상적으로 상위계층으로 올라간다. 하지만 목적지 주소가 다를 경우, 포워드시 패킷이 드랍된다.

그 이유는 이더넷 프레임 수신시 이더넷 헤더의 목적지 ID가 브로드캐스트인 경우 패킷 타입(소켓 버퍼의 pkt_type)을 브로드캐스트(PACKET_BROADCAST or PACKET_MULTICAST)로 낙인(!) 찍어버리기 때문이다.

eth.c에서 목적지 ID에 따라 패킷 타입을 결정짓는 부분
ip6_output.c의 ip6_forward() 중 pkt_type에 따라 패킷이 드랍되는 부분

IPv6에서는 하위 계층의 정보를 싹다 버리거나 무시하고 처리할 줄 알았는데... 아오... 이걸 몰라서 일주일 동안 삽질했네... 애꿏은 OpenWrt 방화벽만 찔러보고... 결국 리눅스 커널 IPv6 부분에 printk() 넣어가면서 추적 끝에 해결!! ㅠㅠ

휴... 퇴근하자...ㅠㅠ

2012년 11월 27일 화요일

'slattach'로 SLIP 연결 만들기

SLIP(Serial Line IP)은 옛날 옛적에 컴퓨터도 인터넷도 완전 느려터지고 이더넷 기반의 인터넷 연결이 쉽지 않던 불행한 시기에 값싼 시리얼 케이블로 인터넷을 해보고자 시리얼 라인에 IP 패킷을 전송하기 위한 프로토콜이다. 그렇다고 뭔가 특별한 기능이 있는 것은 아니고 시리얼의 문자단위 전송을 패킷단위 전송으로 바꿔주는 역할을 한다. 이런 프로토콜은 SLIP에서 시작해서 TCP/IP 헤더 압축까지 지원하는 CSLIP, 최근에는 PPP까지 발전해왔다. 하지만, 여전히 자원이 제한된 임베디드 장치에서는 여전히 SLIP은 매력적인 프로토콜이다.

안타깝게도 윈도에서는 공식적으로 (운영체제 레벨에서) SLIP 연결을 지원하지는 않지만, 여전히 리눅스, 유닉스, Mac OS X 등에서는 운영체제에서 SLIP 연결을 지원하고 있다. 바로 'slattach'라는 툴을 사용하면 된다.

최근 임베디드 보드를 만들 때에는 갈수록 줄어드는 PC의 시리얼 포트를 고려하여 FTDI, CP210x 같은 USB-to-Serial 칩을 많이 쓴다. 이런 환경을 우선적으로 고려하면 간단하게 다음과 같이 타이핑하여 SLIP 연결을 만들 수 있다.

$ sudo slattach -p slip -s 115200 -L -m /dev/tty# 
$ sudo ifconfig sl0 up

이렇게 하니까 된다. 간단하게 설명하자면 -p는 프로토콜을 지정하는 옵션인데 기본적으로 cslip이므로 slip으로 설정했다. -s는 눈치챘겠지만 속도를 지정하는 옵션이다.  -L 옵션은 CLOCAL 옵션을 활성화하고, -m 옵션은 CRTSDTS 옵션을 사용하지 않게 한다.

  • CLOCAL: 모뎀 제어 라인 무시
  • CRTSDTS: 하드웨어 흐름 제어(flow control) 사용

기타 자세한 정보는 'man slattach'와 구글을 참고하시길...

2012년 9월 21일 금요일

Google Web Toolkit 프로젝트를 SVN에 깔끔하게 저장하기

SVN에 깔끔하게 저장하기라 함은 빌드의 산물들은 제외하고 SVN 저장소에 저장하는 것을 뜻한다. 즉, 빌드의 산물들을 제대로 svn:ignore 키워드로 지정하기만 하면 깔끔하게 저장된다. 하지만 Google Web Toolkit은 Java 파일을 JavaScript 파일로 컴파일(?) 해버리는 상당히 특이한 도구라서 어떤 것들을 svn:ignore 속성에 넣어줘야 하는지 좀 막막하다. 이런 저런 삽질 끝에 얻은 결론은 다음 3개의 디렉토리를 svn:ignore에 넣어주면 될 것 같다는 것.

  • PROJECT/gwt-unitCache
  • PROJECT/war/project
  • PROJECT/war/WEB-INF/deploy
여기서 이탤릭체로 표시한 PROJECT와 project는 각각 프로젝트 이름을 뜻한다. 그건 알아서 판단 하시길...

아, 참고로 현재 내가 쓰고 있는 GWT의 버전은 2.4.0!

2012년 9월 19일 수요일

Linux 'screen' 으로 데몬 만들기

아직 /etc/init.d 스크립트까지 만들어본건 아니지만, screen으로 데몬 만들어서 시작하고, 종료하는 것까지 성공!

시작하기
# screen -dmS daemonName command

종료하기
# screen -S daemonName -X quit

이제 이걸 /etc/init.d 내에 스크립트로 만들어주면 될 듯... 한데... 귀찮네..;; 스크립트는 다음에 하는 걸로...ㅋㅋ

아... 여기 잘 정리가 된게 있구나... 어차피 난 지금 OpenWrt에서만 놀면 되니까...
OpenWrt용 Init script 작성법!