Skip to content

hardy716/linux_kernel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

0. linux_kernel 🔻
1. 리눅스 커널 소스 다운로드 및 압축 풀기 🔻
2. 소스에 시스템 콜 추가 🔻
3. 추가한 시스템 콜을 컴파일 하기 위한 환경 세팅 🔻
4. 소스 코드 옮기고 계속 컴파일 환경 설정 🔻
5. 컴파일 🔻
6. 컴파일한 커널을 OS에 설치 🔻
7. 추가한 시스템 콜이 정상적으로 작동하는지 확인해보기(유저 레벨) 🔻



0️⃣ linux_kernel

가상환경인 VMware에서 64-bit 우분투(Ubuntu)를 기반으로 리눅스 커널의 컴파일과 시스템 콜 추가 작업을 진행했습니다.

  1. 리눅스 커널: 커널은 운영 체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 상호 작용을 관리합니다. 커널은 시스템 리소스(예: 메모리, CPU 시간)를 할당하고, 장치 드라이버를 관리하며, 사용자와 시스템 간의 인터페이스 역할을 합니다.

  2. 커널 컴파일: 커널 컴파일은 커널 소스 코드를 기계어로 변환하는 과정을 말합니다. 리눅스 커널은 다양한 설정 옵션을 제공하므로, 사용자는 이러한 옵션을 사용하여 자신의 환경에 맞게 커널을 커스텀화할 수 있습니다. 커널을 컴파일하면, 해당 시스템에 최적화된 커널을 얻을 수 있으며, 필요하지 않은 기능을 제거하거나 추가적인 기능을 포함시킬 수 있습니다.

  3. 시스템 콜 추가: 사용자 공간의 애플리케이션과 커널 공간 사이의 인터페이스 역할을 합니다. 이를 통해 프로그램은 커널에게 다양한 서비스(예: 파일 작성, 메모리 할당)를 요청할 수 있습니다. 시스템 콜을 추가한다는 것은 새로운 기능이나 서비스를 커널에 추가하겠다는 의미입니다. 예를 들어, 특정한 하드웨어 기능을 지원하거나, 새로운 방식의 리소스 관리 기능을 구현할 수 있습니다.

리눅스 커널은 운영 체제의 중심적인 부분이며, 커널 컴파일은 이 커널을 특정 환경에 맞게 최적화하는 과정입니다. 시스템 콜을 추가하면 커널의 기능을 확장하여 사용자 애플리케이션에 새로운 서비스를 제공할 수 있습니다.



1️⃣ 리눅스 커널 소스 다운로드 및 압축 풀기

wget https://mirros.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.18.16.tar.xz  // 소스 다운로드
tar xvf linux-5.18.16.tar.xz  // 압축 풀기
cd linux-5.18.16



2️⃣ 소스에 시스템 콜 추가

cd kernel
nano mycall.c

l1



3️⃣ 추가한 시스템 콜을 컴파일 하기 위한 환경 세팅

nano Makefile

l2

cd ..
cd ./arch/x86/entry/syscalls
nano syscall_64.tbl

l3

cd ../../../..
cd ./include/linux
nano syscalls.h

l4



4️⃣ 소스 코드 옮기고 계속 컴파일 환경 설정

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev flex libelf-dev bison
cd ~ (tar 파일 받은 경로로 이동하기)
sudo cp -r linux-5.18.16/usr/src/linux-5.18.16
cd /usr/src/linux-5.18.16
sudo cp /boot/config-$(uname -r) .config
sudo make menuconfig
// 만약 아래 메시지가 출력되면, 디스플레이 크기 변경하고 해상도도 100%로 줄일 것
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.

// 정상적으로 창이 뜨면, load -> save -> exit
sudo nano .config

// 아래와 같이 해당 항목들의 값을 ""로 변경
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""



5️⃣ 컴파일

sudo make -j8  // 컴파일 시간을 줄이기 위해 코어 개수를 8로 설정

l5

중간에 위와 같은 메시지가 뜨지 않는 경우, 오타가 났을 확률이 높으므로 재확인 필요!

sudo make modules_install -j8  // 컴파일 시간을 줄이기 위해 코어 개수를 8로 설정

l6

실행 결과 확인



6️⃣ 컴파일한 커널을 OS에 설치

l7

그 전의 커널 버전

l8

새로운 커널 설치하기

l9

sudo reboot

l10



7️⃣ 추가한 시스템 콜이 정상적으로 작동하는지 확인해보기(유저 레벨)

nano systest.c

l11

gcc -o systest.out systest.c

l12

sudo dmesg  // 커널 메시지 확인(SYSCALL_DEFINE1, SYSCALL_DEFINE0)

l13

About

가상환경(VMware)에서 우분투(Ubuntu 64-bit)를 활용하여 커널 컴파일 및 시스템 콜을 만들었습니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •