개발 중에 App 설정이 userdata 에 저장되는데 잘못된 설정값을 설정하여 App가 계속 죽게될 경우 다시 진입해도 잘못 설정된 값이 저장되어 App가 계속 죽게 된다. 이럴 때 설정값을 날리기 위해서 adb shell 등으로 들어간 루트 쉘에서 다음 명령을 주면 된다.
[카테고리:] Development
YUV 포멧 정리
YUV 포멧은 두 가지로 나뉠 수 있는데, 하나는 Packed 포멧이고, 다른 하나는 Planar 포멧이다.
Packed 포멧은 Y, U (Cb), V (Cr) 성분이 함께 Macropixel을 이루는 형식이다. 예를 들면 UYVY의 경우 Y 성분 2개와 그 두 개 Y 성분에 대한 U, V 성분을 합쳐 두 개의 픽셀을 나타내게 된다.
Planar 포멧은 Y, U (Cb), V (Cr) 성분이 각각의 분리된 영역에 저장되어 세 개의 영역을 모두 합쳐서 최종 이미지를 얻을 수 있는 방식이다.
내가 자주 다루게 되는 포멧은 Packed 포멧으로 YUYV, UYVY, Planar 포멧으로 NV12, NV21 이다.
YUYV와 UYVY 는 YUV 4:2:2 Packed포멧이다.
UYVY 는 Y422, UYNV, HDYC 로도 불리며, 32비트 안에 U0, Y0, V0, Y1 순서로 한 성분이 각각 8비트씩 저장되어 2개의 픽셀을 나타내게 된다.
YUYV 는 V422, YUNV, YUY2 로도 불리며, 32비트 안에 Y0, U0, Y1, V0 순서로 한 성분이 각각 8비트씩 저장되어 2개의 픽셀을 나타내게 된다. UYVY 와는 배열 순서만 다르다고 생각하면 된다.
그림으로 나타내면 다음과 같다.
NV12와 NV21은 YUV 4:2:0 Planar포멧이다.
NV12 는 8비트 짜리 Y 성분 하나와 8비트 짜리 U와 8비트 짜리 V 가 합쳐져 한 픽셀을 나타내게 되는데, U와 V 하나를 2×2의 Y 성분이 공유한다. 다른 말로 하자면, 2×2의 4픽셀을 나타내기 위해서 Y plane의 2×2의 4개의 성분과 이에 대응하는 U, V 성분 하나가 사용된다. 그림으로 나타내면 다음과 같이 설명할 수 있다.
NV21은 U/V plane에서 U와 V가 순서가 바뀐 포멧이다. YUV420SP 라고도 불리는 것 같다.
다른 더 많은 포멧은 아래 참고 링크를 참조한다.
참고 : http://www.fourcc.org/yuv.php
추가 : MSDN 에도 참고할 만한 글이 있다. NV12, YV12, IMC2 포멧 등, 메모리 증가에 따른 저장 공간을 잘 보도록. : http://msdn.microsoft.com/en-us/library/Aa904813
[Android] Linux에서 adb와 fastboot 사용하기
http://androidforums.com/samsung-i7500/32481-howto-linux-adb-fastboot-mass-storage.html 에서 자세한 내용을 찾을 수 있다.
요약 정리하면,
Linux 에서 사용할 수 있는 fastboot은 플랫폼 빌드 시에 생성되며, out/host/linux-x86/bin/ 아래에서 찾을 수 있다.
그리고 사용하려는 Linux 머신의 /etc/udev/rules.d/ 경로에 다름 파일들을 생성한다.
50-android.rules
90-android.rules
그리고 다음 명령을 사용하여 udev rules을 갱신한다.
2014.07.11. SYSFS{idVendor} 를 ATTR{idVendor} 로 변경.
[git] git 설정하기
1. git 설치
2. git 구성하기
2.1. username과 email 설정
2.2.. git 설정 확인
2.3.. git color ui 사용
2.4. 기본 인코딩을 cp949로 바꾸기
git config –global i18n.logOutputEncoding cp949
윈도에서는 LESSCHARSET=latin1 으로 설정해야 로그 메시지를 볼 수 있다.
2.5. 기본 에디터를 vim 으로 설정하기
Ascii code 표
Binary | Oct | Dec | Hex | Abbr | PR[t 1] | CS[t 2] | CEC[t 3] | Description |
---|---|---|---|---|---|---|---|---|
000 0000 | 000 | 0 | 00 | NUL | ␀ | ^@ | \0 | Null character |
000 0001 | 001 | 1 | 01 | SOH | ␁ | ^A | Start of Header | |
000 0010 | 002 | 2 | 02 | STX | ␂ | ^B | Start of Text | |
000 0011 | 003 | 3 | 03 | ETX | ␃ | ^C | End of Text | |
000 0100 | 004 | 4 | 04 | EOT | ␄ | ^D | End of Transmission | |
000 0101 | 005 | 5 | 05 | ENQ | ␅ | ^E | Enquiry | |
000 0110 | 006 | 6 | 06 | ACK | ␆ | ^F | Acknowledgment | |
000 0111 | 007 | 7 | 07 | BEL | ␇ | ^G | \a | Bell |
000 1000 | 010 | 8 | 08 | BS | ␈ | ^H | \b | Backspace[t 4][t 5] |
000 1001 | 011 | 9 | 09 | HT | ␉ | ^I | \t | Horizontal Tab |
000 1010 | 012 | 10 | 0A | LF | ␊ | ^J | \n | Line feed |
000 1011 | 013 | 11 | 0B | VT | ␋ | ^K | \v | Vertical Tab |
000 1100 | 014 | 12 | 0C | FF | ␌ | ^L | \f | Form feed |
000 1101 | 015 | 13 | 0D | CR | ␍ | ^M | \r | Carriage return[t 6] |
000 1110 | 016 | 14 | 0E | SO | ␎ | ^N | Shift Out | |
000 1111 | 017 | 15 | 0F | SI | ␏ | ^O | Shift In | |
001 0000 | 020 | 16 | 10 | DLE | ␐ | ^P | Data Link Escape | |
001 0001 | 021 | 17 | 11 | DC1 | ␑ | ^Q | Device Control 1 (oft. XON) | |
001 0010 | 022 | 18 | 12 | DC2 | ␒ | ^R | Device Control 2 | |
001 0011 | 023 | 19 | 13 | DC3 | ␓ | ^S | Device Control 3 (oft. XOFF) | |
001 0100 | 024 | 20 | 14 | DC4 | ␔ | ^T | Device Control 4 | |
001 0101 | 025 | 21 | 15 | NAK | ␕ | ^U | Negative Acknowledgement | |
001 0110 | 026 | 22 | 16 | SYN | ␖ | ^V | Synchronous Idle | |
001 0111 | 027 | 23 | 17 | ETB | ␗ | ^W | End of Trans. Block | |
001 1000 | 030 | 24 | 18 | CAN | ␘ | ^X | Cancel | |
001 1001 | 031 | 25 | 19 | EM | ␙ | ^Y | End of Medium | |
001 1010 | 032 | 26 | 1A | SUB | ␚ | ^Z | Substitute | |
001 1011 | 033 | 27 | 1B | ESC | ␛ | ^[ | \e[t 7] | Escape[t 8] |
001 1100 | 034 | 28 | 1C | FS | ␜ | ^\ | File Separator | |
001 1101 | 035 | 29 | 1D | GS | ␝ | ^] | Group Separator | |
001 1110 | 036 | 30 | 1E | RS | ␞ | ^^ | Record Separator | |
001 1111 | 037 | 31 | 1F | US | ␟ | ^_ | Unit Separator | |
111 1111 | 177 | 127 | 7F | DEL | ␡ | ^? | Delete[t 9][t 5] |
Binary | Oct | Dec | Hex | Glyph |
---|---|---|---|---|
010 0000 | 040 | 32 | 20 | space |
010 0001 | 041 | 33 | 21 | ! |
010 0010 | 042 | 34 | 22 | “ |
010 0011 | 043 | 35 | 23 | # |
010 0100 | 044 | 36 | 24 | $ |
010 0101 | 045 | 37 | 25 | % |
010 0110 | 046 | 38 | 26 | & |
010 0111 | 047 | 39 | 27 | ‘ |
010 1000 | 050 | 40 | 28 | ( |
010 1001 | 051 | 41 | 29 | ) |
010 1010 | 052 | 42 | 2A | * |
010 1011 | 053 | 43 | 2B | + |
010 1100 | 054 | 44 | 2C | , |
010 1101 | 055 | 45 | 2D | – |
010 1110 | 056 | 46 | 2E | . |
010 1111 | 057 | 47 | 2F | / |
011 0000 | 060 | 48 | 30 | 0 |
011 0001 | 061 | 49 | 31 | 1 |
011 0010 | 062 | 50 | 32 | 2 |
011 0011 | 063 | 51 | 33 | 3 |
011 0100 | 064 | 52 | 34 | 4 |
011 0101 | 065 | 53 | 35 | 5 |
011 0110 | 066 | 54 | 36 | 6 |
011 0111 | 067 | 55 | 37 | 7 |
011 1000 | 070 | 56 | 38 | 8 |
011 1001 | 071 | 57 | 39 | 9 |
011 1010 | 072 | 58 | 3A | : |
011 1011 | 073 | 59 | 3B | ; |
011 1100 | 074 | 60 | 3C | < |
011 1101 | 075 | 61 | 3D | = |
011 1110 | 076 | 62 | 3E | > |
011 1111 | 077 | 63 | 3F | ? |
Binary | Oct | Dec | Hex | Glyph |
---|---|---|---|---|
100 0000 | 100 | 64 | 40 | @ |
100 0001 | 101 | 65 | 41 | A |
100 0010 | 102 | 66 | 42 | B |
100 0011 | 103 | 67 | 43 | C |
100 0100 | 104 | 68 | 44 | D |
100 0101 | 105 | 69 | 45 | E |
100 0110 | 106 | 70 | 46 | F |
100 0111 | 107 | 71 | 47 | G |
100 1000 | 110 | 72 | 48 | H |
100 1001 | 111 | 73 | 49 | I |
100 1010 | 112 | 74 | 4A | J |
100 1011 | 113 | 75 | 4B | K |
100 1100 | 114 | 76 | 4C | L |
100 1101 | 115 | 77 | 4D | M |
100 1110 | 116 | 78 | 4E | N |
100 1111 | 117 | 79 | 4F | O |
101 0000 | 120 | 80 | 50 | P |
101 0001 | 121 | 81 | 51 | Q |
101 0010 | 122 | 82 | 52 | R |
101 0011 | 123 | 83 | 53 | S |
101 0100 | 124 | 84 | 54 | T |
101 0101 | 125 | 85 | 55 | U |
101 0110 | 126 | 86 | 56 | V |
101 0111 | 127 | 87 | 57 | W |
101 1000 | 130 | 88 | 58 | X |
101 1001 | 131 | 89 | 59 | Y |
101 1010 | 132 | 90 | 5A | Z |
101 1011 | 133 | 91 | 5B | [ |
101 1100 | 134 | 92 | 5C | \ |
101 1101 | 135 | 93 | 5D | ] |
101 1110 | 136 | 94 | 5E | ^ |
101 1111 | 137 | 95 | 5F | _ |
영문 위키피디아에서 참조
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. See Terms of Use for details.
[Linux] Device driver 동시성 관련 함수 – Completion
현재 스레드 외부에다 작업을 시작하도록 지시하고 끝나기를 기다릴 때 사용. 세마포어를 LOCKED 상태로 하여 사용할 수도 있지만, 세마포어는 거의 항상 세마포어를 획득할 수 있을 때에 치중하여 최적화되어 왔다. 따라서 이럴 때는 completion 을 사용하는 것이 좋다. 구현은 kernel/sched.c 를 참조.
1. completion 초기화
<linux/completion.h>를 포함하여야 한다. 자료 타입은 struct completion.
1.1. Compile time 초기화
/* … */
init_completion(&my completion);
2. 완료 기다리기
인터럽트가 불가능한 대기(죽일 수 없는 프로세스를 만들 수도 있다)를 수행한다. LONG_MAX 만큼 대기.
3. 완료 이벤트 알리기
completion을 기다리는 스레드(waiter)가 있는지 확인한다. waiter가 있으면(wait_for_completion()이 진행 중이면) 0을, 없으면 1을 리턴한다.
4. 재사용을 위해 다시 초기화하기
5. 모듈 종료 함수에서 종료 후 완료를 기다리리고 알릴 때(나중에 추가하기:이 함수 없어졌나?)
[Linux] Device driver 동시성 관련 함수 – Semaphore & Mutex
동시성 관련 함수에 대해서 다시 한번 정리하고 가자. Linux device driver 3판, 5장. “동시성과 경쟁 상태” 를 기준으로 정리한다.
공유 자원 접근을 위한 Lock 을 위해서 다음과 같은 것들을 사용한다.
1. 세마포어와 뮤텍스
Critical Section을 정의하기 위해서 세마포어를 사용한다. 일반적으로 P와 V 함수 쌍을 사용하는데, linux 에서는 P함수는 “down”, V 함수를 “up”이라 부른다. 단일 세마포어(공유 자원 개수를 1개로 정의)로 사용할 때 뮤텍스(Mutual Exclusion)라 부른다.
1.1. 세마포어 초기화
<asm/semaphore.h> 를 포함하여야 한다. 관련 Type은 struct semaphore.
1.1.1. 세마포어로 사용할 때 초기화
val 은 세마포어에 할당할 초기값.
1.1.2. Mutex로 사용할 때 초기화
정적 초기화
DECLARE_MUTEX_LOCKED(name); // 0으로 초기화.
실행 중 초기화
void init_MUTEX_LOCKED(struct semaphore *sem); // 0으로 초기화
1.2. 세마포어 획득하기
세마포어 값을 감소시키고 필요한 만큼 기다린다.
세마포어 값을 감소시키고 필요한 만큼 기다리지만, 인터럽트 가능하다. 인터럽트를 받으면 0이 아닌 값을 반환하고, 세마포어를 쥐고 있지 않는다. 때문에 항상 반환값을 확인하여야 한다.
세마포어를 획득할 수 없다면 바로 0이 아닌 값을 반환한다.
1.3. 세마포어 반환
2. 읽기/쓰기 세마포어
읽기만 수행하는 스레드라면 여럿이 함께 접근해도 된다. 이럴 때 rwsem 이라는 특수 세마포어를 이용한다.
rwsem 을 사용하면 쓰기 스레드 하나가 잡고 있던가 읽기 스레드 여럿이 잡고 있던가 둘 중에 하나가 되는데 우선순위는 쓰기 스레드에게 있다. 쓰기 스레드가 임계구역에 접근하는 순간, 읽기 스레드는 모든 쓰기 스레드가 작업을 끝낼 때까지 기다려야 한다. 그래서 쓰기 스레드가 많을 경우 읽기 스레드가 오랫동안 접근 권한을 얻지 못할 수 있다. 따라서 쓰기 접근이 매우 드물고, 짧은 시간 동안에만 필요한 경우에 적당하다.
2.1. 읽기/쓰기 세마포어 초기화
<linux/resem.h> 를 포함하여야 한다. 관련 타입은 struct rw_semaphore. 런타임에 명시적으로 초기화되어야 한다.
2.2. 읽기 전용 세마포어 사용
읽기 전용 접근 권한을 제공한다. 다른 읽기 스레드와 동시 참조가 가능하다. 호출 프로세스를 D 상태(인터럽트가 불가능한 잠자기 상태)로 빠뜨릴 수 있다는 사실에 주의한다.
읽기를 수행할 수 없을 경우 기다리지 않는다. 접근이 가능하다면 0 이 아닌 값을, 이외에는 0을 반환한다. 다른 커널 함수는 대부분 성공일 때 0을 반환하지만 down_read_ttylock은 반대다.
읽기 전용 세마포어 해제
2.2. 쓰기 전용 세마포어 사용
down_read 와 동일
down_read_ttylock 과 동일
up_read 와 동일
잠시만 쓰기 락을 걸어 수정하고 한동안은 읽기 권한만 필요하다면
Moniwiki의 초기 설정
1. monisetup.php 에서 한 일.
1.1. Site 이름 설정
2. php 설정(/etc/php.ini)에서 upload를 위한 작업
2.1. 최대 업로드 파일 사이즈 조정
3. azblue 테마 수정(theme/azblue/theme.php)
3.1. 폭이 너무 좁으니 좀 넓게..
git와 SVN 간의 비교를 통한 이해
If you are just after tracking someone else’s project, this get you started quickly:
git clone url git pull |
svn checkout url svn update |