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 결과




댓글 1개:

  1. 잘봤습니다^^
    fast_build는 무엇이고 어떻게 실행시켜야 하나요?

    답글삭제