https://releases.ubuntu.com/
20.04

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 libssl-dev bison flex libelf-dev
kernel-package 설치가 안돼서
그냥 kernel-package 빼고 설치했습니다..
# 커널 설치
# /usr/src 위치에서
sudo wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.17.8.tar.xz
# 압축 해제
sudo xz -d linux-5.17.8.tar.xz
sudo tar xvf linux-5.17.8.tar

cd linux-5.17.8
sudo cp /boot/config-5.15.0-30-generic ./.config
sudo make menuconfig
Your display is too small to run Menuconfig 라는 오류 떠도 당황하지 마세요
터미널 창이 작아서 그런거라네요
터미널 창을 잡고 쭉 늘려보세요!!

이런 창이 뜨면
Load → OK
Save → OK
Exit
하면 된다..

sudo vim .config
.config에서 문제가 되는 라인은 다음과 같습니다
각 라인을 주석처리 합니다.
--disable로 처리하는 방법도 있습니다..
CONFIG_MODULE_SIG_ALL
CONFIG_MODULE_SIG_KEY
CONFIG_SYSTEM_TRUSTED_KEYS
가용 코어 갯수 확인
(+) 가상머신의 설정 창에서 가용 코어 갯수를 늘리거나 줄이는 설정을 할 수 있는 것으로 알고 있었습니다.
grep -c processor /proc/cpuinfo
저는 빨리 해보고 싶으니까,12개로 돌리고 컴파일 시작했습니다.
sudo make -j 12
sudo make modules_install
sudo make install
sudo vim /etc/default/grub

sudo update-grub
reboot # 재부팅 후, 부팅 화면에서 +Advanced options for Ubuntu에 들어가 커널 버전 선택

# 현재 커널 버전 확인
uname -r

성공
/usr/src/linux-5.17.8/kernel 위치에 mySysCall_ywkim.c 생성
매개변수로 정수 값 하나를 받습니다.
추가된 시스템 호출 함수는 입력으로 받은 정수 값이 자신의 생일 날짜(day)가 맞으면 자신의 이름과 생일을 출력하며 그렇지 않으면 'Incorrect Input!'이라는 메시지를 출력합니다.
mySysCall_ywkim.c 작성

#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/syscalls.h>
SYSCALL_DEFINE1(mySysCall_ywkim, int, inputDay) {
int myBirthDay = 4;
struct tm my_time;
if (inputDay == myBirthDay) {
printk("Yewon Kim\n");
printk("2001. 8. 4.\n");
}
else {
printk("Incorrect Input!\n");
}
return 0;
}
/kernel/Makefile에 mySysCall_ywkim.o 추가





--disable 처리 해버렸습니다.sudo cp /boot/config-5.15.0-30-generic ./.config
sudo make menuconfig
# LOAD -> OK, SAVE -> OK, EXIT
sudo scripts/config --disable SYSTEM_TRUSTED_KEYS
sudo scripts/config --disable SYSTEM_REVOCATION_KEYS
sudo scripts/config --disable MODULE_SIG_ALL
sudo scripts/config --disable MODULE_SIG_KEY
sudo scripts/config --disable CONFIG_DEBUG_INFO_BTF
# sudo scripts/config --disable SYSTEM_TRUSTED_KEYS && sudo scripts/config --disable SYSTEM_REVOCATION_KEYS && sudo scripts/config --disable MODULE_SIG_ALL && sudo scripts/config --disable MODULE_SIG_KEY && sudo scripts/config --disable CONFIG_DEBUG_INFO_BTF
sudo make -j 12
sudo make modules_install
sudo make install
| make | 시작 시간 | 종료 시간 | 결과 |
|---|---|---|---|
| try1 | 18일 12:46 | 18일 1:25 | 코드가 바보 |
| try4 | 20일 14:58 | (오류 발견, 강제 종료) 3:04 | |
| try5 | 20일 17:13 | 밥먹고왓더니 오류로 멈춰있었음 | |
| 18:8(이어서) | 18:58 | 성공? |
rebootvim test.c
#include <unistd.h>
#include <stdio.h>
int main() {
int test;
test = syscall(548, 4);
printf("%d\n", test);
test = syscall(548, 12);
printf("%d\n", test);
}
sudo dmesg
# sudo dmesg -c --> clear

gcc test.c
./a.out
sudo dmesg

0. 0. 0. 0:0:0은 현재 시간을 출력해보려고 했다가 실패한 흔적입니다 🥲 (무시해주세요!!)이상입니다. 감사합니다!
과제의 해답이 이곳에 있군요! 😏