주제: 시스템 콜 작성시 에러
처음 작성해보는건데 Make bzImage에서 에러가 나옴니다.
*/usr/src/linux은 커널 소스 위치
*커널은 2.4.3입니다.
*intel pentium4 2.0
1. /usr/src/linux/include/asm-i386/unistd.h에
#define __NR_getdents64 220
#define __NR_fcntl64 221
#define __NR_newsyscall 222 <----추가
했습니다.
2. /usr/src/linux/arch/i386/kernel/entry.S에
.long SYMBOL_NAME (sys_getdents64) /* 220 */
.long SYMBOL_NAME(sys_fcntl64)
.long SYMBOL_NAME(sys_newsyscall)
.long SYMBOL_NAME(sys_ni_syscall) /* reserved for TUX */
.rept NR_syscalls-223
.long SYMBOL_NAME(sys_ni_syscall)
.endr
추가 했습니다.
3. /usr/src/linux/kernel/newfile.c을 만들어서
#include <linux/unistd.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/sched.h>
asmlinkage int sys_newcall()
{
printk("Hello Linux, I'm in Kernel \n");
return(0);
}
작성 했습니다.
또 Makefile
export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o
obj-y = sched.o dma.o fork.o exec_domain.o panic.o printk.o \
module.o exit.o itimer.o info.o time.o softirq.o resource.o \
sysctl.o acct.o capability.o ptrace.o timer.o user.o \
signal.o sys.o kmod.o context.o newfile.o
추가 햇습니다.
그리고 make bzImage 했더니
arch/i386/kernel/kernel.o: In function `sys_call_table':
arch/i386/kernel/kernel.o(.data+0x3d4): undefined reference to `sys_newsyscall'
make: *** [vmlinux] Error 1
이라고 에러가 발생했습니다.
이유가 뭔지 모르겠습니다. 가르쳐 주세요.
감사합니다.
사실,처음 접하는 것을 할때, 한참 열심히 코딩을 하고 나서, 실
사실,
처음 접하는 것을 할때, 한참 열심히 코딩을 하고 나서, 실행했을때,
안 돌아가면 놀란 가슴에, 정신이 혼미해져서 잘 볼 수 없게 되더라구요..
역시, 코딩을 마치고 나서 , 다른 사람이 한 번 보게 하는것이 많은 도움이 되는것 같네요.
사족이 길었습니다.
함수 이름이 틀리네요.ㅋ;
https://nicesj.com
https://blog.nicesj.com
예 감사합니다.
감사합니다.
댓글 달기