2016년 9월 14일 수요일

어느새 성큼 다가와 버린 Artificial intelligence (AI)

   Software Engineer로서 2016년을 강타한 굵직 굵진한 여러가지 사건이 있었지만, 개인적으로는 가장 극적이면서도 사람들에게 가장 큰 전율(혹은 공포)를 준 사건은 바로 Google의 AlphaGo가 이세돌 9단을 4:1로 꺾어 버린 사건이 아닌가 싶다.

   이 사건으로 인하여, Google은 10억원 안밖의 돈으로 AI 분야의 선두주자라는 명성을 전세계를 상대로 확실히 각인시켰으며, 조훈현, 이창호 9단등의 전성기가 지나며 침체되었던 바둑계도 새로운 관심이 생기기 시작했으며, 지금은 약간 조용해 지긴 했지만 ,무엇보다도 전 국민이 알파고라는 인공 지능에 대해 아무런 설명없이도 이해하게 되었다는 것이다.

   도대체 알파고라는 인공지능은 무엇일까? 여러가지 방향으로 설명할 수 있겠지만, 가장 간단히 설명하자면 Machine Learning 이라는 기법을 통해 컴퓨터가 스스로 학습을 진행할 수 있게 된 것이다. 아이가 새롭게 바둑을 배워가면서, 경험과 직관을 축적하는 것처럼 컴퓨터에서도 Machine Learning이라는 기법을 통해, 컴퓨터 자가 학습을 통해 세계 최강의 이세돌 9단을 꺾을 수 있도록 만들어 주는 것이다.

   물론 세계 최강을 꺾는 다는 것이 쉬운 일이 아니다. 이세돌을 이기기 위해 Google에서 일하는 수십명의 생산성 높은 소프트웨어 엔지니어들이 Machine Learning기법을 알파고에 집적 시켰으며 (여기까지는 기존 Software 산업에서 해왔던 것이다), 빅데이터라는 기법을 동원하여 지금까지 몇백년간 사람들이 해왔던 바둑기보를 저장해 두어 알파고 학습에 동원 시켰으며 (알파고는 지금까지 각종 대회에서 초보자부터 내노라하는 유명기사가 치룬 기보를 모두 빅데이터로 가지고 학습해왔다, 참고로 사람은 바둑을 5~6판 정도 해보면 바둑의 룰을 대충 이해하면서 플레이를 시작할 수 있지만, 컴퓨터는 몇백만 기보를 읽어보는 수준의 엄청난 Data를 필요로 한다.), 그리고 결정적으로 Cloud computing이라는 기법을 이용해서 엄청난 성능의 컴퓨터를 Parallel하게 묶어서 학습을 통해 생긴 정보를 통해 결정을 내리도록 한다.

 AlphaGo = Machine Learning 기술 + BigData 기술 + Cloud Computing 

   예전에 유행했던 Machine Learning이 인터넷을 통해 Digital 정보를 충분히 축적했고, 축적된 Big Data를 parallel 하게 조작할 수 있는 Clouding 컴퓨팅 기법이 유행하면서, 바야흐로 알파고와 같은 충분한 학습을 받은 AI가 출현된 것이다.

   이렇게 이야기 하니까 너무 어렵게 느껴질 수 있지만, 결국은 Machine Learning은 인터넷을 통해 축적된 디지털 정보를 쪽집게 학습지 삼아, 클라우딩이라는 기법을 통해 서로 연결된 기계들이, 학원에서 자율학습 하듯이, 인간의 학습 방법과 비슷한 학습을 시작했다는 것이고, 구글은 바둑을 그 첫번째 마케팅 포인트 삼아 그 첫번째 목적을 달성한 것이다. 그리고 인류 역사상으로 보자면, 인공지능의 큰 첫발을 내딛었다고 할 수 있다.

   자! 그렇다면 이 Machine Learning 이라는 인공지능기법이 어느 정도나 우리 가까이 와 있는 것일까? 우리가 창조경제라는 구호 아래 얼마나 열심히 야근해 가며 하드웨어에 집중하면서, 충전 중 발화 가능한 모바일 폰을 개발하는 동안, 아래 Reference 사례등을 통해, Software 선진국들이 얼마나 쉽게 Artificial Intelligent를 적용할 수 있게 개발해 냈는지 이야기 해 보고자 한다.

   아래 이야기는 일본의 한 농부 이야기이다. 물론 그냥 농부는 아니고, Embedded 장비를 만들던 IT 기업에서 퇴직한 전직 엔지니어이다.( 한국에서는 닭집창업이 가장 많다고... 쿨럭!!) 이분이 오이농사를 지으시는데, 오이를 크기와 모양에 따라 분류하는 작업이 시간과 인건비가 많이 소모되는 작업이라고 이를 해결하기 위해 고민하시던 중, 알파고의 승전보를 들으셨다고 한다.


Japanese Farmers who are using Koike's cucumber sorting machine (Google)


   이 때 이 분이 생각하신 것이, 인건비가 싼 중국 아줌마나 정부 추천 열정페이 청년인턴을 구하신 게 아니라, 알파고와 같은 Machine Learning 을 오이 분류 작업에 투입하신 거다. 현재 이 일본 농부 아저씨가 가지고 있는 인공지능 오이 분류기는 아래 사잔에서와 같이 오이의 길이, 지름, 그리고 자라난 모양 형태에 따라 9가지 종류로 구분시킨다.
(^^ 일본은 특히 인건비가 비싸니 이런 혁신이 절실한 듯 하다.)


Training data from cucumber sorting machine. (Google)



   물론 이 분이 전부 만드신 건 아니고 Google 에서 제공한 TensorFlow라는 오픈소스 라이브러리를 이용하여, 오이의 분류 작업을 학습시켰다. 물론 오이의 사진을 찍고, 이를 TensorFlow를 통해 Google Cloud machine가 판단하도록 만드는 부분은 Raspberry Pi 3를 통해 직접 만드셨다. 오호, 물개박수!

실제로 동작되는 부분은 아래의 비디오를 참조해 보시기 바란다.





   뭐 어찌 되었던 일본의 농부가 직접 생산혁신에 사용할 수 있을 정도로, Machine Learning은 우리 주위에 이미 가까이 다가와 있다. 크게 어렵지 않다. Google뿐 아니라 소프트웨어적으로 선진업체에서는 이미 자신이 구축한 Machine Learning Platform을 Open source로 공개하며, 시장을 주도적으로 선도하고자 한다. 일본 농부가 사용한 Machine Learning Platform은 TensorFlow이다. Document와 Sample 몇 개를 따라하면서 쉽게 Cucumber Sorting Machine 을 구축하였다고 한다. Introduction을 살펴 보면 Python API와 비슷한 형태로 이루어져 있으며, 첫 페이지 부터 빨간 약과 파란 약을 선택하라고 한다.... (Matrix가 여럿 망친....ㅎㅎ)

   이런 걸 보니 어느새 다시 Machine Learning 이 많이 나와 있는 MOOC를 뒤적이게 된다....흠....


Reference

  1. Quartz
    http://qz.com/771921/the-ultimate-promise-of-artificial-intelligence-lies-in-sorting-cucumbers/?imm_mid=0e7ab8&cmp=em-data-na-na-newsltr_ai_20160912
  1. TensorFlow
    https://www.tensorflow.org/
    https://research.googleblog.com/2015/11/tensorflow-googles-latest-machine_9.html
  1. Google Cloud Platform
    https://cloud.google.com/blog/big-data/2016/08/how-a-japanese-cucumber-farmer-is-using-deep-learning-and-tensorflow


2015년 9월 16일 수요일

IoT 장비들을 묶어주는 근거리 무선 기술들: Wi-Fi, Bluetooth 그리고 Z-wave


IoT 장비들을 묶어 주는 기술들: 

Wi-Fi, Bluetooth, BLE, Zigbee 그리고 Z-wave


   바야흐로 접속의 시대다. 사람들 간에는 SNS가 넘쳐나고, 전세계 어디에 있는 사람들과 언제 어디서나 의견과 자료를 공유할 수 있다. 게다가 이젠 사람들과의 접속을 뛰어넘어, M2M(Machine to Machine) 그리고 사물인터넷 즉 IoT(Internet Of Things) 시대가 어느덧 우리 주변에 펼쳐져 있다.  

  가깝게는 이젠 너무나 쉽게 볼 수 있는 스마트 폰과, 이어폰을 이어주던 긴 선을 조금씩 대신하고 있는 블루투스 이어폰이 널리 사용되고 있고, 언제 부터인가 필자의 주변 사람들 중엔 수면 시간, 하루동안의 운동량, 그리고 심박등을 측정 보관해 주는 Smart Watch들을 사용하고 있는 사람들을 쉽게 볼 수 있으며, 거대 통신업자인 SKT나 LG U+에서 지원하는 Z-wave 방식의 가스밸브 개폐센서도 있게 찾아 볼 수 있게 되었다.

   샤오미나 필립스에서 제공하는 Light-bulb 같은 스마트 전구 제품은, 스마트 폰을 이용하여, 원격에서 집에 설치되어 있는 bulb를 6만여 컬러중의 하나로 설정 가능토록 지원해주고 있다. (애플이 자랑하는 Siri양을 호출하면 오늘 같은 날에 맞는 음악을 블루투스 스피커를 통해 들려주고, 오늘 날씨에 맞는 적절한 조명도 제안해 주기도 한다, 가격도 $10~20불 근방의 착한 Bulb도 많고, 시리양의 추천곡은 정말 위로가 될 때가 많다)




   현재 Home Security분야를 포함하여, 다양한 분야에서 IoT센서들이 경쟁적으로 늘어나고 있는데, 그 중에서 집안의 온도 측정 센서나 화재인식센서로 유명한 Google에 인수된 Nest Sensor도 있고,  Qualcomm이라는 회사에서 주도하는 AllJoyn이라는 Open Protocol(프로토콜)을 사용하는 센서들도 많이 사용되고 있고, 또 최근 들어서는 유럽에서 시작되어 널리 퍼지게된 Sigma Design이라는 회사에서 주도하는 Z-wave Sensor들도 있다. 모두 무선을 사용하고, 사람들의 지척에서 물건(Things)들을 이어주고 있다.

   IoT 기술의 춘추 전국시대이다. 언젠가는 몇 개의 주요한 기술들이, IoT 세상을, 혹은 사람들을 편리하게 해줄  각종 Sensor들을 통합시키겠지만, 아직까지는 비슷 비슷한 기술과 장단점을 가지고 소비자들을 현혹시키고 있다. 그중에서 가장 많이 들리는 단어들이 “Wi-Fi”, “Bluetooth”, “BLE”, “Bluetooth Smart”, “Bluetooth Smart Ready", “Zigbee”, “Z-wave”등이다. 

   그렇다면 근본적으로는 동일한 근거리 Wireless 통신기술인 Wi-Fi, Bluetooth, BLE, Zigbee, Z-wave의 차이점은 무엇이며, 왜 각 Sensor 개발업체나 장비 개발 업자들이 특정 무선통신방법을 선택 하였으며, 추후 IoT 시장을 장악할 최후의 Technology는 어떤 것이 될 것인가? Smart Home 시장 혹은 IoT시장을 위한 Wireless Technology는 어떤 특징들이 필요할 것인가? 어떤 기술이 추후 Sensor 시장을 장악할 것인가? 이에 대한 본인의 이해를 위해 다음과 같이 해당 기술들에 대해 정리해 보았다. 

Wi-Fi

   가장 많은 사용자층을 가지고 있는 Wi-Fi는 대중들에게 가장 널리 알려져 있으며, 대부분의 가정 집에 이미 구축되어 있다. 동영상 Streaming, Web Browsing, Torrent 등과 같은 high-bandwidth 네트워킹, Power 소모가 심한 멀티미디어 서비스, 그리고 아주 단순한 파일 전송 서비스까지, 지금까지의 Wireless Network를 대부분 이끌어 왔다.

   하지만 위와 같이 잘 알려진 서비스 외의 영역에서, 특히 PC시장 밖에서 경쟁하는, 상당수의 IoT 장비나 스마트 Home 장비들은 Wi-Fi연결을 피하고 있는데, 실질적으로 Wi-Fi를 지원하는 Product device들은 전원 콘센트에 직접적으로 연결되거나, 고용량의 배터리를 사용하고 있는 것을 보면 쉽게 그 차이를 알 수 있다. 

   우리 회사에서 만들어지고 있는 Wireless Camera을 포함하여, 현재 상용화 되어 있는 거의 전부의 Wireless Camera/ 혹은 IP Camera (Network Camera)들은 Power Outlet에서 직접 전원을 공급받는다. Wearable Camera등도 Wi-Fi로 Stream을 전송하고자 할 때는, 모드가 변화하는 방식으로 개발되어 있다. 

   거의 완벽하지만 전력 소모라는 약점을 극복하기 위해, 근본적으로는 유사한 RF통신이지만 Bluetooth, Zigbee, 그리고 Z-wave와 같은 대체 Method들이 나오고 있는 것이다. IoT 센서가 소형화 될 수록, 기술의 흐름은 더욱더 Wi-Fi가 아닌 다른 기술이 주목 받을 확률은 더욱 더 커져간다. (저전력 기반의 타 센서들은 한번 충전에 몇개월도 가능하다, 중환자실의 심박을 측정하는 의료센서를 상상해 보면, 저전력 통신의 중요성은 금방 느낄 수 있다) 게다가 다른 무선통신기술들과 비교해 보았을 때, Wi-Fi 칩은 상대적으로 비싸다. 그렇기 때문에 CE(Consumer Electronics)시장과 같은 장비업체에서는, Wi-Fi에 비해서는 조금 더 저렴한 방식을 채택할 가능성이 높아 보인다.


Bluetooth and BLE (Bluetooth Low Energy)


   애플의 스티브 잡스가 아이폰을 통해 시장에 널리 퍼트렸던 블루투스는 이제 모든 핸드폰에 기본적으로 들어가 있는 무선통신기술이다. 물론 배터리 소모를 줄이기 위해 블루투스를 항상 꺼놓는 사용자들도 많지만, Wi-Fi에 비하면 블루투스는 배터리 소모가 아주 적은 무선통신기술이다. 

   초기의 블루투스는 Wi-Fi와 비슷하게 좀 더 빠른 데이터 송수신속도에 맞추어 개발되었으나, 시장에서 Wi-Fi의 선호도가 높아져가면서, 점차 Wi-Fi와는 다른 방식으로, Bluetooth만의 독자 영역을 차지하는 방식으로 발전방향이 선회되었고, 저전력 통신이라는 독자적인 무선통신 영역을 차지하게 되었다. 

   따라서 현재 최신 사양의 블루투스 장비는 초기 개발된 블루투스 장비보다 전송속도가 더 느리다. 전송속도를 포기하면서까지 전력소모를 최적화 한 것이다. 또 다른 블루투스 특징은 보안성이다. IoT 장비나 무선통신 기술의 특성상 보안이 민감한 이슈가 되는데, Wi-Fi와의 기술 경쟁 시 살아남기 위한 전략으로 저전력과 함께 신경 쓴 부분으로 Low Level 단계에서부터 Government-grade급 암호화 기법들이 사용되고 있다. 이러한 점은 IoT에서 Bluetooth가 점차 커질 기술이라고 예측되고 있다. (저전력 센서는 보안을 위한 에너지도 고려해야 한다)

   이러한 진화 방향을 살펴보면 Wi-Fi와 경쟁하지 않고, 독자적인 영역을 만들기 위한 Bluetooth SIG (Special Interesting Group)의 노력을 살펴 볼 수 있는데,  이에 대한 결과 Bluetooth는 버전별로 약간의 다른 특성을 가지고 있다. 그중 하나가 BLE (Bluetooth Low Energy)이다. 

  데이터 전송속도 수준으로 보자면, Zigbee / Z-wave에 비해 더 빠른 Higher bandwidth를 가지고 있으며 (Wi-Fi 보다는 느리다), 단순한 “Switch On/Off” 기능이나 “설치 위치가 변경되었다” 수준의 정보를 전송하는 수준 보다는 더 많은 일을 할 수 있으며, Mobile / PC / Electronics에 상관없이 직접 접속 가능하다. (Zigbee / Z-wave는 대중화된 Computing-device와 통신하기 위해서는 Wi-Fi를 이용한다). 

   Bluetooth를 한마디로 정리하자면, 주변의 스마트 장비나 센서를 “Secured Connection”, 보안화된 연결을 해준다는 것이 특징인데, IoT의 단점이 될 수 있는 보안 문제를 Physical Link 수준에서 부터 도와 준다는 점에서, 가장 유망해 보이는 기술이다. 물론 다른 기술들도 계속 보완 발전되가고 있기는 하다.



Zigbee and Z-wave


    Zigbee와 Z-wave는 유사하지만 동일한 기술은 아니다. 비슷한 점은 Home Control 장비에서 많이 쓰이고 있다는 것이다. 특징은 Mesh Network을 지원하며, 초저전력 장비에 용이하다. Mesh Network라고 함은 각각의 장비가 무선공유기가 된다는 말이다. 예를 들자면, Wi-Fi 무선공유기에서 멀리 떨어질 수록, 무선 신호의 세기가 점점 약해지는데 반해, Z-wave 장비는 장비끼리 무선 신호를 전달해 주기 때문에, 가까운 영역에 동일한 Z-wave 장비가 있다면, 집안 구석 구석까지 장비들을 연결 할 수 있다. 
  
   또 다른 장점은 스펙이 단순하기 때문에, 구현하기 쉽다는 점이다. 이러한 이유때문에 현재 스마트 홈을 구축하는 대부분의 센서가 Z-wave (초반에는 Zigbee가 많았으나, 현재는 Z-wave)로 구축되어 있다. 하지만 단순하다는 장점이 불리한 점으로 작용하기도 하는데, 극히 단순하기 때문에 전력 소모가 적긴 하지만, 데이터를 전송하는 bandwidth가 낮아서 극히 단순한 정보만 교환 가능하고(예를 들자면 On/Off), 스마트 폰이나 개인의 PC를 통하여 Z-wave 장비를 제어하고자 할때는 반드시 Wi-Fi Router를 사용해야 하는 단점이 있다.

  이러한 점때문에 Z-wave 기술은 SK Telecom이나 LG U+에서 선호하는 기술이 된 것 같기도 하다. 스마트 홈을 구축하려면 자신들의 Wi-Fi망을 반드시 사용해야 하기 때문이다. 

   디바이스 사이의 On/Off와 같은 단순한 정보 교환은 Zigbee나 Z-wave가 사용되고, 사용자와의 연결 즉 스마트폰이나 PC제어는 Wi-Fi를 거쳐는 구조는 Internet Router를 사용해야하는 구조는 큰 단점이기는 하나, 현재까지는 가장 많은 센서들을 생산해 내고 있는 기술이다.

필자가 보는 현재 대세: Z-wave필자가 보는 IoT의 미래 대세: Bluetooth

2014년 9월 26일 금요일

Embedded Linux 자동 로그인 & 특정 Application 실행

Embedded Linux 자동 로그인 & 특정 Application 실행



1) /etc/inittab 수정
2) /etc/profile 에서 특정 Application 실행하도록 script 추가



inittab 수정

/etc/inittab에서
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty3

T0::respawn:/sbin/gettty tty4
위와 같은 기본값에서 아래와 같은 파라메터값을 추가해 준다.
 -n : no login
-l : script될 실행 화일, 일부 리눅스 Distribution에서는 화일이 추가되어 있긴하지만(디폴트는 제외)

T0:12345:respawn:/sbin/gettty -L -n -l/root/nologin ttySAC1 115200 vt100 # default 설정


다음과 같은 source 코드를 getty가 spawn 되었을때 아래의 프로그램이 실행하도록 해준다.

autologin_fred.c 


int main() {
   execlp( "login", "login", "-f", "fred", 0);
}

위의 소스에서 "fred"는 내가 원하는 특정 ID로 변경 시킬수 있다.
위의 화일을 compile 하면
# arm-linux-gnueabihf-gcc -o autologin autologin_fred.c
-o 옵션: 컴파일 완료후 출력물의 화일이름 지정


정리
1) /etc/inittab 파일 수정
1:2345:respawn:/sbin/gettty -L -n -l"myapplication or autologin" ttyS0 115200

2) /etc/profile 혹은 로그인 완료된 계정의 .bashrc를 수정하여 내가 원하는 script추가







2011년 6월 14일 화요일

Big Endianness / Little Endiannes Detect code


현재 개발하는 시스템이 빅엔디안인지 리틀엔디안인지 잘 모를 경우가
Embedded system 개발 중에는 자주 발생 한다....
특히 골치 아픈 mips system일 경우는 자주....
그럴 경우 사용하는 코드

#include
int main(void)
{
int i = 0x00000001;
if ( ((char *)&i)[0] )
printf("LITTLE_ENDIAN\n");
else
printf("BIG_ENDIAN\n");
}

2011년 6월 13일 월요일

Arm 에서 Profiling with Oprofile

Profiling Oprofile Cross-compile

모 업체에서 양산중인 보드의 성능 점검을 요청해 와서,
해당 타겟이 사용 중인 Board에 Oprofile로 Profiling하는 과정

기존 보드에 SD 카드를 /mnt 폴더로 mount 해서 Oprofile 추가 설치함

이번 경우엔 root 이미지를 직접 쓰기 혹은 변경 시킬 없어서 /mnt 사용

# mount /dev/mmcblk0p1 /mnt

Arm-marvell-linux-gnueabi Oprofile cross-compile 방법
Host PC로 ubuntu linux 사용하였으며 (host: i386-linux) arm-linux (build target: arm-linux) cross-compile 하였습니다.

Cross-compiler Path 지정

arm-marvell-linux-gnueabi-gcc 위치하는 폴더를 PATH 지정

# export PATH=/your path/arm-marvell-linux-gnueabi/bin:$PATH

Libpopt Cross-compiling (Oprofile에서 요구되어지는 library)

1) Popt library Download 받아 설치한다.
#./configure --prefix=/mnt/Oprofile –-build=arm-linux -–host=i386-linux -–target=arm-marvell-gnueabi

2) Make & make install

3) Add LD_LIBRARY_PATH
# export LD_LIBRARY_PATH=/mnt/Oprofile/lib:$LD_LIBRARY_PATH

4) ADD PKG_CONFIG_PATH
# export PKG_CONFIG_PATH=/mnt/Oprofile/lib:$PKG_CONFIG_PATH


Libz Cross-compiling

Libz library Download 받아 설치한다.
#./configure --prefix=/mnt/Oprofile

# Make & make install

If you use different prefix, ADD LD_LIBRARY_PATH and PKG_CONFIG_PATH (Use same path with libpopt library)

Bfd library Cross-compiling

1) Binutils 다운 받는다.
# wget
http://ftp.gnu.org/gnu/binutils/binutils-X.XX.tar.gz

2) Untar binutils
# tar xvf binutils-X.XX.tar.gz

3) Bfd 폴더로 이동한다
# cd binutils-X.XX
# cd bfd
(binutil
모든 unility들을 모두 사용할 것은 아니므로 bfd폴더에서 bfd 컴파일)

4) Bfd library 설치
# ./configure --prefix=/mnt/Oprofile/binutils --build=arm-linux --host=i386-linux --target=arm-marvell-linux-gnueabi --disable-nls --enable-install-libbfd

5) Make & make install

6) ADD LD_LIBRARY_PATH and PKG_CONFIG_PATH with installed bfd library path.
ex) # export LD_LIBRARY_PATH=/mnt/Oprofile/binutils/i386-linux/arm-marvell-linux-gnueabi/lib:$LD_LIBRARY_PATH


OProfile Cross-Compiling

1) Oprofile 다운 받는다.
# wget http://prdownloads.sourceforge.net/oprofile/oprofile-X.X.X.tar.gz

2) Untar Oprofile
# tar xvf oprofile-X.X.X.tar.gz

3) Cd Oprofile
# cd oprofile-X.X.X

4) OProfile 설치
# ./configure --prefix=/mnt/Oprofile --with-kernel-support --build=arm-linux --host=i386-linux --target=arm-marvell-linux-gnueabi

5) Make & make install

6) ADD LD_LIBRARY_PATH & PKG_CONFIG_PATH


Target 에서 OProfile 환경 설정

#export PATH=/mnt/Oprofile/bin:$PATH

# export LD_LIBRARY_PATH=/mnt/Oprofile/lib:
/mnt/Oprofile/binutils/i386-linux/arm-marvell-linux-gnueabi/lib:
$LD_LIBRARY_PATH

만일 저처럼 Root write 없는 상태가 아니라면, 아래와 같이 설정하시면 됩니다.

위에서 prefix –-prefix=/usr/local 사용한다면

#export PATH=/usr/local/bin:$PATH

# export LD_LIBRARY_PATH=/usr/local/lib:
/usr/local/binutils/i386-linux/arm-marvell-linux-gnueabi/lib:
$LD_LIBRARY_PATH


2011년 5월 26일 목요일

scratchbox 2 자주 쓰이는 Command

sb2-init

sb2-init은 반드시 target 의 root로 사용할 directory에서 실행되어야 하며,
sb2-init --help를 통하여 내가 가지고 있는 가상 Root의 종류가 나열된다.

sb2

sb2 -t Tegra2QPA
위와 같이 sb2-init 에서 지정했던 TargetName을 지정해 주면 Default Target으로 설정된다.

2011년 5월 4일 수요일

Kbuntu 에서 nabi 입력기를 사용하도록 변경하는 방법

KDE는 nabi를 실행하기 전에 xim을 nabi로 지정하고
“QT_IM_MODULE=xim”를 해줘야 입력기가 붙는다.

이를 위해서 아래와 같이 한다.

1. 기본 입력기를 nabi로 선택한단.
% im-switch -c

2. “QT_IM_MODULE=xim” 를 추가한다.
% cd $HOME/.xinput.d
% cat ko_KR
XIM=nabi
XIM_PROGRAM=/usr/bin/nabi
XIM_ARGS=
GTK_IM_MODULE=xim
QT_IM_MODULE=xim

현재 ko_KR에 “QT_IM_MODULE=xim” 가 왜 안들어가 있는지 모르겠다.

% ls -al $HOME/.xinput.d/ko_KR
lrwxrwxrwx 1 x 28 2011-02-14 15:03 ko_KR /etc/X11/xinit/xinput.d/nabi