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.cip6_forward()pkt_type에 따라 패킷이 드랍되는 부분

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

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

2012년 11월 26일 월요일

'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
여기서 이탤릭체로 표시한 PROJECTproject는 각각 프로젝트 이름을 뜻한다. 그건 알아서 판단 하시길...

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

2012년 9월 18일 화요일

Linux 'screen' 으로 데몬 만들기

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

시작하기
# screen -dmS daemonName command

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

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

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

2012년 9월 11일 화요일

터미널에 컬러 출력하기

정부출연연구소에서 정부의 R&D 과제로 먹고 살다보면 R&D 할 때 늘 우선적으로 고려가 되는 부분이 바로 '시연'이다. 그런데 안타깝게도 내가 하는 일은 초소형 장치에 들어가는 임베디드 운영체제를 개발하는 일이다 보니 시연이 늘 까다롭다. 뭔가를 멋지게 보여주고 싶어도 딱히 멋진 방법이 없다. 무선 센서 같은 초소형 장치에는 어지간한 입출력 장치도 없는게 현실이고, 그러다보니 대부분의 시연은 터미널 프로그램에 시리얼로 입출력하는 식이다.

어김없이 올해의 중간평가 시즌인 요즘, 또 시연에 대한 고민에 고민을 반복하다가 우리로부터 기술이전을 받아간 한 업체가 우연히 보여준 ANSI color라는게 문득 생각났다.



이거 대박이다. 앞으로는 이걸로 좀 감각적으로(?) 시리얼 출력을 그려봐야겠다. :)

2012년 9월 10일 월요일

Mac용 TftpServer

언제부터인지는 모르겠지만 우분투 리눅스에서 TFTP 서버 돌리기가 까다로워졌단다. 그래도 구글링해보면 다들 어찌어찌하여 문제를 돌파하던데, 난 tftpd를 쓰던, atftpd를 쓰던, HPA-tftpd를 쓰던 도통 UDP 69번 포트가 열리지 않는다.

삽질 좀 하다가 이내 포기하고 Mac에서 TFTP 서버를 열기로 했다.

Mac용 TftpServer

이가 없으면 잇몸으로... 물론 내 Mac이 조금 더 지저분해지긴 했지만...ㅋㅋ

2012년 5월 29일 화요일

Ubuntu에서 쓸만한 Twitter app. - Hotot!

우분투에서 Gwibber를 쓰다가 안되겠다 싶어서 다른 트위터 애플리케이션을 찾았다. 이름하여, Hotot. 하탓(?) 이라고 읽어야 하나?



여하튼 Gwibber는 Unity indicator에 포함된다는 점 빼고는 장점이 거의 없다. UI도 불편하고, quote retweet도 안된다. 화면 스크롤도 이상하다. 반면, Hotot은 UI도 우분투스럽게 괜찮고, Unity indicator에도 추가가 된다. 위에 보이는 외계인같은 아이콘이 Hotot이다.

Hotot은 기본 저장소에 없으므로 ppa를 별도로 추가해줘야 한다.

$ sudo add-apt-repository ppa:hotot-team
$ sudo apt-get update
$ sudo apt-get install hotot
출처: http://www.omgubuntu.co.uk/2011/02/hotot-twitter-app-adds-indicator-applet-again/

2012년 5월 23일 수요일

NanoQplus 2.5.0 배포의 변

ETRI에 들어온지 어언 4년차. 학부 4학년 시절 졸업작품 준비하다 NanoQplus 만난게 인연이 되어 UST 석사과정 2년, 계약직 연구원 1년이 지나 2년차가 진행중이며, 올해도 절반 정도가 훌쩍 지나갔으니 어언 4.5년이라고 해야 정확할 듯 싶다.

ETRI에서 내가 하는 일은 NanoQplus 운영체제를 개발하는 일이다. NanoQplus를 소개하자면 8비트(AVR), 16비트(MSP430), 그리고 32비트(ARM Cortex-M series) 급 마이크로컨트롤러에 적합한 초소형 임베디드 장치용 운영체제이다. 예전에는 센서 네트워크용 운영체제라고 표현을 했지만 요새는 Internet of Things용이라고 해야 조금 더 트렌디하게 느껴지려나?ㅋ 여하튼 용도를 보면 느껴지겠지만 무선 네트워크 응용을 쉽게 개발할 수 있도록 라이브러리들도 지원하고 있다.





무선 좀 지원한다고 뭐 거창하게 운영체제까지 필요하냐라는 질문이 들어올 수 있다. 하지만 필요하다. 무선 송수신 칩을 제어해서 바로 옆의 장치와 안정적으로 통신하기 위한 MAC에서도 운영체제는 필요하고, 다수의 장치들이 하나의 네트워크를 만들고 서로 멀티홉으로 메시지를 주고 받기 위해서는 타이머, 인터럽트 처리 등등 운영체제에서 제공하는 많은 기능들이 필요하다. 이젠 그 운영체제로 그 조그마한 장치에서, 그 별거 아닌 듯한 무선으로 인터넷(IPv6)까지 지원받아 초소형 무선 웹서버까지 만들 수 있으니 필요하지 않다고 말할 수 없을 것이다. 게다가 사용자 응용은 나날이 복잡해져 여러 태스크들을 동시적으로 수행해야 한다. 이런 이유들에도 불구하고 여전히 필요하지 않다고 하는 사람들은 순수 펌웨어 레벨에서 프로그래밍할 때의 고충을 모르는 사람일 것이다.

NanoQplus는 소스코드가 공개되어 있다. 아쉽게도 전부 공개도 아니고 순수 오픈소스 프로젝트도 아니지만, 그래도 임베디드나 운영체제를 전공 또는 취미로 공부하고 싶은 사람들을 위해 공개하였다. 상업용은 기술이전을 받아야 한다. 그래야 우리도 먹고 산다.ㅋ 2007년 9월 처음 공개 버전은 2.3이었고, 2009년 4월 2.4가 공개되었었다. 그리고 바로 오늘 2.5의 베타버전을 공개하였다. 물론 중간에 ETRI 내부 조직 개편의 소용돌이와 함께 배포 서버도 사라지면서 공식적인 채널도 사라졌었지만 그래도 우리팀의 소수는 묵묵히 NanoQplus 개발을 멈추지 않고 계속 하고 있었고 다시 공식적으로 배포할 수 있기까지 끊임없이 노력해왔다.

이번 공개버전 릴리즈는 개인적으로도 의미가 남다르다. 대략 5년전, 운영체제 개념만 알았지 어떻게 구현해야 할 줄 몰랐던 학부생이 재미로 시작했다가, 어쩌다 보니 연구원에 들어와 직접 코드에 손을 대고, 이렇게 직접 배포를 하게될 줄은 정말 꿈에도 몰랐을 것이다. 물론 세계적으로 유명한 오픈소스 프로젝트인 TinyOS나 Contiki 같은 타 초소형 임베디드 운영체제들과 비교하여 볼 때 직접 만든 NanoQplus의 부족한 기능들이 느껴지지만, 그렇기 때문에 여전히 나에겐 매력적인 운영체제이자 장난감이다.

그러니 졸업작품 준비 중인 대학생 여러분들! 연구 논문 준비 중인 대학원생 여러분들! 취미로 임베디드 하시는 분들! NanoQplus 좀 써주세요.(갑자기 존댓말.ㅋㅋ) 우리 운영체제로 인터넷 연결되는 무선 센서 네트워크, 무선으로 제어할 수 있는 로봇, 무선 웹 서버 등등 각종 임베디드 관련 프로젝트 가능합니다. 우리 운영체제에 관해서는 뭐든 도와드릴테니 관심 좀 부탁 드립니다. 감사합니다. :)

2012년 5월 4일 금요일

한달간 방배동 고시원 생활

좀 치우고 찍었으면 좀 나았을라나? 흠... 별로 그럴 것 같지 않네.ㅋㅋ 뭐.. 있는 그대로의 모습이 중요하니까...ㅋㅋ

한달간 고시원 생활 기념으로 방 빼는 날 아침에 눈 뜨자 마자 (제 정신이 아닌 상태란 얘기) 사진을 찍었다. 태어나서 처음이나 마지막(제발 그러하길...)으로 고시원이라는 답답한 장소에서 버텨본 기념이다.

늘 연구소에 있으면 뭔가 답답하고 좀 루즈해지는 면이 없지 않아 있는데 파견을 통해서 그런 부분에 있어서 많은 해소가 있었다. 특히, 실제 상용화하는 업체에 직접 나가보니 정말 정신없이 바쁜 하루하루들, 그 사람들이 어떤 생각으로 일을 하는 지 직접 느낄 수 있는 계기가 된 점은 아주 좋았다. 그런데 딱 한 가지 날 힘들게 한 것은 바로 저 좁아터진 고시원...ㅎㅎ

침대에 누우면 내 키가 딱 들어 맞는다. 그러고 천장을 바라보면 천장이 내려앉는 기분이 들고, 옆으로 돌아누워 벽을 바라보면 벽이 다가오는 기분이 드는 마법 같은 장소. 누군가에게는 젊은 시절 꿈을 키워갈 장소라고 말할 수도 있겠지만, 난 젊은 청년들을 저런 곳으로 내모는 우리 사회 현실이 참 답답하게만 느껴졌다.

여하튼 이제 고시원 안녕~~~!!

2012년 5월 3일 목요일

TTY로 접근이 거부될 때

Permission denied.

리눅스 쓰다보면 참 흔하게 볼 수 있는 에러메시지이다. 그런데 최근 Ubuntu Linux 12.04 LTS에서부터 그 흔한 tty (윈도로 치면 시리얼포트) 열 때에도 이런 메시지를 뱉는다.

결론부터 이야기하자면 권한 문제.
개인적으로 USB-to-Serial 계열 장치들을 쓸 때가 많은데, 이 장치들이 권한 문제로 터미널 프로그램(screen 또는 minicom 같은...)에서 열리지 않는다.

$ ls -al /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0  5월  3 17:44 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1  5월  3 17:46 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2  5월  3 17:44 /dev/ttyUSB2

이렇게 확인해보니 ttyUSB* 장치들의 사용자는 root, 그룹은 dialout 이다. 그렇다면 나는 어떤 그룹에 속해 있을까?

$ id
uid=1000(jsjeong) gid=1000(jsjeong) 그룹들=1000(jsjeong),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

보니까 dialout 그룹에 속해있지 않다. 그러니 권한이 없다고 나오지. 아래처럼 usermod 명령어로 그룹에 넣어줄 수 있다.

$ sudo usermod -a -G dialout jsjeong

그리고 잊지 말아야 할 것은 재부팅. (재부팅해야 적용되는지 몰라서 하루 종일 삽질했다.)

$ id
uid=1000(jsjeong) gid=1000(jsjeong) 그룹들=1000(jsjeong),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

드디어 dialout 그룹에 들어간 것을 확인할 수 있다.
그나저나 왜 이 그룹을 디폴트 그룹에서 뺀 걸까? 이게 무슨 보안상 위협이라도 되나?;;

2012년 2월 20일 월요일

건투를 빈다.

이 책 재미있다. 누군가 삶과 인생에 대해 고민중이라면 자신있게 권해주고 싶다. 사실 나도 최근의 '나는 꼼수다' 열풍에 힘입어 김어준이라는 사람을 알게 되었고 그래서 읽게 되긴 했지만 이 책, 솔직히 열심히 취업전선에 뛰어든 취업준비생이든, 나처럼 이제 막 첫 사회생활을 시작한 사람이든, 누구나 정말 볼만한 책이 아닌가 싶다.

이 책을 읽으면서 '자기 객관화'와 '자존감', 이 두 단어가 내 머리에 깊게 박혀버렸다. 이 책에 소개된 대부분의 고민들은 결국 자기 자신의 인생을 점령하면서 살지 못하기 때문에 발생하는 것으로 상담해주고 있다. 타인의 삶이 아닌 진짜 자기 삶을 살기 위해서는 자연인으로써의 자기 자신을 인정하고 객관화하는 과정이 선행되어야 하고, 그 과정이 지난 후, 어떤 선택의 기로에서 당당하게 자신이 원하는 선택을 하고 선택하지 않음으로서 발생하는 모든 손해를 오롯이 감수하는 것, 그럴 때 비로소 느끼게 되는 자존감. 이게 핵심이다. 아... 진짜... 잊지 말아야지.

아무튼 어떤 문제든 쉽게 결정을 못내리고 고민 중이라면... 강추!!

2012년 2월 19일 일요일

VirtualBox 확장설치 다운로드가 되지 않을 때

Ubuntu 11.10 Oneiric Ocelot 에서 Linux Mint 12 Lisa로 옮겨타고 나서 모든게 마음에 드는데 딱 한가지 마음에 안든 것은 가상화 프로그램이었다. 이상하게도 VMware Player도 VMware Tools 다운로드가 안되고 VirtualBox도 게스트 확장설치 다운로드가 되지 않았다.

그냥 MacBook Air의 VMware Fusion을 써야겠다고 생각하고 쓰던 와중에 오늘 전원 어댑터를 놓고온게 아닌가.ㅠㅠ 결국 VirtualBox에다가 어떻게든 게스트 확장설치를 받아야겠다고 다짐하고 소프트웨어센터를 잠시 뒤져보니 'virtualbox-guest-additions' 패키지가 있는게 아닌가.



암튼 이걸로 VirtualBox에 Windows XP 설치 완료!


그나저나 언제쯤 ActiveX의 압박에서 벗어날 수 있을지..........