링크 ux 에서 인 터 럽 트 아 날로 그 핫 플러그 를 사용 합 니 다.
Liux 에서 자주 사용 하 는 사용자 층 과 커 널 층 의 통신 방법 은 시스템 호출 (예 를 들 어 copy to user / copy from user), proc, ioctl 과 netlink 가 있다.핫 플러그 모드 는 Liux 가 nelink 를 바탕 으로 이 루어 진 것 입 니 다.netlink 의 설명 은 튜 토리 얼 을 볼 수 있 습 니 다.http://blog.csdn.net/zcabcd123/article/details/8272423。
2. 실현 절차
1. 충전 구조
Linux 시스템 에서 시스템 설정 이 바 뀌 었 을 때, 예 를 들 어 kset 을 시스템 에 추가 합 니 다.kobject 를 이동 하면 커 널 공간 에서 사용자 공간 으로 알림 이 전 송 됩 니 다. 이것 이 바로 핫 플러그 이벤트 입 니 다.핫 플러그 사건 은 사용자 공간 에 해당 하 는 처리 프로그램 (예 를 들 어 udev, mdev) 을 호출 할 수 있 습 니 다. 이 처리 프로그램 들 은 드라이버 를 불 러 오고 장치 노드 를 만 드 는 등 핫 플러그 사건 에 응답 합 니 다. Struct kset_uevent_ops {int (* filter) (struct kset * kset, struct kobject * kobj), const char * (* name) (struct kset * kset, struct kobject * kobj), int (* uevent) (struct kset * kset, struct kobject * kobj, struct kobj uevent env * env);} 이 kset 이 관리 하 는 kobject 와 kset 상태 가 변 할 때(가입, 이동)이 세 가지 함수 가 호출 됩 니 다. Filter: 사용자 공간 에 이 벤트 를 전달 할 지 여 부 를 결정 합 니 다. filter 가 0 으로 돌아 가면 이 벤트 를 전달 하지 않 습 니 다. Name: 사용자 공간 에 해당 하 는 문자열 을 전달 하 는 핫 플러그 처리 프로그램 을 담당 합 니 다. Uevent: 사용자 공간 에 필요 한 인 자 를 환경 변수 에 추가 합 니 다. 따라서 kse 를 먼저 채 웁 니 다.t uevent ops 이 구조 체:
static struct kobj_type ktype =
{
};
static int kset_filter(struct kset *kset,struct kobject *kobj)
{
return 1;
}
static const char *kset_name(struct kset *kset,struct kobject *kobj)
{
static char buf[20];
sprintf(buf,"%s","SmartCover");
return buf;
}
static int kset_uevent(struct kset *kset,struct kobject *kobj, struct kobj_uevent_env *env)
{
return 0;
}
static struct kset_uevent_ops uevent_ops =
{
.filter = kset_filter,
.name = kset_name,
.uevent = kset_uevent,
};
struct kset *kset_p;
struct kset *kset_c;
2. 초기 화 및 로그아웃
probe 함수 에 추가:
kset_p = kset_create_and_add("kset_p", &uevent_ops, NULL);
kset_c = kzalloc(sizeof(*kset_c), GFP_KERNEL); // kset
kobject_set_name(&kset_c->kobj,"kset_c");
kset_c->kobj.kset = kset_p;
kset_c->kobj.ktype = &ktype;
release 함수 에 로그아웃 함 수 를 추가 합 니 다. (일반적으로 시스템 에서 실행 할 기회 가 없습니다.)
kset_unregister(kset_p);
3. 구체 적 인 시 뮬 레이 션
kset 을 시스템 에 추가 / 삭제 할 때 커 널 에서 사용자 층, 즉 핫 플러그 로 알림 이 보 내기 때 문 입 니 다. 따라서 우 리 는 첫 번 째 중단 시 삽입 이 고, 다음 에는 뽑 아서 내 추 럴 수 있 도록 설정 할 수 있 습 니 다.
상부 테스트
Android 상층 부 에 서 는 핫 플러그 의 발생 을 감지 하기 위해 UEventObserver 방법 을 사용 합 니 다. 다음 절 차 는 다음 과 같 습 니 다. 1. 감청 할 핫 플러그 파일 경 로 를 설정 합 니 다. 위 에서 시 뮬 레이 션 한 핫 플러그 파일 위 치 는 / sys / kset p 이 므 로 파일 경 로 를 / kset p 로 설정 합 니 다.
if(add){ //
kset_unregister(kset_c); // kset 。 kset ,kset_unregister free kset_c ,
, 。
if(!kset_c){
kset_c = kzalloc(sizeof(*kset_c), GFP_KERNEL);
}
kobject_set_name(&kset_c->kobj,"kset_c");
kset_c->kobj.kset = kset_p;
kset_c->kobj.ktype = &ktype;
}else if(!add){ //
kset_register(kset_c); // kset, add。
}
2. UEventObserver. onUEvent 재 작성 방법
private String ueventTest = "DEVPATH=/kset_p";
3
감청
참고 자료
1. Android 테스트 감청 apk 코드 다운로드:
http://download.csdn.net/detail/u011630458/7364653 2. Android 상부 테스트 의 튜 토리 얼, blog 를 볼 수 있 습 니 다:http://blog.csdn.net/lushengchu_luis/article/details/9466405
3. 테스트 의 전체 코드 는 다음 과 같 습 니 다. (안 드 로 이 드 소스 코드 에서 컴 파일 해 야 합 니 다)
private final UEventObserver mUEventObserver = new UEventObserver() {
@Override
public void onUEvent(UEventObserver.UEvent event){
Log.e("Seven", "yulinghan UEVENT: "+event.toString());
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.