Android 하드웨어 추상 층 (HAL) 개요 소개 및 학습 계획
http://blog.csdn.net/luoshengyang/article/details/6567257
요약 은 다음 과 같다.
app(java)
IService. Stub 를 통 해 service 가 제공 하 는 인 터 페 이 스 를 사용 합 니 다.
import android.os.IHelloService;
private IHelloService helloService;
helloService = IHelloService.Stub.asInterface(ServiceManager.getService("hello"));
helloService.setVal(val);
"hello": 시스템 시작 시 HelloService 불 러 올 때 지정
IHelloService.Stub IHelloService. aidl 생 성
framework service (java) (AIDL 기반)
대상: 자바 인터페이스 제공, service 서비스 등록
다음: jni 가 제공 하 는 native 인 터 페 이 스 를 호출 합 니 다.
frameworks/base/core/java/android/os
IHelloService. aidl: IHelloService. Stub 생 성
interface IHelloService {
void setVal(int val);
int getVal();
}
frameworks/base/services/java/com/android/server
Hello Service. java: 자바 인터페이스 에서 nativa 인터페이스 로 전환 실현
public class HelloService extends IHelloService.Stub {
HelloService() {
init_native();
}
public void setVal(int val) {
setVal_native(val);
}
public int getVal() {
return getVal_native();
}
private static native boolean init_native();
private static native void setVal_native(int val);
private static native int getVal_native();
};
SystemServer. java: HelloService 를 불 러 오 는 코드 추가
ServiceManager.addService("hello", new HelloService());
framework JNI 인터페이스 (c + +) (JNI 기반)
대상: native 인터페이스 구현, 등록, 자바 환경 변수 변환 실현
다음: HAL 인터페이스 호출
frameworks/base/services/jni
com_android_server_HelloService. cpp: com. android. server. HelloService 에 대응 합 니 다.
자바 인터페이스의 로 컬 구현 (HAL 인터페이스 기반);jni 등록;자바 변수 변환
namespace android
{
struct hello_device_t* hello_device = NULL;
static void hello_setVal(JNIEnv* env, jobject clazz, jint value) {
hello_device->set_val(hello_device, val);
}
static jint hello_getVal(JNIEnv* env, jobject clazz) {
hello_device->get_val(hello_device, &val);
}
static inline int hello_device_open(const hw_module_t* module, struct hello_device_t** device) {
return module->methods->open(module, HELLO_HARDWARE_MODULE_ID, (struct hw_device_t**)device);
}
static jboolean hello_init(JNIEnv* env, jclass clazz) {
hello_module_t* module;
if(hw_get_module(HELLO_HARDWARE_MODULE_ID, (const struct hw_module_t**)&module) == 0) {
if(hello_device_open(&(module->common), &hello_device) == 0) {
<span style="white-space:pre"> </span> }
<span style="white-space:pre"> </span> }
}
static const JNINativeMethod method_table[] = {
{"init_native", "()Z", (void*)hello_init},
{"setVal_native", "(I)V", (void*)hello_setVal},
{"getVal_native", "()I", (void*)hello_getVal},
};
int register_android_server_HelloService(JNIEnv *env) {
return jniRegisterNativeMethods(env, "com/android/server/HelloService", method_table, NELEM(method_table));
}
};
HAL 인터페이스 (c) (android HAL 프레임 기반)
대상: 구동 격 리 실현 (사용자 컨트롤)
다음: 드라이브 호출
hardware/libhardware/include/hardware
struct hw_module_t common
struct hw_device_t common
hardware/libhardware/modules
struct hello_module_t HAL_MODULE_INFO_SYM 정적 정의
hello_device_open 동적 설정 struct hellodevice_t
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.