Android에 전원을 켜고 시작하는 데몬을 추가하는 것이 비교적 편리한 방법
./out/target/product/generic/ramdisk.img
및./out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/platforms/android-2.3.4/images/ramdisk.img
다음은 Android 시스템을 시작할 때 지정한 파일에 쓰기 위한 데몬을 시작합니다.
총 4단계: 1,ramdisk를 풀다.img2, c 언어로 실현할 기능 완성 3, 수정 init.rc, c 언어 실행 프로그램 시작 4,ramdisk.img
1. 스트레스 해소ramdisk.img:
안드로이드의 ramdisk를 압축을 풀고 수정합니다.img의 수동 방법:
ramdisk.img는 다른 디렉터리에 복사해서 이름을ramdisk로 변경합니다.img.gz 및 명령 사용
gunzip ramdisk.img.gz
그리고 ramdisk라는 폴더를 새로 만듭니다. 들어가서 명령 cpio -i -F./ramdisk.img은 람디스크를img에서 스트레스를 풀었고 ramdisk의 내용을 조작할 수 있습니다.
2、C 언어 프로그램 Hello를 완성합니다.c, 기능을 실현한다.
a.먼저 코드는 다음과 같습니다.
[cpp] view plain copy print ?
#include
#include
#include
int main(void)
umask(0);
printf ("getrlimit 함수 호출에 오류가 발생했습니다!");
{
exit(1);
else if(pid>0)//부모 프로세스 종료
printf ("부모 프로세스 종료, ID% d, 하위 프로세스 ID% d", getpid (),pid).
}
if((pid=fork())<0)
printf("fork 오류 발생!");
}
exit(0);
if(rl.rlim_max==RLIM_INFINITY)
printf("%d",(int)rl.rlim_max);
close(i);
dup(0);
fd=open("/data/hello.txt",O_WRONLY|O_CREAT|O_APPEND,0766);/*여기의/data는android시스템의/data 디렉터리*/를 가리킨다
sleep(5);
close(fd);
}
/************************ **************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
int i=0;
int fd;
pid_t pid;
struct rlimit rl;
char str[]="hello world...
";
umask(0);
if(getrlimit(RLIMIT_NOFILE,&rl)<0)
printf("getrlimit !
");
if((pid=fork())<0)
{
printf("fork !
");
exit(1);
}
else if(pid>0)//
{
printf(" , ID %d, ID %d
",getpid(),pid);
exit(0);
}
//
sleep(2);
printf(" ID %d
",getpid());
setsid();
if((pid=fork())<0)
{
printf("fork !
");
return -1;
}
else if(pid>0)//
{
printf(" , ID %d, ID %d
",getpid(),pid); /* printf , , , printf , ?*/
exit(0);
}
//
printf(" 。
");/* printf , , ?*/
chdir("/");
if(rl.rlim_max==RLIM_INFINITY)
rl.rlim_max=1024;
printf("%d",(int)rl.rlim_max);
for(i=0;i<rl.rlim_max;i++)
close(i);
open("/dev/null",O_RDWR);
dup(0);
dup(0);
// 5s
while(1)
{
fd=open("/data/hello.txt",O_WRONLY|O_CREAT|O_APPEND,0766);/* /data android /data */
write(fd,str,sizeof(str));
sleep(5);
}
close(fd);
exit(0);
}
/************************ **************************/
b.그런 다음 이 프로그램을 android에서 실행 가능한 프로그램으로 컴파일합니다.
현재 디렉토리에 Android를 설정합니다.mk 파일, 다음을 입력합니다.
[cpp] view plain copy print ?
LOCAL_PATH:=$(call my-dir)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:=hello.c
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:=helloworld
LOCAL_SRC_FILES:=hello.c
include $(BUILD_EXECUTABLE)
종료를 저장하고 cd를android 원본 디렉터리에make helloworld 명령을 실행합니다.만약 성공적으로 컴파일된다면 생성된 Helloworld는 디렉터리out/target/product/generic/system/bin/에서 생성된 Helloworld를
파일push를 시뮬레이터의/data 디렉터리로 실행합니다.
#adb push helloworld/data
3. ramdisk 디렉터리에서 init를 수정한다.rc 파일은 Helloworld 프로그램을 시작하고 다음 코드를 추가합니다.
[cpp] view plain copy print ?
service chpermission /data/chpermission
#add by me on 2010-10-18
service chpermission /data/ chpermission
oneshot
4、ramdisk 만들기.img:
init.rc 수정 후 다음 명령을 사용하여 미러 cpio -i -t -F./ramdisk.img > list cpio -o -H newc -O lk.img
- ramdisk.img을 sdk가 가리키는 디렉터리로 복사합니다.
시뮬레이터를 다시 시작합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.