cpu_1

김펭귄·2024년 11월 2일

System Call Implementation

  • user process에서 ku_cpu의 작업처리를 요청하는 system call 구현.
  • SYSCALL_DEFINE2 : parameter는 system call을 요청한 프로세스의 이름(name)과 작업시간(jobTime) 2개
  • request accept시 0 반환, reject할 시 1 반환.
  • (linux)/kernel/sslab_ku_cpu.c
  • 코드 수정으로 인해 다음 글에 post하였음.

Syscalls Header

  • (linux)/include/linux/syscalls.h 파일에 구현한 System Call 추가

System Call table

  • (linux)/arch/x86/entry/syscalls/syscall_64.tbl에 System Call 등록.
  • 337

Makefile

  • (linux)/kernel/Makefile에 sslab_ku_cpu.o 추가

ERROR

void parameter error

  • 함수 prototype에서 인자가 없이 선언할 경우 error 발생. parameter로 void를 넣어줘야함.
kernel/sslab_ku_cpu.c: At top level:
kernel/sslab_ku_cpu.c:68:5: error: function declaration isn’t a prototype [-Werror=strict-prototypes]
 int ku_pop() {   
     ^~~~~~
  • int ku_pop(void);로 해결

자기 참조 구조체 error

  • typedef 통해 struct node를 NODE로 정의하기 전, 구조체 안에서 NODE를 사용
  • 에러 발생한 코드
typedef struct node {
	NODE * next;
    } NODE;
  • 에러
kernel/sslab_ku_cpu.c:22:2: error: unknown type name ‘node’
  node* next;
  ^~~~
  • 해결법 : NODE대신 struct node로 변경

node 재정의 error

  • 다른 코드파일에서 struct node가 이미 정의되어 있어서 에러
kernel/sslab_ku_cpu.c:20:16: error: redefinition of ‘struct node’
 typedef struct node{
                ^~~~
In file included from ...
./include/linux/node.h:22:8: note: originally defined here
 struct node {
        ^~~~
  • 해결법 : struct _node로 수정.

kmalloc

  • # include <linux/slab.h>
  • kernel에서 동적으로 메모리를 할당할 수 있는 방법
  • kmalloc(memory size, option) 통해 사용 가능
  • memory size에는 정수를 직접 넣어주거나 sizeof() 통해서도 사용 가능
  • 옵션 flag에는 여러 종류가 있다. 일반적으로 사용하는 GFP_KERNEL을 통해 할당 받을 수 있다.
  • 할당 받은 메모리를 다 사용하여 반납하려면 kfree(메모리 주소) 해주면 된다
profile
반갑습니다

0개의 댓글