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하였음.
- (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() {
^~~~~~
자기 참조 구조체 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 {
^~~~
kmalloc
# include <linux/slab.h>
- kernel에서 동적으로 메모리를 할당할 수 있는 방법
kmalloc(memory size, option) 통해 사용 가능
- memory size에는 정수를 직접 넣어주거나
sizeof() 통해서도 사용 가능
- 옵션 flag에는 여러 종류가 있다. 일반적으로 사용하는
GFP_KERNEL을 통해 할당 받을 수 있다.
- 할당 받은 메모리를 다 사용하여 반납하려면
kfree(메모리 주소) 해주면 된다