본문으로 바로가기

Basic System Call 구현

category Linux/Embedded 2022. 9. 7. 21:37

System Call 구현

Kernel 소스 다운 및 사전 작업

  • 현재 리눅스의 커널 정보 확인

  • 아래 사이트에서 설치할 linux kernel 다운
  • root 계정 접속 후 /usr/src에 받은 linux kernel 소스 압축 해제

  • 모든 작업은 /usr/src/linux-4.18.18에서 진행되기 때문에 밑에 글부터는 해당 위치를 "base_dir"로 명시
  • "base_dir"/include/linux/syscall.h에 실습에 사용할 함수 정의

  • "base_dir"/arch/x86/entry/syscalls/syscall_64.tbl에 System Call Table 등록
    • # x32-specific ... 위에 추가
    • 만약 32bit라면 syscall_32.tbl 맨 아래에 추가

  • System Call 함수 구현
    • "base_dir"/kernel/addcall.c 작성
#include <linux/unistd.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <asm/uaccess.h>

asmlinkage long sys_addcall(void)
{
    printk(KERN_EMERG "Hello World\n");
    return 0;
}

  • "base_dir"/kernel/Makefile/에 object파일인 addcall.o 작성
obj-y       = fork.o exec_domain.o panic.o \
              cpu.o exit.o softirq.o resource.o \
              sysctl.o sysctl_binary.o capability.o ptrace.o user.o \
              signal.o sys.o umh.o workqueue.o pid.o task_work.o \
              extable.o params.o \
              kthread.o sys_ni.o nsproxy.o \
              notifier.o ksysfs.o cred.o reboot.o \
              async.o range.o smpboot.o ucount.o addcall.o
obj-$(CONFIG_MODULES) += kmod.o
obj-$(CONFIG_MULTIUSER) += groups.o

ifdef CONFIG_FUNCTION_TRACER

Kernel Compile & Booting

  • Kernel Compile을 위한 관련 패키지 설치
$ sudo apt-get update
$ sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 kernel-package libssl-dev bison flex libelf-dev

  • 설정없이 진행하기 위해 현재 사용중인 커널의 config 파일 복사

  • make menuconfig를 사용해 아래 순서대로 커널 설정

  • 컴파일 시간을 줄이기 위하여 컴퓨터의 모든 코어 사용를 사용하여 컴파일

$ grep -c processor /proc/cpuinfo    # core 수 확인
$ make-kpkg --J 2 --initrd --revision=1.0 kernel_image        # kernel compile
  • 컴파일한 kernel 설치
$ dpkg -i linux-image-4.18.18_1.9_amd64.deb

  • reboot 명령어로 재부팅

  • 재부팅 후 새로 설치한 컬러로 부팅되었는지 확인

Test Application을 이용한 결과 확인

반응형

'Linux > Embedded' 카테고리의 다른 글

Character Device Driver 실습  (0) 2022.09.15
Arg(인자처리) Module Programming  (0) 2022.09.15
Basic Module Programming  (0) 2022.09.13