레이블이 안드로이드인 게시물을 표시합니다. 모든 게시물 표시
레이블이 안드로이드인 게시물을 표시합니다. 모든 게시물 표시

2012년 10월 18일 목요일

안드로이드 커널에서 System call 추가하기

커널쪽에서 시스템콜을 추가하고

커널에서 돌아가는 어플리케이션을 만드는 순으로 작성하였다.



---------------------------------------------
~/work : 워킹디렉토리
~/work/kernel/arch/arm/include/asm/unistd.h : 여기에 System Call 번호를 할당하여야 한다.

unistd.h



~/work/kernel/arch/arm/kernel/calls.S : 처리 함수를 등록하여야 한다.
calls.S

System Call이 발생했을 때 수행될 함수를 구현하자
printStar.c(~/work/kernel/kernel/printStar.c)




별찍기 소스는 아무렇게 넣자..


Makefile을 수정하자
Makefile(~/work/kernel/kernel/Makefile)
obj-y 에 목적파일을 추가한다.



이 후 ~/work/kernel 디렉토리의 fast_build를 실행시킨다.



어플리케이션을 만들기 위해 ~/work/android_work/external/ 디렉토리로 이동하여
mkdir printStar로 printStar디렉토리를 만든다.
printStar디렉토리에서 printStar.c를 생성하여 아래와 같이 코드를 작성한다.
printStar.c(~/work/android_work/external/printStar/printStar.c)




이렇게 작성하고 printStar디렉토리에서 Android.mk파일을 생성하여 아래와 같이 작성한다.
============================Android.mk============================
LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)

LOCAL_C_INCLUDES:=\
     $(LOCAL_PATH)/include \
     $(LOCAL_PATH)/android

LOCAL_SRC_FILES:=\
     printStar.c

LOCAL_MODULE:=printStar

include $(BUILD_EXECUTABLE)
============================Android.mk============================

작성 후 ~/work/android_work디렉토리에서
. build/envsetup.sh
chooseproduct sec_smdkv210
mmm external/printStar/

위와 같이 입력하면 출력 결과물은
out/target/product/smdkv210/system/bin/printStar  에 존재하게 된다.
이것을 ~/work/android_work/rootfs/system/bin 에 복사한다.

rootfs 디렉토리 내에서 다음과 같이 tar로 묶어 sdboot로 전송한다.
tar zcvf ../../sdboot/maple210_android210.tgz .


kernel 이미지와 안드로이드 이미지를 sd카드에 쓴다.
sudo ./sdwriter_maple210 sdb
마지막 sdb는 유동적으로 변할 수 있다.(dmesg | tail -3를 통하여 알 수 있다.)


minicom 결과