2013년 5월 6일 월요일

git 유용한 명령어들

git diff 가지고 패치하기


$git diff --no-prefix > patchfile
$cd path/to/top/                 
$patch -p0 < patchfile           

$git diff  > patchfile
$patch -p1< patchfile

commit 취소하기

$git reset HEAD^

$git reset HEAD^2

$git reset --hard HEAD^ (작업내용 날리면서 원복)

git reset 한 것 되돌리기


$ git branch <new branch> HEAD@{1}
$ git branch mybranch HEAD@{1}

지운 branch  되살리기


Deleted branch temp (was 4160aa).
$ git branch <new branch> <commit>
$ git branch mybranch 4160aa

2013년 4월 1일 월요일

ld : cannot find lz

Complie Android in Ubuntu 64

error message :

ld : cannot find lz

solution:

apt-get install lib32z-dev

or

apt-get install lib32z1-dev

2013년 3월 19일 화요일

Android app 이 3D 화면을 출력하는 과정 (surface flinger 와 EGL, GRALLOC)

app 이 surface flinger 에게 그릴 공간을 달라고 한다.

surface flinger 가 gralloc 에게 메모리를 달라고 한다.

gralloc(제조사가 만든다. 대부분 코드 비공개)이 메모리를 할당한다.

surface flinger 는 받은 메모리를 surface 로 만든다.
(struct surface 에 정보를 채우고 메모리 연결)

app 은 surface 를 받아왔다고 EGL 에게 알린다.

EGL(제조사가 만든다. 대부분 코드 비공개) 은 OpenGL ES 가 surface 에 달린 메모리를 사용할 있도록 한다.

이 때 부터 app 은 정상적으로 OpenGL API 를 사용할 수 있다.

app 이 여러 OpenGL API 를 통해서 surface 에 그림을 그리고 EGL 에게 다그렸다고 알린다.
실제 그림 그린 메모리가 반영된다.

그리고 나면 surface flinger 가 메모리(surface)를 가져다가 다른 app 들의 surface 와 합쳐서
화면에 출력한다.



2013년 3월 6일 수요일

bash 에서 return 값 확인하기

bash shell script 를 사용할 때 여러 개의 script 를 연결하다가 보면

"특정 script가 실패했을 때" 라는 조건을 걸고 싶을 때가 있다.

일반적으로는 내가 만든 script 가 내부적으로 실행했던 script 가 실패하면,

내가 만든 scrpit 까지 동작이 멈춰버린다.

이 때 return 값을 check 하게 하니 내부적을 실행한 scrpit 가 실패해도

내 scrpit 가 계속 진행한다.
(예시: VAL=`test.sh; echo $?` 하면 test.sh 가 실패해도 계속 진행한다.)

bash 에서 return 값을 check 하는 방법은

$?

를 보면 된다.

2013년 2월 19일 화요일

ubuntu 에 jdk 간편하게 설치하기

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk sun-java6-plugin

2012년 10월 26일 금요일

request_threaded_irq


int __must_check
request_threaded_irq(unsigned int irq, irq_handler_t handler,
             irq_handler_t thread_fn,
             unsigned long flags, const char *name, void *dev);


  • irq 에 따라서 handler, thread_fn 을 돌려달라고 등록하기.



  • handler 에 NULL을 넣으면 default handler(irq_default_primary_handler) 가 불려 thread_fn 이 수행되는 동안 해당 irq 를 disable 상태로 만들어둔다. return 은 IRQ_WAKE_THEAD.
    • 참고하여 handler function 을 만들도록 해야겠다. 또한, thread_fn 안에서는 irq 를 enable 해주도록 할 것.



  • 왜 handler 와 thread_fn 두 개인가?
    • thread_fn 을 NULL 로 넣어도 상관없음.
      • 이 경우 그냥 request_irq 와 같음.



예제: mmc host 에서 새로운 mmc card 인식을 위하여 gpio 를 irq 로 연결할 때.



linux version 2.6x  도입.

2012년 7월 31일 화요일

bluetooth stack 분석

Android : bluez 를 이용
* bluez 구성
* linux kernel (net/bluetooth ) 부분에 hci command 를 이용한 l2cap 이 구현되어 있음.
* library 형태로 profile 들이 구현되어 있음.
* bluetoothd 라는 daemon 을 띄우고 d-bus 를 통해 android platform 과 통신함.
* sdp tree 관련 처리는 tool을 이용해서 따로 하고 있음.

Windows 7,8
* MS 에서 구현 bthport.sys 라는 port 가 있고 여기에 miniport 로 bthusb.sys 랑 bthuart.sys 같은게 있음. ( l2cap 이 여기서 다 구현되어 있음)

- 참고
bthusb 등이 bthport 에 있는 함수를 직접 부를 형태여서 이 사이에 filter를 달거나 할 수 없음.
따라서 당연히 device tree 를 확인하는 툴로 봐도 bthport.sys는 안보임.

* profile 들도 driver 형태로 구현함
* BRB 라고 bluetooth request block 을 만들어서 ioctl로 내리면 알아서 처리해줌.
* sdp tree 관련해서 처리하는 inteface 를 비슷한 layer에서 제공해줌.