기본적으로 뼈대는 x86과 동일하다. 약간의 매크로가 틀릴 뿐인데.. 중요한 것은 제일 나중에..
먼저 커널의 다음 3 파일을 수정하여 새로운 system call을 추가하자.
1. arch/arm/kernel/calls.S
2. include/asm-arm/unistd.h
3. 해당 system call을 구현 할 부분(따로 분리해서 구현해도 상관없고 기존의 아무 소스 파일에나 구현해도 상관없다. 단지 makefile만 잘 수정해준다면)
마지막으로 해당 system call을 사용하는 application을 작성하여야 한다.
#include "/home/barrios/work/xxx/linux/include/asm-arm/unistd.h"
#include
_syscall1(int,barrios_write,int,arg);
_syscall1(int,barrios_t,int,arg);
int main()
{
int i;
i = barrios_write(2);
i = barrios_t(2);
return 0;
}
자. 컴파일 하자.
arm_unknown-linux-gnu-gcc -o barrios_syscall barrios_syscall.c
에러 뜨나??
barrios_syscall.c:5: error: expected declaration specifiers or ‘...’ before ‘barrios_write’
barrios_syscall.c:5: error: expected declaration specifiers or ‘...’ before ‘arg’
barrios_syscall.c:5: warning: data definition has no type or storage class
barrios_syscall.c:6: error: expected declaration specifiers or ‘...’ before ‘barrios_t’
barrios_syscall.c:6: error: expected declaration specifiers or ‘...’ before ‘arg’
barrios_syscall.c:6: warning: data definition has no type or storage class
그럼 다음과 같이...
arm_unknown-linux-gnu-gcc -o barrios_syscall barrios_syscall.c -D__KERNEL__
arm linux kernel에 system call 추가 Mar 18, 2008
작성자: barrios 위치 7:19 PM
Subscribe to:
Post Comments (Atom)
1 개의 덧글:
2.6.18 이후로 _syscall macro는 더 이상 사용되지 않는다. 대신에 syscall syscall을 사용하라. 더 편리해졌다. man syscall 참조.
Post a Comment