출처: 인사이드 안드로이드(위키북스출판)

RPC code & RPC data
서비스 클라이언트는 서비스서버에 존재하는 서비스의 함수를 사용하기 위해,
각 함수에 해당하는 식별자를 바인더 IPC데이터에 담아 전달 <-- RPC 코드
함수의 인자 역시 IPC데이터에 담아 전달                           <-- RPC 데이터

즉, 서비스 서버가 가진 서비스의 함수를 호출할려면, PRC코드를 알아야 함.

바인더 어드레싱
context manager : 다양한 서비를 모두 목록화해서 관리함.  서비스마다 핸들(바인더 IPC의 목적지 주소로 사용)이라는 번호값을 할당. 서비스의 추가/검색등의 관리기능을 수행.  %context manager의 핸들값은 0으로 지정되어 있음
바인더 드라이버는 IPC 데이터의 핸들을 가지고 서비스 서버를 찾는데, 이러한 과정을 바인더 어드레싱이라 함.

바인더 어드레싱을 위해 서비스 서버는 자신이 가진 서비스에 대한 접근 정보를 컨텍스트 매니저에 등록해야함.
서비스서버는 ADD_SERVICE라는 RPC코드와 등록할 서비스 이름(RPC데이터), 그리고 핸들을 0으로 지정하고IPC데이터에 실어 바인더 드라이버에 전달함.
바인더 드라이버는 먼저 핸들 0에 해당하는 바인더 노드를 찾음. 핸들 0에 해당하는 바인더 노드를 context manager를 의미하기 때문에 서비스 서버는 IPC데이터를 context manager에 전달함.
이후 바인더 드라이버는 서비스서버의 서비스 A에 해당하는 바인더 노드를 하나 생성함.  그리고 contenxt manager가 생성된 바인더 노드를 알수 있게 바인더 노드 참조 데이터를 생성해 해당 노드를 연결함.
참조 데이터는 생성된 순서대로 번호가 매겨지고, 이 번호는 ipc데이터에 담겨 context manger로 전달됨
context manager는 ipc데이터에 들어있는 서비스 이름과 바인더 노드의 번호를 서비스 리스트에 등록.

 %바인더 노드는 바인더 드라이버내 자료구조이며, 서비스마다 하나씩 존재함. 그리고 프로세스마다 바인더 노드들을 리스트로 가진다.(바인더 노드는 ipc의 대상이 되는 프로세스를 찾기 위한 식별자 정도로 이해하면 됨)

프로세스 관점에서의 서비스 사용
클라이언트던 서버 입장이던 다음과 같은 공통 작업을 거친다.
1. 바인더 드라이버 열기 open()함수 호출
2. IPC 데이터/응답 데이터 수신 버퍼 확보 mmap()함수 호출
3. 데이터 송신을 위한 ioctl()함수 호출

바인더 드라이버 관점에서의 서비스 사용
...

'안드로이드 > 프레임워크' 카테고리의 다른 글

Bionic libc (2)  (0) 2012.11.08
Bionic libc  (0) 2012.10.30
안드로이드 init.rc (oom_adj값)  (0) 2012.09.27
Dalvik Virtual Machine 와 odex  (0) 2012.08.13
안드로이드 프레임워크 *Java에서 전처리기 사용하기*  (0) 2011.06.06
Posted by code cat
프로그래밍/C2011. 10. 23. 14:51
구조체 멤버로 주소를 저장하기 위해서는 구조체 멤버를 포인터 변수로 선언하라
구조체 멤버로 연속적인 메모리를 만들기 위해서는 구조체 멤버를 배열로 선언하라
 

'프로그래밍 > C' 카테고리의 다른 글

process & signal  (0) 2012.01.25
error: invalide storage class for function 'xxxx'  (0) 2011.11.29
대상체의 기억수명  (0) 2011.11.29
열거, enum, 이놈  (0) 2011.11.28
전처리기 (1)  (0) 2011.11.09
Posted by code cat
프로그래밍/JAVA2011. 10. 19. 10:11

거의 십중팔구 jdk가 제대로 안 깔려서 이다.

이걸 확인할려면, javac를 입력해보면 없을 경우, 다음과 같은 패키지에서 어쩌구저쩌구 한다.
그중 openjdk-6을 골라서 sudo apt-get install openjdk-6을 설치 해 준다.

이젠 ant로 잘 빌드가 될 것이다.

'프로그래밍 > JAVA' 카테고리의 다른 글

OTA Package Utility  (0) 2013.11.25
Swing desiginer LookAndFeel 종류  (0) 2013.11.19
Java Generics  (0) 2012.10.01
WindowBuilder Pro for Eclipse 3.7(Indigo) 설치 오류  (0) 2012.08.06
Posted by code cat
리눅스/커널2011. 9. 25. 14:47
1 Booting ARM Linux
2 =================
3
4 Author: Russell King
5 Date : 18 May 2002
6
7 The following documentation is relevant to 2.4.18-rmk6 and beyond.
8
9 In order to boot ARM Linux, you require a boot loader, which is a small
10 program that runs before the main kernel. The boot loader is expected
11 to initialise various devices, and eventually call the Linux kernel,
12 passing information to the kernel.
13
14 Essentially, the boot loader should provide (as a minimum) the
15 following:
16
17 1. Setup and initialise the RAM.
18 2. Initialise one serial port.
19 3. Detect the machine type.
20 4. Setup the kernel tagged list.
21 5. Call the kernel image.
22
23
24 1. Setup and initialise RAM
25 ---------------------------
26
27 Existing boot loaders: MANDATORY
28 New boot loaders: MANDATORY
29
30 The boot loader is expected to find and initialise all RAM that the
31 kernel will use for volatile data storage in the system. It performs
32 this in a machine dependent manner. (It may use internal algorithms
33 to automatically locate and size all RAM, or it may use knowledge of
34 the RAM in the machine, or any other method the boot loader designer
35 sees fit.)
36
37
38 2. Initialise one serial port
39 -----------------------------
40
41 Existing boot loaders: OPTIONAL, RECOMMENDED
42 New boot loaders: OPTIONAL, RECOMMENDED
43
44 The boot loader should initialise and enable one serial port on the
45 target. This allows the kernel serial driver to automatically detect
46 which serial port it should use for the kernel console (generally
47 used for debugging purposes, or communication with the target.)
48
49 As an alternative, the boot loader can pass the relevant 'console='
50 option to the kernel via the tagged lists specifying the port, and
51 serial format options as described in
52
53 Documentation/kernel-parameters.txt.
54
55
56 3. Detect the machine type
57 --------------------------
58
59 Existing boot loaders: OPTIONAL
60 New boot loaders: MANDATORY
61
62 The boot loader should detect the machine type its running on by some
63 method. Whether this is a hard coded value or some algorithm that
64 looks at the connected hardware is beyond the scope of this document.
65 The boot loader must ultimately be able to provide a MACH_TYPE_xxx
66 value to the kernel. (see linux/arch/arm/tools/mach-types).
67
68
69 4. Setup the kernel tagged list
70 -------------------------------
71
72 Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED
73 New boot loaders: MANDATORY
74
75 The boot loader must create and initialise the kernel tagged list.
76 A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
77 The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag
78 has the size field set to '2' (0x00000002). The ATAG_NONE must set
79 the size field to zero.
80
81 Any number of tags can be placed in the list. It is undefined
82 whether a repeated tag appends to the information carried by the
83 previous tag, or whether it replaces the information in its
84 entirety; some tags behave as the former, others the latter.
85
86 The boot loader must pass at a minimum the size and location of
87 the system memory, and root filesystem location. Therefore, the
88 minimum tagged list should look:
89
90 +-----------+
91 base -> | ATAG_CORE | |
92 +-----------+ |
93 | ATAG_MEM | | increasing address
94 +-----------+ |
95 | ATAG_NONE | |
96 +-----------+ v
97
98 The tagged list should be stored in system RAM.
99
100 The tagged list must be placed in a region of memory where neither
101 the kernel decompressor nor initrd 'bootp' program will overwrite
102 it. The recommended placement is in the first 16KiB of RAM.
103
104 5. Calling the kernel image
105 ---------------------------
106
107 Existing boot loaders: MANDATORY
108 New boot loaders: MANDATORY
109
110 There are two options for calling the kernel zImage. If the zImage
111 is stored in flash, and is linked correctly to be run from flash,
112 then it is legal for the boot loader to call the zImage in flash
113 directly.
114
115 The zImage may also be placed in system RAM (at any location) and
116 called there. Note that the kernel uses 16K of RAM below the image
117 to store page tables. The recommended placement is 32KiB into RAM.
118
119 In either case, the following conditions must be met:
120
121 - Quiesce all DMA capable devices so that memory does not get
122 corrupted by bogus network packets or disk data. This will save
123 you many hours of debug.
124
125 - CPU register settings
126 r0 = 0,
127 r1 = machine type number discovered in (3) above.
128 r2 = physical address of tagged list in system RAM.
129
130 - CPU mode
131 All forms of interrupts must be disabled (IRQs and FIQs)
132 The CPU must be in SVC mode. (A special exception exists for Angel)
133
134 - Caches, MMUs
135 The MMU must be off.
136 Instruction cache may be on or off.
137 Data cache must be off.
138
139 - The boot loader is expected to call the kernel image by jumping
140 directly to the first instruction of the kernel image.

'리눅스 > 커널' 카테고리의 다른 글

Virtual Linux Manager 정리 1  (0) 2012.03.18
GCC, typeof  (0) 2012.02.23
Linux 3.0 Kernel  (0) 2011.07.31
커널선점  (0) 2011.05.01
커널 스레드  (0) 2011.05.01
Posted by code cat
시스템 시간이 다른 머신 사이에서 tar로 압축해서 파일을 옮길때,
tar: 파일 어쩌구저쩌구.c  time stamp 날짜 시간 s in the future 이런 식으로 메세지가 뜨면은

파일을 풀 때, m 옵션을 넣어주면 된다.  man tar를 보면, m옵션에 대해서 다음과 같이 기재되어 있다.

-m, --touch, --modification-time 
don't extract file modified time

 

즉 변환된 시간을 넣지 말라는 소리다.

그러므로,
tar xvfz archive.tar.gz

대신
tar xmvfz archive.tar.gz

하면 된다. 


Posted by code cat