리눅스 커널 모듈 컴파일 방법

2023. 5. 6. 01:25카테고리 없음

$ cd linux-5.15.65 $ make x86_64_defconfig $ make all $ sudo make modules_install $ sudo make install

0. 패키지 설치 && make clean && 리눅스 소스코드

sudo apt-get install build-essential libncurses5 libncurses5-dev bison flex libssl-dev libelf-dev bin86 kernel-package
make clean

make clean으로 이전에 수행했던 컴파일과정에서 생성된 오브젝트 파일, 커널, 임시파일, 설정값을 삭제할 수 있다.

$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.65.tar.xz $ tar xvf linux-5.15.65.tar.xz

리눅스 소스코드는 wget으로 받을 수 있다

  1. make menuconfig

config를 하면 기초적인 모듈만 올라가기 때문에 .config를 세팅하지 않으면 모듈이 올라가지 않는다

sudo make menuconfig

를 하면 GUI로 세팅할 수 있다. 이 방식의 장점은 각 설정값들의 의존관계를 볼 수 있다는 것이다.

의존성이 있는 부분들의 세팅을 바꿔주고 설정을 하면 에러날 일이 적다

2. make menuconfig에 들어가면 기존의 config 중 하나를 load 해야한다

load -- config (원하는 config full name 입력)

/boot에 가면 기존 리눅스 config파일들을 찾을 수 있는데 이들 중 하나를 갖고온 후에 수정을 하는게 좋다

3. 원하는 모듈이 있는지 검색한다. 가령 f2fs 파일 모듈을 원한다면

/F2FS

로 검색하면 있는지 확인할 수 있다. m이 표시되어 있으면 모듈이 있다는 것이다

** 커널 이름은 CONFIG_LOCAL_VERSION에서 변경할 수 있다

4. 이 과정이 마치면 디렉토리에 .config 파일이 생긴다. 그리고 이 파일이 디폴트 설정 파일이 된다.

5. make -j

make를 하게 되면 커널이 컴파일 된다. -j option에 들어갈 코어 수는 /proc/cpuinfo로 볼 수 있따

6. make modules

커널 모듈이 컴파일되고 설치된다. 커널 모듈은 /etc/modules에 설치된다

7. make modules_install

/etc/modules를 보고 /lib/modules에 모듈들을 복사해준다.

 

make INSTALL_MOD_STRIP=1 modules_install -j <cpu 갯수>

를 사용하면 불필요한 정보를 제거한 후 모듈을 설치하고 커널을 설치한다

8. sudo make install

sudo make install

bootstrap에게 새롭게 바뀐 설정을 알려준다

9. sudo reboot now

sudo reboot now

reboot 후에는 해당 커널로 커널을 변경할 수 있다

10. module 확인, 적재

vim .config에서 f2fs를 찾아봐서 m이라고 적혀있으면 모듈로 된 것이다

11. make fs/f2fs/

make fs/f2fs/

이런식으로 하면 이 디렉토리만 컴파일해서 모듈로 사용이 가능하다

12. lsmod | grep f2fs

lsmod | grep f2fs

lsmod 명령어는 리눅스 커널에 있는 모듈들의 정보를 알려준다

그냥 lsmod만 사용하면 모든 모듈을 확인할 수 있다

13. sudo insmod f2fs.ko

sudo insmod f2fs.ko

insmod로 모듈을 리눅스 커널에 삽입할 수 있다

14. sudo rmmod f2fs

sudo rmmod f2fs

모듈을 리눅스 커널에서 삭제한다

15.

특정 모듈을 재컴파일해서 올리고 싶으면 rmmod로 모듈 삭제한 후에 다시 올려주면된다

+

커널이 안바뀌면

vim /etc/default/grub 여기를 확인해보면 된당...