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 | 성공? |
reboot
vim 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
은 현재 시간을 출력해보려고 했다가 실패한 흔적입니다 🥲 (무시해주세요!!)이상입니다. 감사합니다!
과제의 해답이 이곳에 있군요! 😏