Android 의 시스템 속성 (SystemProperties) 분석
머리말
안 드 로 이 드 의 시스템 속성 은 windows 의 레 지 스 트 에 해당 하 며, key 와 value 로 구성 되 어 있 으 며, 모두 핵심 시스템 의 기본 메커니즘 이다.windows 레 지 스 트 에 비해 안 드 로 이 드 의 시스템 속성 은 간단 하 다. windows 레 지 스 트 리 의 트 리 구조 가 아니 라 목록 일 뿐이다. 즉, 부자 관계 가 없다 는 것 이다.value 는 string, int, long, boolean 이 있 지만 설정 은 문자열 로 만 가능 합 니 다.
Android 의 시스템 속성 은 두 부분 을 포함 합 니 다. 파일 에 저 장 된 지속 적 인 속성 과 켜 질 때마다 가 져 오 는 cache 속성 입 니 다.전 자 는 주로 아래 몇 개의 파일 에 저 장 됩 니 다 (디 렉 터 리 아래).
인터페이스
1. JAVA 계층 인터페이스:
가방 이름: android. os
클래스 이름: System Properties, 숨겨 진 클래스
인터페이스:
키 길 이 는 31 자 를 초과 할 수 없습니다. val 은 91 자 파일 을 초과 하지 않 습 니 다.
2. JNI 인터페이스
androidos_SystemProperties. cpp 정의, frameworks/base/core/jni/android Runtime. cpp 에 JNI 등록
3. 로 컬 인터페이스
인터페이스:
파일:
4. 하부 bionic 내부 인터페이스
시스템 속성 메커니즘 을 수정 하고 싶 지 않 으 면 분석 해 볼 수 있다
파일:
5. init. rc 인터페이스
원본 rc 파일
컴 파일 후 out/target/product/platformname/root/아래로 이동 합 니 다.
image 를 만 든 후 out/target/product/platformname/ramdisk. img 에서 플랫폼 이 다 르 기 때문에 파일 이름 이 다 를 수 있 습 니 다.
장치 가 실 행 된 후 루트 디 렉 터 리 에 있 는 init *. rc 파일 입 니 다.
init. rc 에서 속성, 감청 속성 변 화 를 설정 할 수 있 습 니 다.
setprop key value
on property:key=value
do_your_work
실현:
init 프로 세 스에 서 property 의 처리, 관련 파일
입구 함수 startproperty_서비스 및 propertyinit、load_persist_props
1. 통신 메커니즘:
property_set 는 두 세트 로 이 루어 집 니 다. 한 세트 인터페이스 3: 로 컬 인터페이스의 실현 은 인터페이스 4: 중 을 호출 합 니 다. __system_property_set,__system_property_set 는 로 컬 SOCKET: "/dev/socket/property service"를 통 해 init 프로 세 스 의 properties 서비스 와 통신 합 니 다.
init 프로 세 스 의 system/core/init/property서비스. c (h) 코드 중 다른 propertyset 구현, init 프로 세 스에 만 사 용 됩 니 다.
2. 안전 실현:
key 의 value 를 설정 할 때 인증 권 이 필요 합 니 다. 설정 프로그램 이 있 는 프로 세 스 의 fd 에 따라 uid 값 을 알 수 있 습 니 다. 예 를 들 어 system server 프로 세 스 는 net 에서 시작 하 는 key 를 설정 할 수 있 고 gs m 에서 시작 하 는 key 를 설정 할 수 없습니다. 관련 정 의 는 다음 과 같 습 니 다.
권한 정의 system/core/include/private/androidfilesystem_config.h
#define AID_ROOT 0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO 1001 /* telephony subsystem, RIL */
#define AID_DHCP 1014 /* dhcp client */
#define AID_SHELL 2000 /* adb and debug shell user */
#define AID_CACHE 2001 /* cache access */
#define AID_APP 10000 /* first app user */
속성 권한 표 는 system/core/init/propertyservice. c 정의, 화이트 리스트 방식 사용
struct {
const char *prefix;
unsigned int uid;
unsigned int gid;
} property_perms[] = {
{ "net.rmnet0.", AID_RADIO, 0 },
{ "net.gprs.", AID_RADIO, 0 },
{ "net.ppp", AID_RADIO, 0 },
{ "net.qmi", AID_RADIO, 0 },
{ "net.lte", AID_RADIO, 0 },
{ "net.cdma", AID_RADIO, 0 },
{ "ril.", AID_RADIO, 0 },
{ "gsm.", AID_RADIO, 0 },
{ "persist.radio", AID_RADIO, 0 },
{ "net.dns", AID_RADIO, 0 },
{ "sys.usb.config", AID_RADIO, 0 },
{ "net.", AID_SYSTEM, 0 },
{ "dev.", AID_SYSTEM, 0 },
{ "runtime.", AID_SYSTEM, 0 },
{ "hw.", AID_SYSTEM, 0 },
{ "sys.", AID_SYSTEM, 0 },
{ "service.", AID_SYSTEM, 0 },
{ "wlan.", AID_SYSTEM, 0 },
{ "dhcp.", AID_SYSTEM, 0 },
{ "dhcp.", AID_DHCP, 0 },
{ "debug.", AID_SHELL, 0 },
{ "log.", AID_SHELL, 0 },
{ "service.adb.root", AID_SHELL, 0 },
{ "service.adb.tcp.port", AID_SHELL, 0 },
{ "persist.sys.", AID_SYSTEM, 0 },
{ "persist.service.", AID_SYSTEM, 0 },
{ "persist.security.", AID_SYSTEM, 0 },
{ NULL, 0, 0 }
};
check 통과 하기perms 함수 로 권한 검사
다음은 서비스 제어 권한 입 니 다.
struct {
const char *service;
unsigned int uid;
unsigned int gid;
} control_perms[] = {
{ "dumpstate",AID_SHELL, AID_LOG },
{ "ril-daemon",AID_RADIO, AID_RADIO },
{NULL, 0, 0 }
};
check 통과 하기control_perms 함수 로 권한 검사
3. 감청 변화
속성 을 수정 할 때 함수 property 를 통 해changed 알림 init 가 init. rc 의 trigger 를 촉발 합 니 다.
4. 속성 특수 처리:
1. ctl. 시작 하 는 속성 은 제어 속성 으로 시스템 의 로 컬 서 비 스 를 제어 하 는 데 사 용 됩 니 다.
사용 문법
ctl.xxx servicename[:args]
2. ro. 시작 속성 은 수정 할 수 없습니다.
3. net. 시 작 된 속성 (net. change 제외) 설정 은 net. change = key 의 속성 설정 을 유발 합 니 다. bionic/libc/netbsd/resolv/resstate. c 의 코드 처리 ( system property find 함 수 를 통 해);
4. persist. 시 작 된 속성 입 니 다. init. rc 와 코드 에 설정 하면/data/property 디 렉 터 리 에 기 록 됩 니 다.
From : http://www.bobbog.com/archives/709
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제한된 크기의 디렉토리를 만드는 방법오늘 저는 장치에 공간이 없을 때 백업 중에 응용 프로그램이 어떻게 작동하는지 테스트(및 수정)하는 작업이 있습니다. 결과적으로 "남은 공간 없음"오류로 백업이 실패하면 새 파일이 없어야 합니다. 지금까지 문제를 재...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.